文章目录
一、进程
1.前驱图
- 有向无循环图(有循环表明存在死锁)
- 直接前驱
- 直接后继
- 初始结点
- 终止结点
- 权重:程序量或执行时间
2.进程
1.概念
为充分利用系统资源,在主存中同时存放多道作业运行,各作业并行执行。
是资源拥有的基本单位。
2.特征
1)动态性
2)并发行
3)独立性
4)异步性
5)结构特性:由程序段、数据段和进程控制块三部分组成
3.使用Bernstein条件判断相邻进程是否可并发执行
R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}
3.进程状态转换
原语
- create
- suspend
- active
- wakeup
- block
4.进程控制块PCB
主要包括四个方面信息:
1)进程标识符
2)处理机状态
3)进程调度信息
4)进程控制信息
PCB组织方式
1)链接方式
2)索引方式
5.信号量集解决进程同步问题
- 生产者—消费者问题
- 读者—写者问题
- 图书馆阅览室问题
- 哲学家进餐问题
- 理发师问题
- 吃水果问题
- 司机—售票员问题
- 过河问题
6.线程
1.概念
作为分派和调度的基本单位,共享创建它的进程的资源。
操作系统的任务调度,实际上的调度对象是线程,而进程只是给线程提供了虚拟内存、全局变量等资源。
2.线程运行的三个状态
1)执行状态
2)就绪状态
3)阻塞状态
7.作业与作业调度
作业>程序>进程>线程
1.作业运行的三个阶段和三种状态
1)收容阶段,后备状态
2)运行阶段,运行状态
3)完成阶段,完成状态
2.调度算法
1)先来先服务FCFS
可用于作业调度,也可用于进程调度。
2)短作业优先SJF
作业越短,优先级越高。长短以作业要求的运行时间衡量。SJF算法可以分别用于作业调度和进程调度。
3)优先级调度算法PSA
基于作业的紧迫程度,由外部赋予作业相应的优先级。可以用于作业调度和进程调度。
4)高响应比优先调度算法HRRN
R =(作业等待时间+需运行时间)/ 需运行时间
5)轮转调度算法RR
主要用于进程调度。
在轮转法中,时间片长度的选取非常重要,时间片长度的选择会直接影响系统开销和响应时间。
6)多级反馈队列调度算法
目前公认的一种较好的进程调度算法。
1 设置多级就绪队列;
2 各级就绪队列具有不同大小的时间片;
3 一个新进程在系统队列;
4 按队列优先级高到低进行进程调度;
5 一进程进入较高优先级队列时可能要重新调度。
调度算法的性能:具有较好的性能,能照顾到各种用户的利益
3.产生死锁的必要条件
1)互斥请求
2)请求和保持条件
3)不可抢占条件
4)循环等待条件
4.避免死锁-银行家算法
设Requesti是进程Pi的请求向量,如果进程Pi需要K个Rj类资源,当Pi发出资源请求后,系统按下述步骤进行检查:
1.如果Requesti≤Needi,则转向步骤2;否则认为出错。(因为它所需要的资源数已超过它所宣布的最大值。
2.如果Requesti≤Available,则转向步骤3;否则,表示系统中尚无足够的资源,Pi必须等待
3.系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:
Available:=Available-Requesti;
Allocation:=Allocation+Requesti;
Needi:= Needi- Requesti;
4.系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
5.死锁的检测-资源分配图
死锁定理
S为死锁状态的充分条件是 当且仅当S状态的资源分配图不可完全化简。
二、存储器管理
1.程序装入
-
绝对装入
程序员直接赋予程序中所使用的相对地址,只适用于单道程序环境。
-
可重定位装入
多道程序环境下无法预知编译后在内存中的位置,故需要采用可重定位装入方式。通常在进程装入时一次完成地址变换,故称静态重定位。
-
动态运行时装入
把装入模块装入内存后,把装入模块中的逻辑地址转换为物理地址的过程推迟到程序真正要执行时进行。因此装入后的所有地址仍为逻辑地址。引入重定位寄存器的支持以地址转换不影响指令执行速度。
2.连续分配存储管理方式
1.固定分区分配
1)分区大小相等
2)分区大小不等
2.动态分区分配
为描述空闲分区和已分配分区的情况,设置有两种形式数据结构:空闲分区表和空闲分区链。
1)首次适应算法FF
或称最先适应算法,该算法要求空闲分区按照首地址递增的顺序排列。
优点:优先使用低地址部分空闲分区,保留了高地址部分的大量空闲分区,有利于大程序或作业的装入。
缺点:内存的低地址区留下了许多难以利用的很小空闲分区,即内存“碎片”;算法每次都从低地址部分开始查找,这增加了查找可用空闲分区的开销。
2)循环首次适应算法NF
空闲分区按照首地址递增的顺序排列。每次内存分配时,不再从表头(或链首)开始查找,而是从上次分配的空闲分区的下一个空闲分区开始顺序查找。
优点:内存的空闲分区分布较均匀,减少查找空闲分区的开销。
缺点:经多次分配后,内存缺少较大的空闲分区,以分配给较大的程序或作业。
3)最佳适应算法BF
或称最优适应算法,该算法要求将空闲分区按从小到大的顺序排列。
优点:较大的空闲分区被尽量的保留下来,有利于大程序或作业的分配。
缺点:容易产生内存碎片;每次分配后需要更新空闲分区表(链),增加了系统开销;分割后小的空闲分区处于分区表(链)首,增加了查找空闲分区的时间。
4)最坏适应算法WF
又称最差适应算法,该算法空闲分区按从大到小的顺序排列的。
优点:不会产生过多的碎片,有利于中、小程序或作业,且查找效率高。
缺点:影响大程序或作业的分配。此外,每次分配后需要更新空闲分区表(链),增加了系统开销。
5)算法比较
从搜索速度上看,FF具有最佳性能。
•首次适应算法具有最佳性能;空间利用方面,首次适应算法比最佳适应算法好,最坏适应算法最差。
•最佳适应算法找到的空闲分区是最佳的,但内存利用率不一定最优;
•首次适应算法尽可能利用低地址空间,保证了高地址有较大空闲分区,以分配给较大的程序或作业;
•最坏适应算法总是分割大的空闲分区,这有利于中、小程序或作业,但不利于较大的程序或作业。在实际系统中,首次适应算法使用较广泛。
3.分页存储管理
一维查找,每次查找要访问2次内存。
1.页号、页内偏移地址和逻辑地址关系
逻辑地址=页号×页长+页内偏移地址
页面与物理块映射关系如图。
2.分页存储地址转换
某个逻辑地址,其对应的页号和页内(偏移)地址分别为该逻辑地址与页面大小的商和余数,然后根据页号查找该用户程序的页表,获取相应的物理块号,并计算最终的物理地址,即:
物理地址=块号×块的大小+块内地址
由于页表保存了页号与物理块号之间的映射关系,所以,地址转换任务需借助页表来完成。分页存储管理的地址转换如图。
3.改进-快表
分页存储执行一次访内操作至少要访问主存两次。这样就把程序的执行速度降低一倍。为了提高存取速度,通常设置一个专用的高速缓冲寄存器组,用来存放页表的一部分。我们把存放在高速缓冲寄存器中的页表叫快表,这个高速缓冲寄存器又叫联想存贮器。
设置快表主要是基于局部性原理,即程序在运行的过程中,一段时间内总是经常访问某些页面。地址转换如图。
一维查找,每次查找要访问1到2次内存。
4.分段存储管理
页面的划分是由机器硬件实现的,没有考虑用户程序的逻辑结构,且不利于共享和保护。用户程序或作业通常由若干段组成,每段都有完整的逻辑意义,且具有不同的长度。为此,提出了分段的离散存储分配方式。
二维查找,查找一个地址要判断2次越界。
1.逻辑地址结构
用户程序作业按照程序的逻辑关系,被划分为若干个具有完整逻辑意义的段,对每个段从“0”开始编号,称为段号。每段的内部从“0”开始依次编址,称为段内(偏移)地址。
分段存储管理中,用户程序或作业的地址空间由两部分组成:段号和段内(偏移)地址,其地址结构如图所示。
如果系统中地址空间长度为32位,其中015位为段内偏移地址,1631位为段号,那么用户程序的逻辑地址空间最多可以包括216个段,段号编码从0~216-1,且每段的大小(即容量)为216=64KB。
2.段表
段表:程序中的逻辑段与内存的物理段之间的对应关系。每个段在段表中占有一个表项,。记录该段在内存中的起始地址、段的长度和段号。
分段存储的逻辑段物理段映射如图。
3.分段存储管理的地址转换
5.段页式存储管理
段页式存储管理中,程序或作业的逻辑地址由段号和段内地址组成。机器硬件将段内地址进一步划分为页号和页内地址,其中即高位表示为页号,低位表示为页内地址。如图2.8.
查找一个地址访问3次内存,判断2次越界,是二维查找。
1.段表和页表示意
2.段页式存储管理的地址转换
6.虚拟存储器
1.局部性原理
**时间的局部性。**如果程序中的某条指令或数据被访问后,那么它可能很快会再次被访问。产生时间局部性的典型原因是程序中存在循环操作;
**空间的局部性。**如果某个存储单元被访问,那么其附近的存储单元很快也会被访问。其典型情况是程序的顺序执行。
2.定义
指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
3.特征
1)多次性
2)对换性
3)虚拟性
4)离散性
7.虚拟存储器实现方式
1.分页请求系统
在分页系统基础上增加了请求调页功能和页面置换功能形成的页式虚拟存储系统。置换以页面为单位,一般采用局部淘汰。
2.请求分段系统
在分段系统基础上增加了请求调段以及分段置换功能后形成的段式虚拟存储系统。
8.页面置换算法
1.先进先出页面置换算法FIFO
淘汰最先进入内存的页面,不符合进程实际运行规律,性能最差。
2.最佳置换算法OPT
从内存中淘汰以后再也不需要访问的页面、或者淘汰在最长时间内不再被访问的页面。理论算法,常用于衡量其他算法优劣。
3.最近最久未使用置换算法LRU
最近最久未使用置换算法是一种比较好的置换算法,某些情况下性能接近最佳置换算法,但是它的实现需要较多的硬件支持,导致成本较高。现实情况中,通常使用寄存器或栈来实现最近最久未使用算法
4.时钟置换算法CLOCK
时钟置换算法是从最近一段时期内未被访问的页面中任意选择一个页面予以淘汰,故而也称最近未使用算法(NRU)。
三、输入输出系统
1. I/O系统中模块间层次
I/O系统中各种I/O模块之间的层次视图。
1.I/O系统的上下接口
(1)I/O系统接口。是I/O系统与上层系统间接口,向上层提供对设备进行操作的抽象I/O命令。
(2)软件/硬件(RW/HW)接口。上面是中断处理程序和设备管理器,下面是各种设备控制器。
2.I/O系统的分层
(1)中断处理程序。处于I/O系统底层,直接与硬件交互。I/O设备发来中断请求信号时,中断硬件作初步处理后转向中断处理程序。
(2)设备驱动程序。处于I/O系统次底层,是进程和设备控制器之间的通信程序。
(3)设备独立性软件。也称与设备无关的软件,这类I/O软件独立于具体使用的物理设备。
2.I/O通道
根据信息交换方式分为三类。
1)字节多路通道
适用于低速设备。多个设备以时间片轮转方式共享子通道。
2)数组选择通道
适用于中速设备。可连接多台设备但是只有一个分配型子通道。当设备、设备控制器、分配型子通道都空闲时才可分配。
3)数组多路通道
适用于高速设备。结合前两者特点,以时间片轮转形式分配,使各子通道分时并行操作。
3.中断
1. 分类
1)中断(外中断,指狭义的“中断”)
CPU对I/O设备发来的中断信号的一种响应。
2)陷入(内中断trap)
由CPU内部事件引起的中断。如运算溢出、程序错误、电源故障等。
3)软中断
由程序产生的中断(前两类中断也统称为硬中断)。
对操作系统而言,主机是指 CPU+内存
2.中断向量表和中断优先级
1)中断向量表
每个表项放置设备中断请求的中断号和中断处理程序入口地址
2)中断优先级
对多中断信号源规定不同优先级
3.对多中断源的处理方式
1) 屏蔽(禁止)中断
当处理机正在处理一个中断,暂时对任何新的中断不予理睬,完成本次中断处理后再检查是否有中断的发生
2)嵌套中断
(1)同时多个不同优先级中断请求,CPU优先响应最高优先级的中断请求
(2)高优先级中断请求抢占正在运行的低优先级中断的处理机。
4.I/O系统中信息传输的控制方式
1)程序直接控制方式(轮询可编程I/O方式)
是唯一串行方式。工作简单,效率低下。
2)中断方式
CPU和I/O可并行工作,提高资源利用率和系统吞吐量。但是数据传输是以字节形式进行。
3)DMA方式
使得设备在 CPU 不参与的情况下,能够自行完成把设备 I/O 数据放入到内存。那要实现 DMA 功能要有 「DMA 控制器」硬件的支持。
DMA 的工作方式如下:
- CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存的某个地方就可以了;
- 接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存;
- 当磁盘控制器把数据传输到内存的操作完成后,磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器;
- DMA 控制器收到信号后,DMA 控制器发中断通知 CPU 指令完成,CPU 就可以直接用内存里面现成的数据了;
可以看到, CPU 当要读取磁盘数据的时候,只需给 DMA 控制器发送指令,然后返回去做其他事情,当磁盘数据拷贝到内存后,DMA 控制机器通过中断的方式,告诉 CPU 数据已经准备好了,可以从内存读数据了。仅仅在传送开始和结束时需要 CPU 干预。
4)通道方式(I/O处理机)
虽然DMA方式比起中断方式来已经显著地减少了CPU的干预,即已由以字(节)为单位的干预减少到以数据块为单位的干预,但CPU每发出一条I/O指令,也只能去读(或写)一个连续的数据块。而当我们需要一次去读多个数据块且将它们分别传送到不同的内存区域,或者相反时,则须由CPU分别发出多条I/O指令及进行多次中断处理才能完成。
通道是通过执行通道程序并与设备控制器共同实现对I/O设备的控制的。通道程序是由一系列通道指令(或称为通道命令)所构成的。
5.设备分配
在进行数据分配时需要如下数据结构:
1)设备控制表DCT(Device Contro Table)
2)控制器控制表COCT
3)通道控制表CHTC
4)系统设备表SDT
6.SPOOLing系统
假脱机输入输出,将独占设备改造成共享设备的一种技术。
1.主要构成部分
1)输入井和输出井
在磁盘上开辟出的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容I/O设备输出的数据。
2)输入缓冲区和输出缓冲区
在内存中开辟两个缓冲区。用于缓和CPU和磁盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送的数据,之后再传送到输入井。输出缓冲区用于暂存从输出井传送的数据,之后再传送到输出设备。
3)输入进程和输出进程
输入进程也称为预输入进程,用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备传送到缓冲区,再存入输入井。CPU需要输入设备时,直接从输入井读入内存。
4)井管理程序
控制作业与磁盘井之间信息的交换。
2.假脱机打印机系统
利用假脱机技术可将它改造为一台可供多个用户共享的打印设备,从而提高设备的利用率,也方便了用户。共享打印机技术已被广泛地用于多用户系统和局域网络中。假脱机打印系统主要有以下三部分:
(1) 磁盘缓冲区。
(2) 打印缓冲区。
(3) 假脱机管理进程和假脱机打印进程。
3.SPOOLing系统特点
(1) 提高了I/O的速度。
(2) 将独占设备改造为共享设备。
(3) 实现了虚拟设备功能。
7.缓冲区引入
原因:
1)缓和CPU与I/O设备间速度不匹配的矛盾
2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制
3)提高CPU和I/O设备间的并行性
4)解决数据粒度不匹配问题
8.磁盘调度算法
1.先来先服务(FCFS)
根据进程请求访问磁盘的先后次序进行调度。仅适用于请求磁盘I/O的进程数目较少的场合使用。
2.最短寻道时间优先(SSTF)
要求访问的磁道与当前磁头所在的磁道距离最近,使每次的寻道时间最短。
3.扫描(SCAN)算法
优先考虑磁头当前的移动方向,下一个访问对象总是既在当前磁头移动方向,又距离最近,直到同向再无磁道需要访问时才将磁臂换方向后移动。又称电梯调度算法。