操作系统常见面试题总结
说明:本文仅供学习交流,转载请标明出处。欢迎转载。
操作系统常见面试题总结
1. 进程与线程的差别
(1) 粒度性分析:线程的粒度小于进程。
(2) 调度性分析:进程是资源拥有的基本单位,线程是独立调度与独立执行的基本单位,出了寄存器。程序计数器等必要的资源外基本不拥有其它资源。
(3) 系统开销分析:因为线程基本不拥有系统资源。所以在进行切换时,线程切换的开销远远小于进程。
2. 进程的状态及其转换
3. 进程同步与相互排斥的差别
相互排斥:是指某一资源同一时候仅仅同意一个訪问者对其进行訪问,具有唯一性和排它性。但相互排斥无法限制訪问者对资源的訪问顺序,即訪问是无序的。
同步:是指在相互排斥的基础上(大多数情况),通过其他机制实现訪问者对资源的有序訪问。在大多数情况下。同步已经实现了相互排斥。特别是全部写入资源的情况必然是相互排斥的。
少数情况是指能够同意多个訪问者同一时候訪问资源。
简单地说:同步体现的是一种协作性,相互排斥体现的是一种排他性。
4. 进程间的通信方式有哪些?
(1) 管道( pipe ):管道是一种半双工的通信方式,数据仅仅能单向流动。并且仅仅能在具有亲缘关系的进程间使用。进程的亲缘关系一般是指父子进程关系。
(2)有名管道 (named pipe) : 有名管道也是半双工的通信方式。可是它同意无亲缘关系进程间的通信。
(3)信号量( semophore ) : 信号量是一个计数器。能够用来控制多个进程对共享资源的訪问。
它常作为一种锁机制,防止某进程正在訪问共享资源时。其它进程也訪问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(4) 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道仅仅能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号 ( sinal ) : 信号是一种比較复杂的通信方式,用于通知接收进程某个事件已经发生。
(6)共享内存( shared memory ) :共享内存就是映射一段能被其它进程所訪问的内存,这段共享内存由一个进程创建,但多个进程都能够訪问。共享内存是最快的 IPC 方式,它是针对其它进程间通信方式执行效率低而专门设计的。它往往与其它通信机制。如信号两。配合使用。来实现进程间的同步和通信。
(7)套接字( socket ) : 套解口也是一种进程间通信机制。与其它通信机制不同的是,它可用于不同及其间的进程通信。
5. 作业(或进程)的调度算法有哪些?
(1) 先来先服务(FCFS,First-Come-First-Served): 此算法的原则是依照作业到达后备作业队列(或进程进入就绪队列)的先后次序来选择作业(或进程)。
(2) 短作业优先(SJF,Shortest Process Next):这样的调度算法主要用于作业调度,它从作业后备队列中挑选所需执行时间(预计值)最短的作业进入主存执行。
(3) 时间片轮转调度算法(RR,Round-Robin):当某个进程运行的时间片用完时,调度程序便停止该进程的运行。并将它送就绪队列的末尾。等待分配下一时间片再运行。然后把处理机分配给就绪队列中新的队首进程,同一时候也让它运行一个时间片。
这样就能够保证就绪队列中的全部进程。在一给定的时间内,均能获得一时间片处理机运行时间。
(4) 高响应比优先(HRRN。Highest Response Ratio Next): 依照高响应比((已等待时间+要求执行时间)/ 要求执行时间)优先的原则,在每次选择作业投入执行时,先计算此时后备作业队列中每一个作业的响应比RP然后选择其值最大的作业投入执行。
(5) 优先权(Priority)调度算法: 依照进程的优先权大小来调度,使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意:优先数越多,优先权越小。
(6) 多级队列调度算法:多队列调度是依据作业的性质和类型的不同,将就绪队列再分为若干个子队列。全部的作业(或进程)按其性质排入对应的队列中,而不同的就绪队列採用不同的调度算法。
6. 死锁产生的原因。死锁产生的必要条件是什么,怎样预防死锁,怎样避免死锁,死锁定理?
死锁产生的原因:(1)竞争资源。(2)进程推进顺序不当。
死锁产生的必要条件:
(1)相互排斥条件:一个资源一次仅仅能被一个进程所使用,即是排它性使用。
(2)不剥夺条件:一个资源仅能被占有它的进程所释放,而不能被别的进程强占。
(3)请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源要求。而该资源又已被其他进程占有,此时请求进程堵塞,但又对已经获得的其他资源保持不放。
(4)环路等待条件:当每类资源仅仅有一个时,在发生死锁时。必定存在一个进程-资源的环形链。
预防死锁:破坏四个必要条件之中的一个。
死锁的避免:银行家算法,该方法同意进程动态地申请资源。系统在进行资源分配之前。先计算资源分配的安全性。若此次分配不会导致系统从安全状态向不安全状态转换,便可将资源分配给进程;否则不分配资源,进程必须堵塞等待。从而避免发生死锁。
死锁定理:S为死锁状态的充分条件是:尚且仅当S状态的资源分配图是不可全然简化的,该充分条件称为死锁定理。
死锁的解除:
(1) 方法1:强制性地从系统中撤消一个或多个死锁的进程以断开循环等待链,并收回分配给终止进程的所有资源供剩下的进程使用。
(2) 方法2:使用一个有效的挂起和解除机构来挂起一些死锁的进程,事实上质是从被挂起的进程那里抢占资源以解除死锁。
7. 分段式存储管理、分页式存储管理。两个的差别?
分段式存储管理:分页存储管理是将一个进程的地址(逻辑地址空间)空间划分成若干个大小相等的区域。称为页,对应地。将内存空间划分成与页同样大小(为了保证页内偏移一致)的若干个物理块。称为块或页框(页架)。在为进程分配内存时,将进程中的若干页分别装入多个不相邻接的块中。
分页式存储管理:在分段存储管理方式中。作业的地址空间被划分为若干个段,每一个段是一组完整的逻辑信息。如有主程序段、子程序段、数据段及堆栈段等,每一个段都有自己的名字,都是从零開始编址的一段连续的地址空间,各段长度是不等的。
两者的差别:
1.页是信息的物理单位。分页是为了实现非连续的分配,以便解决内存的碎片问题,或者说分页是为了因为系统管理的须要。
2.页的大小固定是由系统确定的。将逻辑地址划分为页号和页内地址是由机器硬件实现的。
而段的长度是不固定的。决定与用户的程序长度,通常由编译程序进行编译时依据信息的性质来划分。
3.分页式存储管理的作业地址空间是一维的,分段式的存储管理的作业管理地址空间是二维的。
8. 页面置换算法有哪些?
(1) 最佳置换算法(Optimal):即选择那些永不使用的,或者是在最长时间内不再被訪问的页面置换出去。(它是一种理想化的算法,性能最好,但在实际上难于实现)。
(2) 先进先出置换算法FIFO:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
(3) 近期最久未使用置换算法LRU(Least Recently Used):该算法是选择近期最久未使用的页面予以淘汰,系统在每一个页面设置一个訪问字段。用以记录这个页面自上次被訪问以来所经历的时间T,当要淘汰一个页面时。选择T最大的页面。
(4) Clock置换算法:也叫近期未用算法NRU(Not RecentlyUsed)。该算法为每一个页面设置一位訪问位,将内存中的全部页面都通过链接指针链成一个循环队列。
当某页被訪问时,其訪问位置“1”。
在选择一页淘汰时。就检查其訪问位,假设是“0”。就选择该页换出;若为“1”。则又一次置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到訪问位为“0”的页面为止。因为该算法仅仅有一位訪问位,仅仅能用它表示该页是否已经使用过。而置换时是将未使用过的页面换出去,所以把该算法称为近期未用算法。
(5) 最少使用置换算法LFU:该算法选择近期时期使用最少的页面作为淘汰页。