一、三种观点看操作系统
- 静态:操作系统是管理和控制计算机硬件与软件资源的计算机程序,所以从本质上来讲,操作系统本身也是一个由不同指令组成的计算机程序,而程序只是一组有序的指令集合,所以操作系统它是静态的。
- 动态:操作系统作为计算机管理程序,常驻内存,管理着运行在计算机上的所有进程,控制着进程的生成、执行与消亡,需要动态管控进程的资源请求,所以从进程管控的角度看,操作系统是动态的。
- 分层、扩充:从软件分层、扩充机器的观点来看,操作系统是扩充裸机的第一层系统9软件,硬件裸机加操作系统组成虚拟机。
二、几条主线
一、中断机制:
中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备的并行执行,也必须有中断的支持。中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础。
- 硬中断:硬中断是指由外部设备引起的中断,当I/O设备向CPU发送中断信号后,CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该I/O设备的中断处理程序。执行完后,再回到断点,继续执行原来的程序、I/O设备可以是字符设备,也可以是块设备、通信设备。
- 软中断:软中断是由CPU内部时间所引起的中断,例如进程在运算中发生了上溢或下溢,又如程序出错,如非法指令、地址越界以及电源故障等。如果系统发生了软中断,CPU也将暂停正在执行的程序,转去执行引起该软中断的处理程序。
- 两者区别:1、软中断是执行中断指令产生的,而硬中断是由外设引发的。2、硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。3、硬中断是可屏蔽的,而软中断不可屏蔽。
4、硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。
- 对多中断源的处理方式:对于多中断信号源的情况,当处理机正在处理一个中断时,又来了一个新的中断请求。这时应如何处理呢?对于这种情况,可有两种处理方式。屏蔽中断和嵌套中断。
- 1、 屏蔽中断:当处理机正在处理一个中断时,将屏蔽掉所有的中断,直到处理机完成本次中断的处理后,处理机再去检查是否有中断发生,若有,再去处理新的中断。优点是简单,缺点是不能应对实时性要求较高的中断请求。
- 嵌套中断:在设置了中断优先级的系统中,通常按这样的规则来进行优先级控制。(1)当同时有多个不同优先级的中断请求时,CPU有限相应最高优先级的中断请求。(2)高优先级的中断请求可以抢占正在运行的低优先级中断的处理机,该方式类似于基于优先级的抢占式进程调度。
- 中断处理程序的处理过程
- (1)测定是否有未响应的中断信号。
- (2)保护被中断进程的CPU环境。
- (3)转入相应的设备处理程序。
- (4)中断处理。
- (5)回复CPU的现场并退出中断。
二、并发控制:
- 并行性和并发性是既相似又有区别的两个概念。并行性是只两个或者多个事件在同一时刻发生。而并发性是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但是在单处理机系统中,每一时刻却仅有一道程序执行,故在微观上这些程序只能是分时地交替执行。倘若计算机系统中有多个处理机,这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行。
- 在一个未引入进程的系统中,在属于同一个应用程序的计算机程序和I/O程序之间只能是顺序执行,即只有在计算机程序执行告一段落后,才允许I/O程序运行,反之,在程序执行I/O操作时。计算机程序也不能执行,但在为计算机程序和I/O程序分别建立一个进程后,这两个进程便可并发执行,若对内存中的多个程序都分别建立一个进程,他们就可以并发执行,这样便能极大地提高系统资源的利用率,增加系统的吞吐量。
- 只有不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。
- 程序并发执行时的特征。
- (1)间断性;程序并发执行时,由于它们共享系统志愿,以及为完成统一项任务而相互合作,致使在这些并发执行的程序之间形成了相互制约的关系,相互制约将导致并发程序具有“执行–暂停–执行”这种间断性的活动规律。
- (2)失去封闭性;当系统中存在多个可以并发执行的程序时,系统中的各种资源将为他们所共享,而这些资源的状态也由这些程序来改变,致使其中任一程序在运行时,其环境都必然会受到其他程序的影响。显然,程序的运行已经失去封闭性。
- (3)不可再现性;程序在并发执行时,由于失去了封闭性,其计算结果也将于并发程序的执行速度有关,也将导致其又失去可再现性。
- 并发操作会带来一些问题:如丢失修改,不可重复读,读脏数据等。
- 我们可以通过多种机制实现并发控制:
- 硬件同步机制。
- 信号量机制。
- 利用互斥锁。
三、数据结构
- (1)链表
- 进程管理-PCB的链接
- 外村分配方式-链接分配
- (2)队列
- 进程通信-消息队列的实现
- 处理机调度-任务就绪队列的实现
- 存储器管理-Clock置换算法的实现(循环队列)
- (3)树
- 进程管理-进程家族关系描述:进程树
- (4)栈
- 存储器管理-LRU(Least Recently used)置换算法
- (5)散列表
- 内存管理-连续分配方式:Hash算法
- 文件管理-hash文件
- (6)PCB-进程控制块
- 操作系统中的进程由程序段,数据段组成,其主要信息存储在相应的进程控制块PCB中,PCB是一个进程的标志。
- PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位。
- (1)作为独立运行基本单位的标志
- (2)能实现间断性运行方式,系统可将CPU现场信息保存在被中断进程的PCB中。
- (3)提供进程管理所需要的信息。
- (4)提供进程调度所需要的信息。
- (5)实现与其他进程的同步与通信。
四、算法
- (1)先来先服务算法(FCFS)
该算法即可用于作业调度,也可用于进程调度,也可用于作业调度,当在作业调度中采用这种算法是,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为他们分配资源和创建进程,然后把他们放入就绪队列。
- (2)短作业有限的调度算法(SJF)
SJF算法是以作业的长短来计算优先级的,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业调度和进程调度。
- (3)轮转调度算法(RR)
在RR中,系统将所有的就绪进程按照FCFS策略排成一个就绪队列。系统可设置一定时间(如30ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给队首进程,并令其执行一个时间片,当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片,这样就可以保证就绪队列中的所有进程在确定的时间段内都能获得一个时间片的处理时间。
- (4)优先级调度算法
优先级进程调度算法,是把处理机分配给就绪队列中优先级最高的进程,一般有两种实现:
- 非抢占式优先级调度算法:一旦吧处理机分配给就绪队列中优先级最高的进程后,该进程便一直执行下去直至完成,或者因该进程发生某时间而放弃处理机。
- 抢占式优先级调度算法:把处理机分配给优先级最高的进程,使之执行,但在执行期间,只要出现了另一个优先级更高的进程,调度程序就将处理机分配给新到的优先级更高的进程。
- (5)多级反馈队列调度算法
- 设置多个就绪队列
- 每个队列都采用FCFS算法,第n队列中按RR方式运行
按队列优先级调度
- (6)实事调度算法分类
非抢占式调度算法:又分为,非抢占式轮转调度算法;非抢占式优先调度算法。
- 抢占式调度算法:又分为,基于时钟中断的抢占式优先级调度算法;立即抢占的优先级调度算法。
- (7)最早截止时间优先算法(EDF)
该算法是根据任务的截止时间确定任务的优先级的,任务的截止时间越早,其优先级越高,具有最早截止时间的任务排在队列的队首。调度程序在选择任务是,总是选择就绪队列找那个的第一个任务,为之分配处理机,最早截止时间优先算法既可以用于抢占式调度方式中,也可用于非抢占式调度方式中。
- (8)最低松弛度优先算法(LLF)
该算法在确定任务优先级时,根据的是任务的紧急(或松弛)程度。任务紧急程度越高,赋予该任务的优先级越高,使之优先执行。
- (9)银行家算法
- 设requesti是进程pi的请求向量,如果requesti[j]=k,表示进程pi需要k个Rj类型的资源,当pi发出资源请求后,系统按一下步骤进行检查。
- 1、如果requesti[j]<=Need[i,j],便转向步骤2,否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
- 2、如果requesti[j]<=Available[j],便转向步骤3,否则,表示尚无足够资源,pi需等待。
- 3、系统试探着把资源分配给进程pi,并修改下面数据结构中的数值。
Available[j]=Available[j]-Requesti[j]; Allocation[i,j]=Allocation[i,j]+Requesti[j];
Need[i,j]=Need[i,j]-Requesti[j];
- 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程pi等待。
- (10)基于顺序搜索的动态分区分配算法
- 1、首次适应算法(FF)
FF算法要求空闲分区链以地址递增的次序链接,在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已没有足够大的内存分配给该进程,内存分配失败,返回。
- 2、循环首次适应算法(NF)
- 3、最佳适应算法(BF)
所谓最佳,是指,每次为作业分配内存时,总是把能满足要求,优势最小的空闲分区分配给作业,避免“大材小用”。
- 4、最坏适应算法(WF)
- (11)基于索引搜索的动态分区分配算法
该算法使用与大、中型系统。
- 1、快速适应算法(quick fit)
- 2、伙伴系统
- 3、哈希算法
- (12)页面置换算法
- 最佳置换算法:这是一种理论上的算法,其所选择的被淘汰页面将是以后永不使用,或许是在最长时间内不再被访问的页面,采用最佳置换算法通常可以保证获得最低的缺页率。
- 先进先出置换算法(FIFO):总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
- 最近最久未使用置换算法(LRU):选择最近最久未使用的页面予以淘汰。
- 最少使用置换算法(LFU):在内存中的每一个页面设置一个移位寄存器,用来记录该页面被访问的频率,该置换算法选择在最近时期使用最少的页面作为淘汰页。
- 简单的clock置换算法(最近未用算法NRU):为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置为1.置换算法在选择一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出,若为1,则重新将它置为0,暂不换出。
- 改进型clock置换算法:该算法从和简单的clock置换算法相似,只是该算法除考虑页面的使用情况外,还需再增加一个因素–置换代价,对应的就是页面最近是否被修改过。
- (13)早期的磁盘调度算法
- 1、先来先服务(FCFS):该算法根据请求访问磁盘的先后顺序进行调度。算法的优点是公平、简单,且每个进程的请求都能一次地得到处理。但是此算法未对寻道进行优化,致使平均寻道时间较长。
- 2、最短寻道时间优先(SSTF):该算法选择这样的进程,其要求访问的磁道与当前刺头所在的磁道距离最近,以使每次的寻道时间最短,但这种算法不能保证平均寻道时间最短。
- (13)基于扫描的磁盘调度算法
- 1、扫描算法(SCAN)(电梯调度算法):SSTF的实质是基于优先级的调度算法。扫描算法不禁考虑欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头移动的方向。
- 2、循环扫描算法(CSCAN):该算法规定磁头单向移动,例如,只是自里向外移动。当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环。
- 3、NStepSCAN算法:在SSTF和SCAN以及CSCAN调度算法中,都可能出现磁臂停留在某处不动的情况。N步SCAN算法是将磁盘请求队列分成若干长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列,而每一个队列又是按SCAN算法。
- 4、FSCAN算法:该算法是N步SCAN算法的简化,,FSCAN算法只将磁盘请求队列分成两个队列。
三、典型的系统与问题分析
1、SPOOLing系统
如果说,通过多道程序技术可将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么通过假脱机技术,则可将一台物理I/O设备虚拟为多台逻辑I/O设备,这样也就允许多个用户共享一台物理I/O设备。
利用程序模拟脱机输入输出时外围控制机的功能,这样便可在主机的直接控制下,实现以前的脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作的技术成为SPOOLing技术,或称为假脱机技术。
SPOOLing系统建立在通道技术和多道程序技术的基础上,以高速随机外存(通常为磁盘)为后院存储器。
SPOOLing系统主要由四个部分组成:1、输入井和输出井,2、输入缓冲区和输出缓冲区,3、输入进程和输出进程。,4、井管理程序。
SPOOLing系统的特点:1、提高了I/O速度。2、将独占设备改造为共享设备。3、实现了虚拟设备功能。
2、段/页式虚拟存储系统
所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加一扩充的一种存储器系统。其逻辑容量由内存和外存的容量之和所决定,它的运行速度接近于内存速度,而每位的成本却又接近于外存。
虚拟存储器的特征:1、多次性;2、对换性;3、虚拟性;
虚拟存储器的实现,都毫无例外地建立在离散分配存储管理方式的基础上。可采用的方式有:1、分页请求系统;2、分段请求系统;
1、分页请求系统:分页请求系统是在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。需要的硬件支持有:(1)请求分页的页表机制;(2)缺页中断机构;(3)地址变换机构;
2、请求分段系统:请求分段系统是在分段系统的基础上,增加了请求调段及分段置换的功能后所形成的段式虚拟存储系统。需要的硬件支持有:(1)请求分段的段表机制;(2)缺页中断机构;(3)地址变换机构;
3、进程同步和互斥
进程同步:进程同步的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。
同步机制应遵循的规则:1、空闲让进。2、忙则等待。3、有限等待。4、让权等待。
进程同步机制:1、硬件同步机制。2、信号量机制。3、管程机制。
4、死锁诊断、避免
死锁的检测:可以利用资源分配图加以简化的方法,来检测当系统处于S状态时,是否为死锁状态。
死锁定理:S为死锁状态的充分条件:当且仅当S状态的资源分配图是不可完全简化的。
死锁的解除:两种方法(1)抢占资源,(2)终止进程
死锁的避免:避免死锁的策略是在资源动态分配过程中,方知系统进入不安全状态,以避免发生死锁。
安全状态:是指系统能按某种进程推进顺序(p1,p2…pn)为每个进程pi分配其所需资源,直至满足每个进程对资源的最大需求。此时称(p1,p2,…pn)是一个安全序列,如果找不到这样的一个安全序列,则称系统处于不安全状态。
5、进程通信、消息传递
进程通信是指进程之间的信息交换。
进程通信的类型:1、共享存储器系统。2、管道通信系统。3、消息传递系统。4、客户机-服务器系统。其中C/S模式有三种实现方法,分别是套接字、远程过程调用和远程方法调用。
消息传递通信的实现方式:1、直接消息传递系统。2、信箱通信。
6、磁盘调度系统
磁盘的类型:1、固定头磁盘。2、移动头磁盘。
磁盘访问时间:Ta=Ts+Tr+Tt;
磁盘调度算法:(1)先来先服务(FCFS);(2)最短寻道时间优先(SSTF);(3)扫描算法(SCAN);(4)循环CSCAN;(5)NstepSCAN算法;(6)FSCAN算法;
7、主要系统调用处理过程
程序接口,是OS专门为用户程序设置的,提供给程序员在编程时使用,也是用户程序取得OS服务的唯一途径,它是由一组系统调用组成的,因而,也可以说,系统调用提供了用户程序和操作系统内核之间的接口。OS内核运行在系统态,应用程序运行在用户态。
系统调用通过中断机制实现,并且一个操作系统的所有系统调用,都通过同一个中断入口来实现。
系统调用的类型:1、进程控制类系统调用。2、文件操纵类系统调用。3、进程通信类系统调用。
系统调用的处理步骤:(1)将处理机由用户态转为系统态。(2)分析系统调用类型,转入相应的系统调用处理子程序。3、在系统调用处理子程序执行完后,应恢复被中断的或设置新进程的CPU现场,然后返回被中断进程或新进程,继续往下执行。
8、中断现场保存与恢复过程
现场保存:首先需要保存的是,从中断现场恢复到当前进程运行所需要的信息。通常由硬件自动将处理机状态字(PSW)和保存在程序计数器(PC)中下一条指令的地址保存在中断保留区中,然后把被中断进程的CPU现场信息,即将包括所有CPU寄存器的内容压入中断栈中。
恢复CPU现场并退出中断:中断处理完是否返回到被中断的进程,取决于两个因素:①本中断是否采用了屏蔽中断方式,若是,就返回被中断的进程。②采用的是中断嵌套方式,若果没有优先级更高的中断请求I/O,在中断完成后,仍返回被中断的进程;反之系统将处理优先级更高的中断请求。
如果是返回被中断的过程,可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,包括程序下一次要执行的指令的地址N+1、处理机状态字PSW以及各通用寄存器和段寄存器的内容。
9、I/O
对I/O设备的控制方式
1、使用轮询的可编程I/O方式
2、使用中断的可编程I/O方式
3、直接存储器访问方式
4、I/O通道控制方式
10、基本文件系统
文件是指具有文件名的若干相关元素的集合,基于文件的概念可以把数据组成分为数据项、记录和文件三级。
文件的逻辑结构:是从用户观点出发所观察到的文件组织形式,即文件是由一系列的逻辑记录组成的,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,由称为文件组织。
文件的物理结构:又称为文件的存储结构,是指系统将文件存储在外存上所形成的存储组织形式,是用户不能看见的。文件的物理结构不仅与存储介质的存储性能有关,而且与所采用的的外存分配方式有关。