操作系统八股文(二)

目录

21.内存覆盖是什么?有什么特点?

22.内存交换是什么?有什么特点?

23.什么是快表?

24.执行malloc申请内存时,操作系统是怎么做的?

25.什么是守护进程、孤儿进程、僵尸进程?

26.局部性原理?

27.地址转换中,有快表和没快表有什么区别?

28.如何避免僵尸进程?

29.什么是父进程、子进程、进程组、作业、会话?

30.进程终止的几种方式?

31.常见的磁盘调度算法有哪些?

32.什么是抖动(颠簸现象)?

33.堆和栈哪个分配效率更高?

34.常见的内存错误有哪些?

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

36.内存交换时,哪些进程被优先考虑?

37.什么是系统并发、并行?

38.页面置换算法有哪些?

39.什么是死锁?

40.产生死锁的原因有哪些?


21.内存覆盖是什么?有什么特点?

        程序运行时并非在任何时候都要访问程序数据的各个部分,所以可以将用户空间分成固定区覆盖区,经常访问的数据放在固定区,其余即将要访问的数据放在覆盖区,剩余的数据放在外存中,当需要访问时,将其从外存中与覆盖区中的数据交换。

        特点:发生在同一进程中不需要将程序的所有数据一起都放入内存中才可以运行程序;只有覆盖区才可以更新数据。

22.内存交换是什么?有什么特点?

        在内存空间紧张的时候,将内存中某些处于等待状态没有cpu运行权力的进程换出到外存,外存中已具备运行条件的进程换入到内存。

        特点:发生在不同进程间。

23.什么是快表?

        又称联想寄存器(TLB),一种比内存访问速度更快的高速缓冲存储器,存放当前访问的页表项,提高地址转换速度。

24.执行malloc申请内存时,操作系统是怎么做的?

        malloc申请内存主要是两个系统调用:brkmmap

        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)循环等待条件:存在一种进程资源循环等待链,链中每个进程获得资源的同时被链中的下一个进程所请求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值