操作系统常见面试题
本意用于考研复试,以下是博主自己整理,博主是大四本科生,不能保证内容完全正确,请辩证地看,如果有问题可以在评论区指出我再修改。
整理不易,我就不挂个二维码请游客付费了,如果可以的话,麻烦高抬贵手,点一下右下角的推荐吧!
1、什么是进程(Process)和线程(Thread)?有何区别?
进程是一个能独立运行的活动实体,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。同一个进程中的多个线程之间可以并发执行。
进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。
2、操作系统的特征
并发、共享、虚拟、异步
并行是指两个或多个事件在同一时刻发生。
并发性是指两个或多个事件在同一时间间隔内发生.
3、三态、五态、七态
三态:就绪、执行、阻塞(I/O请求、申请缓冲失败)
五态:就绪、执行、阻塞、创建、终止
七态:就绪、执行、阻塞、创建(用户登陆、提供服务、作业调度)、终止、挂起、激活
4、中断与异常
中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
异常是指进程在运行时发生了某种异常事件,使程序无法继续运行。( 越界错,非法指令、除数0、越权访问)
5.线程同步几种方式。
(1)临界区(CriticalSection)
当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式:
(2)事件(Event)
事件机制,则允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。比如在某些网络应用程序中,一个线程如A负责侦听通信端口,另外一个线程B负责更新用户数据,利用事件机制,则线程A可以通知线程B何时更新用户数据。
(3)互斥量(Mutex)
互斥对象和临界区对象非常相似,只是其允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,但是更节省资源,更有效率。
(4)信号量(Semphore)
当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。Semaphore类对象保存了对当前访问某一个指定资源的线程的计数值,该计数值是当前还可以使用该资源的线程数目。如果这个计数达到了零,则所有对这个Semaphore类对象所控制的资源的访问尝试都被放入到一个队列中等待,直到超时或计数值不为零为止。
6.用户态和核心态的区别。
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。
1)用户态切换到内核态的3种方式
a. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现
b. 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
c. 外围设备的中断
7.死锁的概念
死锁定义为一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。当一组进程中的每个进程都在等待某个事件(典型的情况是等待所请求的资源释放),而只有在这组进程中的其他被阻塞的进程运行完毕后才可以释放该事件,这时就称这组进程发生死锁。因为没有事件能够被触发,所以死锁是永久性的。
8. 导致死锁的四个必要条件。
1)互斥。一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。
2)占有且等待。当一个进程等待其他进程时,继续占有已经分配的资源。
3)不可抢占。不能强行抢占进程已占有的资源。
4)循环等待。存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源。
9. 处理死锁的方式。
1)死锁预防
2)死锁避免
银行家算法:首先需要定义状态和安全状态的概念。系统的状态是当前给进程分配的资源情况。(状态包含两个向量Resource(系统中每种资源的总量)和Available(未分配给进程的每种资源的总量)及两个矩阵Need(表示进程对资源的需求)和Allocation(表示当前分配给进程的资源)。)安全状态是指至少有一个资源分配序列不会导致死锁。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程直到同意该请求后系统状态仍然是安全的。
3)死锁检测
它不限制资源访问或约束进程行为,只要有可能,被请求的资源就被授权给进程。操作系统周期性地执行一个算法检测前面的循环等待的条件。
10.进程调度算法。(周转时间=程序结束时间-开始服务时间,带权周转时间=周转时间/ 要求服务时间)
(1)先来先服务和短作业(进程)优先调度算法
(2)高优先权优先调度算法
非抢占式优先权算法
抢占式优先权调度算法(高性能计算机操作系统)
(3)高响应比优先调度算法
(4)基于时间片的轮转调度算法
(5)多级反馈队列调度算法
其实施过程如下:
a.设置多个就绪队列,并为各个队列赋予不同的优先级。在优先权越高的队列中,为每个进程所规定的执行时间片就越小。
b.当一个新进程进入内存后,首先放入第一队列的末尾,按FCFS原则排队等候调度。 如果他能在一个时间片中完成,便可撤离;如果未完成,就转入第二队列的末尾,在同样等待调度…… 如此下去,当一个长作业(进程)从第一队列依次将到第n队列(最后队列)后,便按第n队列时间片轮转运行。
c.仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1到第(i-1)队列空时, 才会调度第i队列中的进程运行,并执行相应的时间片轮转。
d.如果处理机正在处理第i队列中某进程,又有新进程进入优先权较高的队列, 则此新队列抢占正在运行的处理机,并把正在运行的进程放在第i队列的队尾。
11.生产者-消费者问题,
两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,或者当缓冲区空时,消费者还要从中取出数据项的问题。为了保证这种情况不会发生,我们通常使用信号量和消息传递来解决生产者-消费者问题。
12.使用虚拟内存的好处:
1、在内存中保留多个进程。由于对任何特定的进程都仅仅装入它的某些块,因此就有足够的空间来放置更多的进程。
2、进程可以比内存的全部空间还大。
13. 内存连续分配方式采用的几种算法及各自优劣。
(1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小需求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。
(2)循环首次适应算法。该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再每次从链首开始查找,而是从上次找到的空闲分区开始查找,直至找到一个能满足需求的空闲分区,并从中划出一块来分给作业。该算法能使空闲中的内存分区分布得更加均匀,缺点是将会缺乏大的空闲分区。
(3)最佳适应算法。该算法总是把既能满足需求,又是最小的空闲分区分配给作业。
为了加速查找,该算法需求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足需求的空闲区,必然是最优的。孤立地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,缺点是在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。
(4)最差适应算法。最差适应算法中,该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。非常显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。这种分配方法初看起来不太合理,但他也有非常强的直观吸引力:在大空闲区中放入程式后,剩下的空闲区常常也非常大,于是还能装下一个较大的新程式。
14. 分段分页方式的比较各自优缺点。
分段和分页其实都是一种对地址的划分或者映射的方式。
1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。
2)页的大小固定且由系统确定,段的长度却不固定,决定于用户所编写的程序
3)分页的作业地址空间是一维的,程序员只须利用一个记忆符(线性地址的16进制表示),。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名(比如数据段、代码段和堆栈段等),又需给出段内地址。
4)页和段都有存储保护机制。但存取权限不同:段有读、写和执行三种权限;而页只有读和写两种权限
15.外存分配的几种方式,及各种优劣。
(1) 连续分配
原理:创建文件时,分配一组连续的块;FAT(文件分配表)中每个文件只要一项,说明起始块和文件长度。对于顺序文件有利。
优点:1.简便。适用于一次性写入操作。2.支持顺序存取和随机存取,顺序存取速度快。3.所需的磁盘寻道次数和寻道时间最少。(因为空间的连续性,当访问下一个磁盘块时,一般无需移动磁头,当需要移动磁头时,只需要移动一个磁道。)
缺点:1.文件不能动态增长。(可能文件末尾处的空块已经分配给了别的文件)2.不利于文件的插入和删除。3.外部碎片问题。(反复增删文件后,很难找到空间大小足够的连续块,需要进行紧缩。)4.在创建文件时需声明文件大小。
(2)链式分配
原理:一个文件的信息存放在若干个不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块。fat中每个文件同样只需要一项,包括文件名、起始块号和最后块号。任何一个自由块都可以加入到链中。
优点:1.提高磁盘的空间利用率,不存在外部碎片问题。2.有利于文件的插入和删除。3.有利于文件的动态扩充。
缺点:1.存取速度慢,一般只适用于信息的顺序存取,不适于随机存取。2.查找某一块必须从头到尾沿着指针进行。3.可靠性问题,如指针出错。4.更多的寻道次数和寻道时间。5.链接指针占一定的空间,将多个块组成簇,按簇进行分配而不是按块进行分配。(增加了磁盘碎片)
(3)索引分配
原理:每个文件在FAT中有一个一级索引,索引包含分配给文件的每个分区的入口。文件的索引保存在单独的一个块中,FAT中该文件的入口指向这一块。
优点:1.保持了链接结构的优点,又解决了其缺点:按快分配可以消除外部碎片。按大小可改变的分区分配可以提高局部性。索引分配支持顺序访问文件和直接访问文件,是普遍采用的一种方式。2.满足了文件动态增长,插入删除的要求。(只要有空闲块)3.能充分利用外存空间。
缺点:1.较多的寻道次数和寻道空间。2.索引表本身带来了系统开销,如:内外存空间、存取时间。
(4)多重索引
原理:首先,多重索引也是索引分配的一种,只不过它是将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中。
16同步与互斥
互斥:是指散布在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。
同步:是指散布在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。