目录
21.内存覆盖是什么?有什么特点?
程序运行时并非在任何时候都要访问程序数据的各个部分,所以可以将用户空间分成固定区和覆盖区,经常访问的数据放在固定区,其余即将要访问的数据放在覆盖区,剩余的数据放在外存中,当需要访问时,将其从外存中与覆盖区中的数据交换。
特点:发生在同一进程中;不需要将程序的所有数据一起都放入内存中才可以运行程序;只有覆盖区才可以更新数据。
22.内存交换是什么?有什么特点?
在内存空间紧张的时候,将内存中某些处于等待状态、没有cpu运行权力的进程换出到外存,外存中已具备运行条件的进程换入到内存。
特点:发生在不同进程间。
23.什么是快表?
又称联想寄存器(TLB),一种比内存访问速度更快的高速缓冲存储器,存放当前访问的页表项,提高地址转换速度。
24.执行malloc申请内存时,操作系统是怎么做的?
malloc申请内存主要是两个系统调用:brk和mmap
brk:将进程数据段(.data)的最高地址指针向高处移动,这一步扩大进程在运行时的堆大小。
mmap:在进程的虚拟地址空间寻找一块空闲的虚拟内存。
通常分配的内存小于128k使用brk,大于128k使用mmap。
25.什么是守护进程、孤儿进程、僵尸进程?
守护进程:在后台运行,没有控制终端与之相连的进程。独立于控制终端,周期性的执行任务。
孤儿进程:父进程退出,子进程没退出,那么这些子进程就是孤儿进程,孤儿进程被init进程(1号进程)管理,由init进程对它们完成资源回收。
僵尸进程:子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程就成为了僵尸进程。
26.局部性原理?
主要分时间局部性和空间局部性。
时间局部性:如果执行了程序中的某条指令或数据,那么该指令或数据在不久后很可能会被再次执行。
空间局部性:一旦访问了某个存储单元,不久后,其附近的存储单元很有可能被访问。
27.地址转换中,有快表和没快表有什么区别?
如果快表并且命中,那么只需访问一次内存就可以地址转换,提高地址转换速度;如果有快表没有命中,那么需要访问内存中的页表,共需要访问两次内存,并且将被访问的页表项写入快表中,避免再次被访问。
如果没有快表,那么每次进行地址转换都需要访问内存两次。
28.如何避免僵尸进程?
1)父进程调用wait/waitpid等函数等待子进程结束,回收资源
2)如果父进程很忙,在父进程中用signal注册信号处理函数,在信号处理函数中调用wait/waitpid
29.什么是父进程、子进程、进程组、作业、会话?
1)父进程:已经创建一个或多个子进程的进程。
2)子进程:fork创建的进程。
子进程从父进程继承的有:环境、堆栈、内存、进程组号等
3)进程组:多个进程的集合。每个进程组有一个组长,其进程号PID就是组号PGID,只要进程组中还有一个进程,那么该进程组就一直存在,进程组的存在与组长是否存在无关。
4)作业:shell分前后台控制的是作业或者进程组。一个前台或后台作业由多个进程组成,shell可以运行一个前台作业和多个后台作业,这称为作业控制。
Tips:为什么只能运行一个作业?
当在前台起了一个作业,那么shell就被提到了后台,shell就无法再继续接收指令并解析运行。当前台作业结束了,shell就会被提到前台,就可以继续接收命令执行。
5)会话:一个或多个进程组的集合。
30.进程终止的几种方式?
1)main函数的自然结束,return
2)调用exit函数,属于C的库函数
3)调用_exit函数,属于系统调用
4)调用abort函数,程序异常终止,同时发送SIGABRT信号给调用进程
5)接收进程结束信号ctrl c等
Tips:exit和_exit的区别?
调用_exit系统调用,系统内核会直接让进程终止;
调用exit库函数,系统会先调用终止处理程序,然后清楚I/O缓冲区,最后由内核让进程终止。
31.常见的磁盘调度算法有哪些?
先来先服务、最短寻道时间优先、电梯扫描算法
32.什么是抖动(颠簸现象)?
刚刚换出的页马上又要被换入内存,刚刚换入内存的页马上又要被换出内存,这种频繁的页面调度行为称为抖动(颠簸)。
产生的主要原因:进程频繁访问的页面数高于可用的物理块数。
33.堆和栈哪个分配效率更高?
栈的效率更高。
原因:
1)分配堆空间,需要调用malloc函数,分配时需要花费一定的时间到堆空间找到满足大小的空间,释放空间时需要调用free函数,函数做了额外的工作,而栈不需要。
2)访问堆需要两次访问内存,第一次取得指针,第二次取得数据,而栈只需要访问内存一次。
3)堆上的数据容易被系统交换到外存,而栈一般不会被交换出去。
34.常见的内存错误有哪些?
1)内存未分配成功,却使用了它
2)内存分配成功,没有初始化就使用了它
3)内存分配成功,也进行了初始化,但是操作越界
4)内存忘记释放,造成内存泄漏
5)释放了内存却继续使用它
35.内存交换中,被换出的进程保存在哪里?
保存在外存中,也就是磁盘里。
36.内存交换时,哪些进程被优先考虑?
阻塞进程、优先级低的进程 (PCB常驻内存,不会被换出)
37.什么是系统并发、并行?
并发指宏观上在一段时间内可以同时运行多个程序,并行指同一时刻能运行多个指令。
并行需要硬件支持,如多流水线、多核处理器等。
38.页面置换算法有哪些?
1)最佳置换算法(OPT):优先淘汰最长时间不会被访问的页面
2)先进先出置换算法(FIFO):优先淘汰最先进入内存的页面
3)最近最久未被使用置换算法(LRU):优先淘汰最近最久没访问的页面
4)时钟置换算法(CLOCK):循环扫描页面,优先淘汰访问位=0的页面,如果是1则置为0,继续向后寻找访问位=1的页面。
5)改进的时钟置换算法:有两个标记为(访问位,修改位),第一轮淘汰(0,0)的页面,第二轮淘汰(0,1)的页面,并将扫描过的访问位都置为0,第三轮淘汰(0,0)页面,第四轮淘汰(0,1)页面。
39.什么是死锁?
两个及以上的进程或线程相互等待对方资源而造成的死等状态。
40.产生死锁的原因有哪些?
产生死锁的四个必要条件。却一不可。
1)互斥条件:进程对所需的资源具有排他性。若其他进程请求该资源,请求的进程只能等待。
2)不可剥夺条件:进程获得的资源只能由自己释放,不可以被其他进程强行夺走。
3)请求和保持条件:进程请求其他新资源时,拥有的资源继续占有。
4)循环等待条件:存在一种进程资源循环等待链,链中每个进程获得资源的同时被链中的下一个进程所请求。