操作系统学习路线及相关面试题

这期就给大家聊聊操作系统在面试过程中遇到的常见问题。

可关注本人公众号:阿Q正砖

获取更多完整学习资料

这是我当时用的思维导图中的一部分,我只能说很好用也很有用,学习操作系统真的是要耗费很长的时间,比起计算机网络,操作系统系列的书籍也要难啃的多!作为科班,虽然说学校都会有这门课,但是在平常的学习中,自己还要下很大功夫的。

看过相关的优秀视频,一般情况下,操作系统这快的学习主要分为以下这些模块:

硬件结构
操作系统结构
内存管理
进程与线程
调度算法
文件系统
网络系统

这期就挑几个面试常考的内容讲解一下,需要更完整的资料可后台联系作者提取。

还是要尽可能多的自己了解了解计算的组成原理,作为计算机er,总不能以后花钱让修电脑的给自己装系统吧哈哈哈。

我主要是面向面试准备的一些内容,具体的一些细节可参考相关书籍,可对自己的知识储备有很大提升,面试被问到也能侃侃而谈,就相当不错了。

先来说说计算机的组成,相信所有学计算机的同学第一节课就是要知道计算的组成。

一、计算机主要分为五个部分:控制器、运算器、存储器、输入设备、输出设备。

  1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
  3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  4. 输入(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
  5. 输出(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把计算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。
    二、内存管理
    1、内存分配
    1.1、连续内存分配
    内存碎片问题
    外部碎片:在分配单元间的未使用内存。
    内部碎片:在分配单元内的未使用内存。
    内存碎片整理分为压缩式和交换式。
    首次适配:为了分配n字节,从0地址开始往下找,使用第一个找到的能够满足需求的空闲块。要求按照地址排序的空闲块列表,分配需要寻找一个合适的分区,重分配需要检查,看自由分区是否能合并于相邻的空闲分区。
    最优适配:寻找整个空闲块链表当中,寻找最适合满足分配请求的空闲块(大小最优适配)。
    优点:避免了分割大空闲块,最小化外部碎片产生的尺寸。
    缺点:易容易产生很多没用的微小碎片,重分配慢。
    最差适配:寻找空闲的内存块,请求分配的空间大小差距最大的空闲块。
    优点:避免有太多微小的碎片,假如分配是中等尺寸效果最好。
    缺点:易于破碎大的空闲块以致大分区无法被分配,重分配慢。
    1.2、非连续内存分配
    1.2.1、分段
    程序分成有语义的片段
    不同段分散到多个物理地址空间
    分段寻址方案
    段号+段内偏移寻址
    硬件实现方案
    段表存放了逻辑地址段号与物理地址的起始地址的对应关系以及段的限制,首先根据逻辑地址段号 查找段表,得到物理地址的起始位置以及段地址寻址的范围限制,根据段内偏移量 判断是否超过段地址寻址范围,如果没有超过,那么将段内偏移量+上一步得到的物理地址的起始位置得到准确的物理地址。
    1.2.2、分页
    页寻址机制
    虚拟地址是页号+页内偏移组成的,通过页号查找页表,得到帧号,通过物理地址的公式,结合帧号和页内偏移 就可以得到物理地址。
    分页机制的性能问题
    访问一个内存单元需要2次内存访问,1次用于访问获取页表项,一次用于访问数据。
    如何处理?
    缓存:Translation Look-aside Buffer(TLB)用于缓存近期访问的页帧转换表项,TLB使用associative memory(关联内存)实现,具备快速访问性能。
    如果TLB命中,物理页号可以很快被获取。如果TLB没有命中,则会去查页表,然后将对应的表象缓存到TLB中。
    间接访问:
    二级页表:将原来对一个大页表的寻址,转换成了2次对小页表的寻址,加快了寻址的速度。
    多级页表:

2、内存不够可采用的技术
2.1、覆盖技术
没有调用关系的方法区可以共同覆盖一个分区,例如B和C不可能同时执行,所以B和C可以共用一个分区。
图片
缺点:由程序员来把一个大的程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,费时费力,增加了编程的复杂度。覆盖模块从外存装入内存,实际是以时间延长来换取空间节省。
2.2、交换技术
将暂时不能运行的程序送到外存,从而获得空闲内存空间。操作系统把一个进程的整个地址空间的内容保存到外存(还出swap out),而将外存中的某个进程的地址空间读入到内存中(swap in)。换入换出内容的大小为整个程序的地址空间。
技术实现中的问题
交换时机的确定:何时需要发生交换?只当内存空间不够或有不够的危险时换出。
交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像进行直接存取。
程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗?最好采用动态地址映射的方法。
缺点:以进程作为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销。
2.3、虚存技术
2.3.1、基本概念
在装入程序时,不必将其全部装入到内存,而只需将当前需要执行的部分页面或段装入到内存,就可让程序开始执行。
在程序执行的过程中,如果需要执行的指令或访问的数据尚未在内存(称为缺页或者缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序。
另一方面,操作系统将内存中暂时不使用的页面或段调出保存在外存上,从而腾出更多空闲空间存放将要装入的程序以及将要调入的页面或段。
2.3.2、目标
像覆盖技术一样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。同时,又不需要程序的干涉,由操作系统自动来完成。
像交换技术那样,能够实现进程在内存与外存之间的交换,因为获得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间进行交换
2.3.3、基本特征
大的用户空间:通过把物理内存与外存相结合,提供给用户的虚拟内存空间通常大于实际的物理内存,即实现了这两者的分离。如32位的虚拟地址理论上可以访问4GB,而可能计算机上仅又256M的物理内存,但硬盘容量大于4GB。
部分交换:与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的。
不连续性:物理内存分配的不连续,虚拟地址空间使用的不连续。
2.3.4、实现原理
2.3.4.1、虚拟页式内存管理
基本思路:在页式存储管理的基础上,增加请求调页和页面置换功能。当一个用户程序要调入内存运行时,不是将该程序的所有页面都装入内存,而是只装入部分的页面,就可以启动程序运行。在运行的过程中,如果发现要运行的程序火药访问数据不在内存,则向系统发出缺页中断请求,系统在处理这个中断时,将外存中相应的页面调入内存,使得该程序能够继续运行。
页表表项
驻留位:表示该页是在内存还是在外存。如果为1,表示该页在内存中,如果为0表示还在外存中,此时缺页中断。
保护位:表示允许对该页做何种类型的访问,例如只读、可读写、可执行等。
修改位:表明此页在内存中是否被修改过。当系统回收该物理页面时,根据此位来决定是否把它的内容写回外存。
访问位:如果该页面被访问过,设置为1,如果没有则设置为0。
缺页中断处理过程
1.如果在内存中有空闲的物理页面,则分配一物理页帧f,然后转第4步,否则转2步。
2.采用某种页面置换算法,选择一个将被替换的物理页帧,它所对应的逻辑页为q。如果该页在内存期间被修改过,则需把它写回外存。
3.对q所对应的页表项进行修改,把驻留位置为0。
4.将需要访问的页p装入到物理页面f当中。
5.修改p所对应的页表项的内容,把驻留位置为1,把物理页帧号置为f。
6.重新运行被中断的指令。
2.3.4.2、页面置换算法
功能:当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中哪个物理页面被置换。
目标:尽可能的减少页面的换进换出次数。
页面锁定:用于描述必须常驻内存的操作系统的关键部分或时间关键的应用进程。实现方法是:在页表中添加锁定标志位(lock bit)。
分类:
局部页面置换算法
1、最优页面置换算法
基本思路:当一个缺页中断发生时,对于保存在内存当中的每一个逻辑页面,计算在它的下一次访问之前,还需要等待多长时间,从中选择等待时间最长的那个,作为被置换的页面。
这只是一种理想情况,在实际系统中无法实现预知未来。可用作其他算法的性能评价的依据。
2、先进先出算法(FIFO)
基本思路:选择在内存中驻留时间最长的页面并淘汰之。
性能较差,调出的页面有可能是要经常要访问的页面,并且有Belady现象。
3、最近最久未使用算法(LRU)
基本思路:选择最久未使用的那个页面,并淘汰之。
实现开销大。
4、时钟页面置换算法
基本思路:需要用到页表项当中的访问位,当一个页面被装入内存时,把该位初始化位0.然后如果这个页面被访问,则把该位置为1。
把各个页面组织称环形链表,把指针指向最老的页面。
当发生一个缺页中断的时候,考察指针锁指向的最老页面,若它的访问位位0,立即淘汰;若访问位位1,则把该位设置为0,然后指针往后移动一格。如此下去,直到直到被淘汰的页面,然后把指针移动到它的下一格。
全局页面置换算法
1、工作集窗口页面置换算法
并不会等到缺页才开始丢页,而是当某页不属于工作集窗口的范围,那么就会丢弃。
图片
2、缺页率页面置换算法
可变分配策略:常驻集大小可变。例如:每个进程在刚开始运行的时候,先根据程序大小给它分配一定数目的物理页面,然后在进程运行过程中,再动态地调整常驻集的大小。
可采用全局页面置换的方式,当发生一个缺页中断时,被置换的页面可以是在其它进程当中,各个并发进程竞争地使用物理页面。
优缺点:性能较好,但增加了系统开销。
具体实现:使用缺页率算法来动态调整常驻集大小。
缺页率 = 缺页次数 / 内存访问次数
若运行的程序的缺页率过高,则通过增加工作集来分配更多的物理页面;若缺页率过低,则通过减少工作集来减少它的物理页面数。力图使运行的每个程序的缺页率保持在一个合理的范围。

三、进程与线程
1、进程管理
1.1、进程的定义
我们编写的代码知识一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它就会被装载到内存中,接着CPU就会执行程序中的每一条指令,这个运行中的程序,就叫做进程。简单来说,就是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
1.2、进程的组成
程序段:存放要执行的代码。
数据段:存放程序运行过程中处理的各种数据。
PCB:进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息。
1.3、进程的特点
动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行。
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
1.4、进程控制结构
进程控制块(PCB):操作系统管理控制进程运行所用的信息集合。操作系统用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标志。
包含信息
1、进程标识信息:如本进程的标识,本进程的产生者标识(父进程标识);用户标识。
2、处理状态信息保护区。保存进程的运行现场信息。
a.用户可见寄存器,用户程序可以使用的数据,地址等寄存器。
b.控制和状态寄存器,如程序计数器,程序状态字。
c.栈指针,过程调用/系统调用/中断处理和返回时需要用到它。
3、进程控制信息
a.调度和状态信息,用于操作系统调度进程并占用处理机使用。
b.进程间通信信息,为支持进程间的与通信相关的各种标识、信号、信件等,这些信息存在接收方的进程控制块中。
c.存储管理信息,包含有指向本进程映像存储空间的数据结构。
d.进程所用资源,说明由进程打开、使用的系统资源,如打开的文件等。
e.有关数据结构连接信息,进程可以连接到一个进程队列中,或连接到相关的其他进程的PCB。
PCB的组织方式
1、链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表。
2、索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表。
1.5、进程的状态
进程创建:系统初始化时、用户请求创建一个新进程、正在运行的进程执行了创建进程的系统调用。
进程运行:内核选择一个就绪进程执行。
进程等待(阻塞):请求并等待系统服务,无法马上完成;启动某种操作,无法马上完成;需要的数据没有到达。
进程唤醒:被阻塞进程需要的资源可被满足;被阻塞进程等待的事件到达;将该进程的PCB插入到就绪队列。
进程结束:正常退出、错误退出、致命错误、被其他进程所杀。
1.6、进程挂起
阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程。
就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先就绪进程时,系统会选择挂起低优先级就绪进程。
运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态。
阻塞挂起到就绪挂起:当有阻塞挂起进程因为相关事件出现时,系统会把阻塞挂起进程转换为就绪挂起进程。
就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换。
阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起进程转换为阻塞进程。
2、线程管理
2.1、线程定义
通俗来讲线程就是进程当中的一条执行流程。
2.2、线程的性质
线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
由于共享资源(包括数据和文件),所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
2.3、线程的实现
2.3.1、用户线程
在用户空间实现,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括进程的创建、终止、同步和调度等。
缺点:阻塞性的系统调用发生的时候,因为操作系统无法感知用户线程,所以会阻塞整个进程。由于时间片分配给进程,所以在多线程执行的时候,每个线程得到的时间片就更少了,执行会较慢。
2.3.2、内核线程
特点:
1、在内核中实现,由操作系统的内核来完成线程的创建、终止和管理。
2、在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息(PCB和TCB)。
3、线程的创建、终止和切换都是通过系统调用/内核函数的方式来进行,由内核来完成,因此系统开销较大。
4、在一个进程当中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程运行。
5、时间片分配给线程,多线程的进程获得更多CPU时间。
6、Windows NT和Windows 2000/XP支持内核线程。
缺点:线程的切换开销大,用户态和内核态之间的切换。
2.3.3、轻量级线程
它是内核支持的用户线程。一个进程可有一个或多个轻量级进程,每轻量级进程由一个单独的内核线程来支持。(Solaris/Linux)
2.4、优缺点:
优点:一个进程中可以同时存在多个线程;各个线程之间可以并发地执行;各个线程之间可以共享地址空间和文件等资源。
缺点:一个线程崩溃,有可能会导致其他所属进程的所有线程崩溃。
3、进程与线程之间的关系
从一定意义上讲,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。
在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
举例说明:
进程:西安地铁单位
线程:西安地铁1号线、2号线、5号线…10号线
西安地铁单位的所有地铁线路共享着西安坐地铁的所有客源(相当于进程中的资源,所以进程属于资源单位),而各线路负责将客源输送到指定地点(执行操作,所以线程属于执行单位)。
4、进程与线程之间的区别
4.1、调度
在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程编程轻装运行,这样可以显著地提高系统的并发性。同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用,但是在由一个进程中的线程切换到另一进程中的线程,依然会引起进程切换。
4.2、并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而更有效地提高系统资源和系统的吞吐量。例如,在一个为引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入线程的操作系统中,可以在一个文件服务进程设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。
4.3、拥有资源
不论是引入了线程的操作系统,还是传统的操作系统,进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程自己不能拥有资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源,亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一个进程的其他所有线程共享。
4.4、独立性
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为为了防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其它资源,除了共享全局变量外,不允许其它进程的访问。但是同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其它线程读、写,甚至完全清除。
4.5、系统开销
由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现也变得比较容易。在有的系统中,现成的切换、同步、和通信都无需操作系统内核的干预。
4.6、支持多处理机系统
在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代处理机OS都无一例外地引入了多线程。
5、进程间通讯方式
5.1、管道(pipe)
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
5.2、命名管道(named pipe)
允许无亲缘关系进程间的通信。
有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。
5.3、套接字(socket)
主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
5.4、信号量(semophore)
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
5.5、消息队列(message queue)
消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比 FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺。
5.6、共享内存(shared memory)
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

四、调度算法
1、先来先服务调度算法(FCFS)
FCFS 调度算法是一种最简单的调度算法,它既可用于作业调度,又可用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或儿个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
存在问题:若一个长作业先到达系统,就会使后面的许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。
2、短进程优先调度算法(SPF)
短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。短进程优先(SPF) 调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。(每次调度都选就绪队列中最短的)
存在问题:
该算法对长作业不利。更为严重的是,若有一长进程进入就绪队列,由于调度程序总是优先调度那些(即使是后来进来的)短作业,将导致长作业长期不被调度(饥饿)。
该算法完全未考虑作业的紧迫程度,因而不能保证紧追性作业会被及时处理。
由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。
3、优先级调度算法
3.1、概念
优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
3.2、有无剥夺
非剥夺式优先级调度算法:当一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。
剥夺式优先级调度算法:当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。
3.3、进程优先级分类
静态优先级:优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。
动态优先级:在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据有进程占有CPU 时间的长短、就绪进程等待CPU 时间的长短。
3.4、优先级设置的参考原则
系统进程>用户进程。系统进程作为系统的管理者,理应拥有更高的优先级。
交互型进程>非交互型进程(或前台进程>后台进程)。大家平时在使用手机时,在前台运行的正在和你交互的进程应该更快速地响应你,因此自然需要被优先处理,即要有更高的优先级。
I/0 型进程>计算(CPU)型进程。我们知道, I/0 设备(如打印机)的处理速度要比CPU 慢得多,因此若将I/0 型进程的优先级设置得更高,就更有可能让I/0 设备尽早开始工作,进而提升系统的整体效率。
4、时间片轮转调度算法
时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如l00ms 。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
存在问题:在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。若时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。若时间片很小,则处理机将在进程间过于频繁地切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此,时间片的大小应选择适当。
5、高响应比优先调度算法
高响应比优先调度算法是对FCFS调度算法和SPF调度算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。响应比的变化规律可描述为:响应比=(等待时间+要求服务时间)/要求服务时间
特点:
作业的等待时间相同时,要求服务时间越短,响应比越高,有利于短作业。
要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。因此,克服了饥饿状态,兼顾了长作业。
6、多级反馈队列调度算法
多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合与发展,如下图所示。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/0 设备利用率和缩短响应时间而照顾I/0 型进程;同时,也不必事先估计进程的执行时间。
实现思想:
设置多个就绪队列,并为各个队列赋予不同的优先级,第1 级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
赋予各个队列中进程执行时间片的大小各不相同。在优先级越高的队列中,每个进程的运行时间片越小。例如,第2级队列的时间片要比第1级队列的时间片长1倍。
一个新进程进入内存后,首先将它放入第1 级队列的末尾,按FCFS 原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;若它在一个时间片结束时尚未完成,调度程序便将该进程转入第2 级队列的末尾,再同样按FCFS 原则等待调度执行;若它在第2 级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……
仅当第1 级队列为空时,调度程序才调度第2 级队列中的进程运行;仅当第1~(i-1)级队列均为空时,才会调度第i 级队列中的进程运行。若处理机正在执行第i 级队列中的某进程,这时又有新进程进入优先级较高的队列[第1~(i-1)中的任何一个队列],则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回第i 级队列的末尾,把处理机分配给新到的更高优先级的进程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值