面试题——操作系统

操作系统基本功能:

  • 进程管理:进程控制、进程同步、进程通信、死锁处理、处理机调度等。

  • 内存管理:内存分配、地址映射、内存保护与共享、虚拟内存等。

  • 文件管理:文件存储空间的管理、目录管理、文件读写管理和保护等。

  • 设备管理:完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利率。主要包括缓冲管理、设备分配、设备处理、虛拟设备等。

 

大内核和微内核:

  1. 大内核:

大内核是将操作系统功能作为一个紧密结合的整体放到内核。由于各模块共享信息,因此有很高的性能。

  1. 微内核:

由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。

在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。

因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。

 

中断分类:

 

  • 外中断:由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。

  • 异常:由CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。

  • 陷入:在用户程序中使用系统调用。

 

进程与线程:

 

定义:进程是资源分配的基本单位。线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。

区别:

拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。

调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。

进程调度算法:

  • 先来先服FCFSfirst come first served

算法原理:当其他人也想入内存被行,就要排等着,如果在程中出一些事,他在不想排了,下一个排的就上。此如果他又想排了,只能站到尾去。 
算法:易于理解且实现简单,只需要一个(FIFO),且相当公平 
算法缺点:比有利于长进程,而不利于短程,有利于CPU 繁忙的程,而不利于I/O 繁忙的

  • 最短作业优先(SJF, Shortest Job First

算法原理对预计执时间短的先分派理机。通常后来的短程不先正在行的程。 
算法:相比FCFS 算法,算法可改善平均周转时间和平均带权转时间程的等待时间,提高系的吞吐量。 
算法缺点对长进程非常不利,可能长时间得不到行,且未能依据程的迫程度来划分行的,以及以准确估计进程的时间,从而影响度性能。

  • 最高响先法(HRRNHighest Response Ratio Next)

算法原理HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行R如下:R =(W+T)/T = 1+W/T 
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入行。 
算法:由于也有机会投入运行,在同一时间理的作然要少于SJF法,从而采用HRRN方式其吞吐量将小于采用SJF 的吞吐量。 
算法缺点:由于每次度前要算响比,系也要相增加。

  • 时间片轮转算法(RRRound-Robin

算法原理绪进程以FCFS 的方式按时间流使用CPU 度方式,即将系中所有的就绪进程按照FCFS ,排成一个列,每次CPU 分派给队程,行一个时间片,时间片的度从几个ms 到几百ms。在一个时间片结束时,发生时钟中断,调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程,进程可以未使用完一个时间片,就出让CPU(如阻塞)。 
算法时间轮转调度算法的特点是简单易行、平均响应时间短。 
算法缺点:不利于急作。在时间轮转算法中,时间片的大小性能的影响很大,因此时间片的大小应选择恰当

时间片大小的确 
1.
统对应时间的要求 
2.
绪队列中程的数目 
3.
处理能

  • 馈队(Multilevel Feedback Queue) 

馈队度算法描述: 
  1程在入待度的列等待,首先最高的Q1等待。  
  2、首先高的列中的程。若高列中已没有度的程,则调度次级队列中的程。例如:Q1,Q2,Q3三个列,只有在Q1中没有程等待才去Q2,同理,只有Q1,Q2才会去Q3 
  3于同一个列中的各个程,按照时间轮转度。比如Q1队列的时间片为N,那么Q1中的作经历N时间片后若没有完成,则进Q2队列等待,若Q2时间片用完后作业还不能完成,一直入下一级队列,直至完成。  
  4、在低列中的程在运行,又有新到达的作,那么在运行完时间片后,CPU马上分配给新到达的作业(抢占式)。  
  在多馈队度算法中,如果定第一个列的时间片略大于多数人机交互所需之时间时,便能够较好的足各种型用的需要。

 

信号量:

信号量(Semaphore)是一个整型变量,可以对其执行 down up 操作,也就是常见的 P V 操作。

  • down : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0

  • up :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。

down up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。

如果信号量的取值只能为 0 或者 1,那么就成为了互斥量(Mutex),0 表示临界区已经加锁,1 表示临界区解锁。

 

死锁及处理方法:

 

的必要条件

  • 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。

  • 占有和等待:已经得到了某个资源的进程可以再请求新的资源。

  • 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。

  • 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。

预防死锁方法

  • 所有进程开始前,必须一次性地申请所需的所有资源,这样运行期间就不会再提出资源要求,破坏了请求条件,即使有一种资源不能满足需求,也不会给它分配正在空闲的资源,这样它就没有资源,就破坏了保持条件,从而预防死锁的发生。

  • 允许一个进程只获得初期的资源就开始运行,然后再把运行完的资源释放出来。然后再请求新的资源。

  • 当一个已经保持了某种不可抢占资源的进程,提出新资源请求不能被满足时,它必须释放已经保持的所有资源,以后需要时再重新申请。

  • 对系统中的所有资源类型进行线性排序,然后规定每个进程必须按序列号递增的顺序请求资源。假如进程请求到了一些序列号较高的资源,然后有请求一个序列较低的资源时,必须先释放相同和更高序号的资源后才能申请低序号的资源。多个同类资源必须一起请求。

虚拟内存:

 

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到一部分不在物理内存中的地址空间时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。
 

内存页面置换算法:

缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。在这个时候,被内存映射的文件实际上成了一个分页交换文件。

最佳置算法(OPT)

这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法所选择淘汰的页面为后面永远不会使用到的页面或者是最长时间内不会使用的页面。但由于我们无法预知接下来执行的过程中哪些页面不会被访问到,所以这个算法无法实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较

先出置算法(FIFO)

简单面置算法是先入先出(FIFO)法。种算法的实质是,选择在主存中停留时间(即最老)的一,即先入内存的,先退出内存。理由是:最早入内存的,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。FIFO的一个缺点是,它有一种异常象,即在增加存储块的情况下,反而使缺中断率增加了。当然,种异常象的面走向实际上是很少的。象又叫Belady异常。

最近最久未使用算法(LRU)

选择最近最长时间访问过面予以淘汰,算法认为过去一段时间内未访问过面,在最近的将来可能也不会被访问算法每个置一个访问字段,来记录页面自上次被访问以来所经历时间,淘汰时选择现面中最大的予以淘汰。 
实现LRU算法必有大量硬件支持,需要一定的件开。所以实际实现的都是一种简单有效的LRU近似算法。 
一种LRU近似算法是最近未使用算法(Not Recently UsedNUR)。它在存表的每一表中增加一个引用位,操作系定期地将它0。当某一访问时,由硬件将位置1一段时间后,通过检查这些位可以确定哪些使用,哪些自上次置0未使用。就可把位是0淘汰出去,因在之前最近一段时间里它未被访问过

最少使用算法(LFU)

该算法首先淘汰一段时间内使用次数最少的页面,注意和LRU的区LRU是淘汰最长时间没使用的在采用最少使用置算法应为在内存中的每个置一个移位寄存器,用来记录该页面被访问率。算法选择在之前期使用最少的面作淘汰

 

进程间的通信方式:

 

1. 管道pipe:管道是一种半双工的通信方式,数据只能向流,而且只能在具有亲缘关系的使用。程的亲缘关系通常是指父子程关系。
2.
命名管道FIFO:有名管道也是半双工的通信方式,但是它允亲缘关系的通信。
4.
消息MessageQueue:消息列是由消息的表,存放在内核中并由消息标识标识。消息列克服了信号传递信息少、管道只能承无格式字流以及冲区大小受限等缺点。
5.
共享存SharedMemory:共享内存就是映射一段能被其他程所访问的内存,段共享内存由一个建,但多个程都可以访问。共享内存是最快的IPC 方式,它是针对其他通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进的同步和通信。
6.
信号量Semaphore:信号量是一个数器,可以用来控制多个共享源的访问。它常作一种机制,防止某程正在访问共享,其他程也访问该资源。因此,主要作为进以及同一程内不同线程之的同步手段。
7.
套接字Socket:套解口也是一种通信机制,与其他通信机制不同的是,它可用于不同及其程通信。
8.
信号( sinal ) 信号是一种比的通信方式,用于通知接收程某个事件已经发生。

 

磁盘调度算法:

读写一个磁盘块的时间的影响因素有:

  • 旋转时间(主轴旋转磁盘,使得磁头移动到适当的扇区上)

  • 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上)

  • 实际的数据传输时间

其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。

1. 先来先服务FCFS, First Come First Served

按照磁盘请求的顺序进行调度。

优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

2. 最短寻道时间优先SSTF, Shortest Seek Time First

优先调度与当前磁头所在磁道距离最近的磁道。

虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两边的磁道请求更容易出现饥饿现象。



3. 电梯算法SCAN

电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。

电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。

因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。

 

 

 

 

 

 

 

 

 

 

posted @ 2018-08-07 14:09  冬日降临  阅读(414)  评论(0编辑  收藏  举报