操作系统-高频面试题总结

文章目录

    • 1. 操作系统的特征有哪些?
    • 2. 说一说进程和线程?
    • 3. 进程有哪几种状态?各种状态之间的转换过程?
    • 4. 进程通信是什么?有哪些方式?
    • 5. 进程同步是什么?有哪些方式?
    • 6. 简要介绍进程调度算法?
    • 7. 临界区是什么?如何解决冲突?
    • 8. 死锁是什么?有什么产生条件?
    • 9. 谈一谈死锁的常见解决方法?
    • 10. 说一说分页和分段?
    • 11. 说说分页存储管理的地址转换过程?
    • 12. 什么是虚拟内存?有什么好处?
    • 13. 什么是内部碎片,什么是外部碎片?
    • 14. 谈谈常见的页面置换算法?
    • 15. 说一说进程运行过程中的颠簸现象?
    • 16. 中断是什么?说一说中断的处理过程?

1. 操作系统的特征有哪些?

并发:同一段时间内有多个进程并发执行。

共享:系统的资源能被多个同时执行的进程或线程共享。

虚拟:通过时分复用或空分复用技术将一个物理实体虚拟为多个。

异步:系统中的进程是以不可预知的速度进行,与按序执行的同步相反。


2. 说一说进程和线程?

进程是进程实体的运行过程,是系统进行资源分配和调度的独立单位;

线程是比进程更小的可独立运行的单位,可以看作轻量级进程,引入线程的目的是为了减小并发执行过程中的开销,增加并发率。一个进程内可以有多个线程。

两者的对比:

  1. 调度方面:线程是独立的系统调度单位,而进程作为资源的拥有单位。
  2. 并发性方面:进程间可以并发,一个进程内的多个线程也可以并发。
  3. 资源方面:进程是基本的资源拥有单位,线程能访问所属进程的资源。
  4. 系统开销方面:创建或撤销进程,需要回收PCB和系统资源,切换时也要保存和恢复CPU环境,开销比较大。而线程的切换不涉及到太多资源的更改,开销小。

3. 进程有哪几种状态?各种状态之间的转换过程?

就绪态,运行态,阻塞态。

  • 就绪态–>运行态:CPU空间,进程被调度。
  • 运行态–>就绪态:时间片用完,被抢占。
  • 运行态–>阻塞态:等待资源分配,如IO设备。
  • 阻塞态–>就绪态:资源分配完毕,如IO操作结束。

4. 进程通信是什么?有哪些方式?

进程通信指的是进程之间交换数据的方式。进程通信分为低级通信高级通信

低级通信通过信号量方式。高级通信方式包括:共享存储、消息传递、管道通信

  • 信号量:能保证某资源被互斥访问,或控制被访问的顺序(同步)。

  • 共享存储:在进程之间有一块共享内存区域可直接访问,通过对这个区域的读操作或写操作来实现数据共享,这个过程是互斥的。

  • 消息传递:进程间以格式化的消息为单位进行数据交换。有直接通信方式和间接通信方式两种,直接通信方式是发送进程直接将消息发送给接收进程缓冲队列,接收进程从缓冲队列中取得消息。间接通信方式是将消息发送到一个中间实体中,相当于信箱,接收进程从实体中取得消息。

  • 管道通信:管道,就是指连接读进程和写进程的一个共享文件,然后进行半双工地读写文件。


5. 进程同步是什么?有哪些方式?

进程同步指的是多个并发进程的按照某种顺序执行。

  1. 互斥量:拥有互斥量的进程才能访问资源。互斥量对象只有一个,所以保证公共资源不会被多个线程同时访问。
  2. 信号量:允许有限个进程访问同一资源,信号量每分配一个减一,直到为0时,就不能继续分配。
  3. 等待/唤醒事件:通过唤醒的方式来控制多个进程的执行顺序。

6. 简要介绍进程调度算法?

先来先服务算法:按顺序执行进程,优点是公平,缺点是短作业会等待较长时间。

短作业优先算法:选择处理时间最短的先执行,优点是平均等待时间短,周转时间更短,缺点是长作业会一直排在后面,不公平,还可能会造成饥饿。

高相应比算法:响应比=执行时间+等待时间/执行时间,相应比越高,越先执行。优先是综合考虑了等待时间和处理时间。当等待时间相同时,处理时间越短的越先执行;当处理时间相同时,先来的先执行。

时间片轮转:给每个进程分配时间片,按到达顺序,循环执行。优点是公平,而且每个进程都能被执行到。

优先级调度算法:根据上层设置的优先级来决定执行顺序。

多级反馈队列调度算法:是一个效率很高的调度算法。设有多级队列,时间片长度由小到大,优先级由高到低。当有新进程时,加入到优先级最高队列,执行后移动到低一级的队列中。优先执行高优先级队列中的进程,直到高优先级为空,再执行低优先级的进程。

前三种是批处理操作系统常用,后三种倾向于交互式操作系统。


7. 临界区是什么?如何解决冲突?

每个进程中访问临界资源的那段程序称为临界区,一次仅允许一个进程使用的资源称为临界资源。

解决冲突方法:

  • 忙则等待:当临界资源正在被访问时,不允许其他进程访问临界资源。

  • 闲则让进:当临界资源空闲时,让需要访问他的进程来访问它。

  • 有限访问:一个进程访问临界资源的时间是有限的,不能一直占用。

  • 让权等待:当进程等待许久一直得不到访问临界资源的机会,应该主动让出,避免出现“忙等”现象。


8. 死锁是什么?有什么产生条件?

死锁是在多个运行的进程中,因为资源的不合理分配而使得他们互相等待别人手里的资源,导致多个进程进入阻塞状态

  • 互斥:他们争抢的资源是不能同时使用的;
  • 非剥夺:进程间不会剥夺这些资源,只能自愿释放;
  • 占有并保持申请:一个进程至少占有一个资源,并捏着不放,继续申请其他资源;
  • 循环等待:进程之间形成头尾相连的资源等待链;

9. 谈一谈死锁的常见解决方法?

  1. 死锁预防
    就是确保死锁的四个必要条件中至少一个不满足,就能预防死锁的发生。

    • 破坏互斥条件:将某些互斥资源变为共享资源,但大部分资源不允许同时使用,无实用价值。
    • 破坏非抢占:允许进程强行剥夺资源,但这样实现困难,而且会降低性能。
    • 破坏持有和申请:只有在系统能满足进程所需的所有资源时,才进行分配。但进程的申请资源过程是动态的,无法预知他所需的所有资源。
    • 破坏循环等待:给资源编号,实行有序分配,只允许按递增顺序申请资源。但是,资源的加入,删除导致编号过程复杂,而且进程使用资源的过程可能是逆序的,就导致一些资源空闲,降低了效率。
  2. 死锁避免
    当进程申请资源时,检测资源分配后系统是不是安全状态,就是说,存在一个安全分配序列,使得系统能够分配各个进程所需的资源。如银行家算法。

  3. 死锁检测与解除
    允许进程运行过程中出现死锁,在发生死锁后,通过某种方法检测出,并采取相关措施解除死锁,比如终止所有死锁进程资源,或一次终止一个直到死锁解除。或者剥夺某些死锁进程的资源。


10. 说一说分页和分段?

分页,分段都是内存的非连续分配方式。

分页,指的是将进程的逻辑地址分为大小固定的页,然后每一页对应着一块大小固定的物理内存块,这些物理内存块可以是离散的。
分段,指的是将进程的逻辑地址分为大小不固定的段,每一个段对应着一块离散的物理内存块。

两者的区别是:

  1. 目的方面:分页是由系统决定,为了提高内存利用率。分段是从用户提出的,为了更好满足用户的需要。
  2. 大小方面:页的大小是固定的,段的长度不固定,由用户编写的程序决定。
  3. 地址形式方面:页向用户提供的是一维地址空间。段提供的二维地址空间(段号+段内地址)。
  4. 信息共享方面:分段便于信息的共享,因为根据段号和段长很容易确定区域,而分页在信息共享方面存在限制,因为共享资源的分布是打散的。
  5. 内存碎片方面:分页不会产生外部碎片,因为页的大小固定,但可能产生内部碎片,就是一个页填充不满。分段不会产生内部碎片,因为段大小可变,但会产生外部碎片。

11. 说说分页存储管理的地址转换过程?

  1. 首先根据逻辑地址得到页号和页内偏移量。
  2. 检查页号是否合法(小于页表长度)。
  3. 检查快表中是否有相同的页号。
  4. 如果有,就直接得出起始物理地址,然后加上页内偏移量则为目标物理地址。
  5. 如果没有,根据页号在页表(慢表)中计算出页表项,判断对应页在不在内存中。
  6. 如果不在,进程中断,并等待页面置换完毕。
  7. 根据内存块号,得到基址。
  8. 起始物理地址+页内偏移量就是目标物理地址。

12. 什么是虚拟内存?有什么好处?

虚拟内存是一种内存扩容技术。

它的思想是,一个运行的进程,不必要把所有的数据全部放入内存中,而是需要用到的时候在从外部调入内存中。而且进程的数据不需要一直保存在内存中,当内存空间不够时,部分数据可以被系统调出内存。

所以在用户的角度上看的内存的大小远远大于实际内存的大小。

好处:在内存中可以保留多个进程的数据,系统并发度提高


13. 什么是内部碎片,什么是外部碎片?

内部碎片指的是分配给某进程的内存区域中,有些部分没有用上。

外部碎片指的是在动态分配内存过程中,会产生一些很小的空闲内存区域,难以被利用。


14. 谈谈常见的页面置换算法?

  • 先进先出算法:淘汰最先进入物理内存块的页面。这个算法实现简单,但效率低下,还存在一种问题,当分配的内存块变多时,缺页中断次数可能变多。

  • 最佳置换算法:淘汰最久不会被访问的页面。这个算法的前提是,已经确定页面的访问序列。但进程要访问哪些页面是不能提前预知的,所以这个算法无法实现。

  • 最近最久未使用算法:淘汰最近最久未使用的页面,和最佳置换算法的方向相反,这个是往前面找。但这个算法实现困难,需要专门的硬件支持。

  • 时钟置换算法:给每个页表项增加访问标记和修改标记,循环遍历页面,优先选择未被访问和未被修改的页面进行淘汰。


15. 说一说进程运行过程中的颠簸现象?

颠簸指的是刚刚换出的页面马上就又被换入,刚刚换入的页面马上被换出,从而导致运行效率急剧下降。
这是因为进程拥有的物理内存块数小于频繁使用的页面数。应当增加物理内存块数。


16. 中断是什么?说一说中断的处理过程?

中断是指程序在运行过程中,因为某些事件,需要暂停当前工作,并处理其他事件,处理完毕后,又要恢复之前的状态。

处理过程:

  1. 保护现场:将当前执行的程序相关数据保存到寄存器。
  2. 开中断:以便中断时响应更高级别的中断请求。
  3. 中断处理:执行中断的处理程序。
  4. 关中断:保证在恢复现场时不受其他影响。
  5. 恢复现场:从寄存器中读出数据,恢复中断前的状态。

你可能感兴趣的:(操作系统)