操作系统常规面试题(三玖天下第一)(三)

1.请你谈谈对虚拟内存的理解,为什么要虚拟内存?

答:虚拟内存通过将物理内存(ARM)和硬盘空间相结合,来扩展程序可用的内存容量,提供一种地址空间的抽象,来提高系统的灵活性和稳定性。他通过地址空间扩展、进程虚拟内存隔离、进程间内存区域共享、预分配虚拟内存等方式来提升系统的灵活性。

物理内存是有限的,虚拟内存使得在物理内存不足的条件下运行需要更多内存的程序,同时通过内存数据硬盘转移的方式可以避免因为物理内存耗尽而产生的系统崩溃现象。

虚拟内存简化了程序编写难度,我们不需要考虑物理内存的分布,可以编写大地址的代码,提高编程的效率和可一致性。

 2.谈谈你对栈和堆的理解,两者之间有什么区别?

答:

栈空间分配和释放:由编译器自行管理,其分配和释放在函数调用和返回过程中自动执行,当函数调用时。会为局部变量(静态变量不在栈区),函数参数等分配空间且自动回收。

栈空间存储内容:栈区主要存储函数调用时的参数,局部变量,返回地址等信息你,按照后进先出原则组织(c++ stack)。

栈空间的空间大小:栈区相对于堆区空间较小且固定,增长方向向下(高地址->低地址)。

栈空间的访问效率:由于其自动申请和释放原则,访问栈很快。

堆空间的分配和释放:需要我们申请(c++/c new/malloc)和释放(c++/c delete/free),如果不释放,会导致内存泄漏。

堆空间的存储内容:存储动态的分配的对象和数组,这些数据的生存周期超过函数调用的范围,可以跨函数使用。

堆空间的空间大小:堆区相对栈区较大,可以根据需求扩展,增长方向向上(低地址->高地址)。

堆空间的访问效率:需要我们显示管理,因此较慢。

3.分页和分段的区别是什么?

答:分页和分段都是内存管理方式,用于在操作系统中实现虚拟内存管理。

分页:将物理内存和逻辑内存都分成固定大小的块,这些快被称为页,分页的目标是为了提高内存的利用率,通过离散分配内存,减少内存碎片化,便于内存管理和保护。页的地址空间是一维的,指定地址即可访问,同时访问更快;通过页表映射逻辑地址到物理地址;页内存在内存碎片。

分段:根据程序的逻辑结构,将内存划分为不同长度的段,每个段代表程序的一部分,如代码段、数据段、堆栈段等,分段的目的是为了满足逻辑需求,如代码共享、数据保护和动态连接等。段的地址空间是二维的,需要指定段名和偏移量,因此访问更慢;通过段表映射地址;段外内存碎片

4.操作系统管理页面的算法有哪些?

答:页面置换算法是操作系统用来管理内存页面,尤其在虚拟内存中,当内存满时而新的页面需要加载时,决定要将哪个页面移除内存的方法。

先进先出算法(FIFO):按线性顺序排列。

最近最久未使用算法(LRU):按照使用时间排列,成本较高,需要维护每个页面的数据。

最不常用算法(LFU):将使用频率最低的移除,同样需要维护页面数据。

最佳算法(OPT):理论性算法

时钟算法(Clock):对LRU的优化,使用循环链表和一个使用位来模拟LRU的效果,减少了维护成本。

工作集算法(WS):考虑了进程中当前活跃的页面集合,确保这些页面在内存中,避免频繁置换正在使用的页面。

第二次机会算法(SC):FIFO的优化,检查最老的页面使用位,如果未被使用则置换,如果已被使用则检查第二老的。

5.动态链接库和静态链接好库的理解?

答:他们都是程序开发的两种不同的库文件形式。

静态链接库(lib):在编译时期连接到程序中,生成的可执行文件中包含了库中所有的用到的函数和数据的副本,因此内存占用较大且运行时不需要额外的库文件支持,因为它将库代码复制到了每个使用它的程序中,适合于不需要频繁更新的场景,因为每次有所更新,静态库都需要重编译。

动态链接库(dll):在程序运行中才会被加载到内存中,可执行文件中包含对库代码的引用而不是代码复制。因此内存占用较小但是需要去定位和加载库文件。因为他是引用所以当更新时不需要重编译,只需要替换即可,使用于需要升级和维护的场景。

6.请谈一谈你对中断和异常的理解?

答:中断和异常都是处理器响应不同类型事件时采用的额两种机制。

中断:通常是外部硬件产生的信号,用于通知处理器某些事件已经发生了,如I/O完


成,定时器溢出等。他是异步的,可以在处理器执行任何指令时发生,与当前执行指令的逻辑流无关,不依赖处理器的时钟周期。中断处理是在中断上下文中进行的,中断服务程序(ISR)可能需要快速响应以保证系统的实时性,且需要避免阻塞其他任务,当中断处理完后,处理器返回到被中断指令的下一条指令继续执行,仿佛中断并未打断程序的连续性。中断的目的是为了及时响应外部时间,维持系统的交互性和响应性,处理程序设计对外部设备状态的管理。

异常:由处理器本身执行程序过程中检测到的异常条件出发,如内存错误之类,异常是同步的。它们发生在特定指令执行期间,与处理器的执行流程直接相关,通常与时间顺序一致。异常在进程上下文中进行,因为它们与当前执行的进程直接相关,处理器需要保存当前进程的状态。异常处理完后,处理器通常会返回到发生异常的指令的下一条指令继续执行。异常的目的是为了处理错误或特殊情况,确保程序的正确执行和系统的稳定性,处理过程可能包括错误报告、资源清理或程序终止。

7.一个程序从开始运行到结束的完整过程请简述一下?

答:一个程序从开始运行到结束的完整过程可以细分为10个步骤

1.预处理:处理代码中的预处理指令,如宏定义(#define)、头文件包含(#include)等。

2.编译:将经过预处理的代码转为汇编代码,会检查语法错误,类型检测和优化代码。

3.汇编:将汇编代码转化为机器语言,即计算机可执行的二进制文件。

4.链接:连接源文件与外部库,解析符号引用,确保调用的函数和全局变量都能找到正确的定义。

5.加载:运行程序时,将可执行文件加载到内存中。分配内存空间、设置程序的切入点。

6.初始化:程序开始前,会进行初始化操作,包括静态对象的构造、设置堆和栈、环境变量的配置等。

7.执行主程序:控制权交给程序的主入口点,一般是main函数,从这里开始,按代码逻辑执行。

8.运行时操作:请求动态内存分配、文件读写等,与操作系统交互。

9.清理:当main函数终止时,进入清理阶段,调用析构(先子后父),关闭文件。

10:退出:返回退出码给操作系统,表示退出的原因,操作系统释放所有资源。

8.谈谈你对用户态和内核态的理解?

答:cpu的执行权限可分为两种级别,一种是用户态,一种是内核态,这是为了保护系统资源,确保系统的安全稳定而设计的。

用户态是一般程序执行的默认状态,在此状态下程序可以访问自己的内存空间,但是无法直接访问硬件资源

内核态具有最高的权限,允许执行所有指令,能访问控制所有硬件资源,操作系统的内核(kernel)和驱动(uboot)在内核态下运行,一般的当需要执行系统调用,处理中断或异常时,就需要切换到内核态,当切换到内核态后,程序会保存用户态的上下文(寄存器状态),然后加载内核态的上下文,完成后,再恢复用户态的上下文。(内核态和root是两种概念)

9.你觉得内存泄漏后内存溢出有什么区别?

答:内存泄漏和内存溢出是内存管理中的两种不同的问题。

内存泄漏:申请内存空间完成指令后,不需要内存了但是没有正确释放内存,导致这部分内存不可被再应用,因为在系统看来,这部分内存一直被退出的指令占据着。内存泄漏不会引起系统发生运行错误,但是当泄漏累积情况下,系统性能会下降,可能引发内存溢出。

内存溢出:尝试分配的内存超过了当前物理内存和虚拟内存的总和时,就会发生,也就是超内存上限了。会导致系统崩溃,迫使系统杀死进程。

10.内存交换中,被交换出的进程保存在哪里?

答:当物理内存不足而需要交换内存时,被交换的进程数据(不活跃的页面)会被移出物理内存并保存在硬盘上的一块特殊区域中,这个区域被称为交互空间,交换空间不是随机访问存储器(RAM)的一部分,而在硬盘上,因此读取写入较慢。

11.原子操作是如何实现的?

答:原子操作是指程序执行过程中不会被中断的操作,它要么完全执行,要么完全不执行,有始有终。这对于多线程或多处理器十分重要,依赖与软/硬层面额支持。

硬件层面通过总线锁定、缓存锁定和比较和变换的方式实现,总线锁定和缓存锁定相似,都是为了阻止其他处理器或者其他核心来访问共享内存,确保当前操作的原子性。比较和变换通过CAS指令实现。

软件层面通过锁和循环CAS实现,锁为进程或线程锁,是为了保证数据的单一性,在没有CAS的硬件中,使用软件模拟CAS实现原子性。

12.抖动你知道是什么吗?

答:操作系统中的抖动是因为内存分配不合适导致的系统性能下降的现象,当系统中运行进程数量过多时,或者少数进程对内存的需求超出可用的物理和虚拟内存的总合时,操作系统会频繁的进行页面置换,尝试将当前不活跃的页面换出到硬盘上,以便腾出内存空间,然而当分配进程的内存和虚拟内存不足以支撑其基本运行时,就会发生频繁的缺页中断、性能极限下降和资源浪费的现象。(主要是频繁的页面置换和缺页中断,看起是一抖一抖的,因此称为抖动)

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值