第一章操作系统引论
1.操作系统的目标和作用
1.操作系统的定义(考)
计算机系统中的一个系统软件,是一些程序模块的集合——管理和控制计算机系统的软硬件资源,合理的组织计算机的工作流程,以便有效利用这些资源为用户提供一个功能强大、使用方便和可扩展的工作环境, 从而在计算机和用户之间起到接口的作用。
定义概括:用于控制和管理系统资源,方便用户使用计算 机的程序的集合
目标
1)方便性 2) 有效性 3) 可扩充性 4) 开放性
作用(考)
1)OS作为用户与计算机硬件系统之间的接口
2)OS作为计算机系统资源的管理者
在计算机系统中,资源可分为四类:处理器、存储器、 I/O设备、信息(数据和程序)
OS的主要功能也是阵对这四类资源进行有效的管理
(1) 处理机管理: 用于分配和控制处理机
(2) 存储器管理: 主要负责内存的分配与回收
(3) I/O设备管理: 负责I/O设备的分配与操纵
(4) 文件管理: 负责文件的存取、共享和保护
3)OS实现了对计算机资源的抽象
2.操作系统的发展过程
1)无操作系统的计算机系统
缺点:
用户独占全机、人机速度矛盾导致资源利用效率极低
2)单道批处理系统
引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序(操作系统的 雏形)负责控制作业的输入、输出
脱机输入/输出技术
在采用脱机输入输出方式 时,程序和数据的输入输出都 是在外围计算机的控制下完成, 即它们是脱离主机进行的,故 称之为脱机输入输出操作。
优点:减少了cpu的空闲时间、提高I/O速度
单道批处理过程:
单道:在内存中仅有一道作业
批处理:是指计算机系统对一批作业自动进行处理的一种技术
运行原理:问题在于cpu需要等待设备的I/O完成
运行特征
① 单道性:内存中仅存放一个作业运行,即监督程序每次从磁带上 只调入一道程序进入内存运行;
② 顺序性:磁带上的各道作业是顺序地进入内存,各道作业的完成 顺序与他们进入内存的顺序,在正常情况下应完全相同,亦即先 调入内存的作业先完成;
③ 自动性:在顺利情况下,在磁带上的一批作业能自动地逐个地一 次运行,而无需人工干预
主要优缺点
主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升
主要缺点:1.内存中仅能有一道程序运行,只有该程序结束后才能调入下一道程序。
2.CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低
3)多道批处理系统
基本概念(考)
工作原理
多道、成批
运行特征
1. 多道:内存中同时存放几个作业;
2. 宏观上并行运行:都处于运行状态,但都未运行完;
3. 微观上串行运行:各作业交替使用CPU;
运行情况
优缺点(考)
优点: 1. 资源利用率高:CPU和内存利用率较高;
2. 作业吞吐量大:单位时间内完成的工作总量大。
缺点: 1. 用户交互性差:整个作业完成后或中间出错时,才与用 户交互,不利于调试和修改。
2. 作业平均周转时间长:短作业的周转时间显著增长。
批处理:适合 大型科学计算、 数据处理
作业周转时间是指从作业进入系统开始,直到其完成并退出 系统为止所经历的时间。
例题: 设在内存中有P1、P2两道程序,并按照P1、P2的次序运行,其 内部计算和I/O操作时间如下: P1:计算60ms,I/O 80ms ,计算20ms; P2:计算120ms,I/O 40ms,计算40ms。 (1) 画出并发执行这两道程序的时序图。 (2) 计算若并发完成这两道程序比单道运行节约的时间是多少?(调度程序的执 行时间不计) (3)CPU的利用率分别为多少?(保留小数点后两位)
推动操作系统发展的主要动力是什么?
答:1. 不断提高计算机资源利用率 ;2. 方便用户 ;3. 器件的不断更新换代 ; 4. 计算机体系结构的不断发展;5. 不断提出新的应用需求
4)分时操作系统
批处理系统的目标是提高计算机系统的工作效率,但批处理系统的用 户交互性差和作业平均周转时间长导致了分时系统的出现。
分时系统:是指,在一台主机上连接了多个配有显 示器和键盘的终端,同时允许多个用户通过自己的终 端,以交互方式使用计算机,共享主机中的资源。
分时系统的思想
分时操作系统的特征
5)实时操作系统
指系统能及时(或即时)响应外部事件的请求,在规定的时间内 完成对该事件的处理,并控制所有实时任务协调一致地运行。
实时操作系统特点:
及时性要求高,系统可靠性高。
实时操作系统类型
工业控制、信息查询、多媒体系统、嵌入式系统
实时任务的类型
实时系统和分时系统特征的比较
➢ 多路性 实时控制系统的多路性主要表现在系统周期性的对多路现场信息 进行采集,以及对多个对象或多个执行机构进行控制, 分时系统中的多路性则与用户情况有关,时多时少。
➢ 独立性 信息处理系统中的每个终端用户在向实时系统提出服务请求时, 是彼此独立的操作,互不干扰;而实时控制系统中对信息的采集和对 象的控制也都是彼此互不干扰。
➢ 及时性 信息处理系统对实时性的要求与分时系统类似,都是以人所能接 受的等待时间来确定;而实时控制系统的及时性,则是以控制对象所要 求的开始截止时间或完成截止时间来确定.
➢ 交互性 实时信息处理系统虽然也具有交互性,但这里人与系统的交互仅 限于访问系统中某些特定的专用服务程序。它不像分时系统那样能向 终端用户提供数据处理和资源共享等服务。
➢ 可靠性 分时系统虽然也要求系统可靠,但相比之下,实时系统则要求系 统具有高度的可靠性。因为任何差错都可能带来巨大的经济损失,甚 至是无法预料的灾难性后果,所以在实时系统中,往往都采取了多级 容错措施来保障系统的安全性及数据的安全性。
6)嵌入式系统
✓ 系统内核小
✓ 专用性强
✓ 系统精简
✓ 高实时性
✓ 多任务的操作系统
✓ 需要开发工具和环境
7)网络操作系统
8)分布式操作系统
3.操作系统的基本特性
1)并发性:
并行性是两个处理器在同一时刻做多个任务
并发性是一个处理器同一时间间隔做多个任务
2)共享性:
3)虚拟性:
4)异步性:
4.操作系统的主要功能
从资源管理观点看,操作系统具有四大功能:
➢1. 处理机管理:1.进程控制,2.进程同步,3.进程通信,4.调度
➢ 2. 存储器管理:1.内存分配,2.内存保护,3.地址映射,4.内存扩充
➢ 3. 设备管理:1.缓冲管理,2.设备分配,3.设备处理
➢ 4. 文件管理 1.文件存储空间的管理,2.目录管理,3.文件的读/写管理和保护
第二章 进程的描述与控制
1.前驱图和程序执行
1)前驱图
有向无循环图,用于描述进程之间执行的先后顺序。
图中的节点表示一个程序段或一个进程,乃至一条语句;节点间的 有向边表示结点间存在的偏序或前驱关系。(为了描述程序段或进程之间执行的先后次序关系)
2)程序顺序执行
定义
在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响。通常一个程序可分成若干个程序段,它们必须按照某种先后次序执行,仅当前一操作执行后,才能执行后继操作。
特征
1.顺序性
一个程序的各个部分的执行,严格地按照某种先后次序执行;
2.封闭性
程序再封闭的环境下运行,即程序运行时独占全部系统资源
3.可再现性
结果一致,只要程序执行时的环境和初始条件相同,当程序重复执行时, 不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都 将获得相同的结果。
3)程序并发执行
并发环境
在一段时间内机器上有两个或两个以上的程序同处于开始 运行但尚未结束的状态,并且次序不是事先确定的。
程序的并发执行
例:s1: a=x+2,s2: b=y+4,s3: c=a+b,s4: d=c+b
特征
1.间断性
程序并发执行时,由于它们共享资源或程序之间相互合作完成一项共同任务,因而使程序之间相互制约
2.失去封闭性
程序在并发执行时,是多个程序共享资源中各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性
3.不可再现性
由于程序的并发执行,打破了由另一个程序独占系统资源的封闭性,因而破坏了可再现性
例:
2.进程
1)定义
是进程实体的运行过程,是系统进行资源分配和调度的独立单位
为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之配置一个专门的数据结构, 称为进程控制块(Process Control Block, PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。一般情况下,我们把进程实体简称为进程。
结构特征:
为了控制和管理进程,系统为每个进程设立一个 进程控制块(PCB)
实体:
程序段、数据段和PCB
2)特征
动态性:
✓ 进程的实质是程序的一次执行过程;
✓ 动态性是进程的最基本的特征。
✓ 进程是动态产生,动态消亡的,进程在其生命周期内,在三种基本状态 (就绪,执行,阻塞)之间转换。
并发性:
✓ 内存中的任何进程都可以同其他进程一起同时运行;
✓ 并发性是进程的重要特征。
独立性:
✓ 进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。
✓ 凡未建立PCB的程序都不能作为一个独立的单位参与运行。
异步性:
✓ 由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立 的、不可预知的速度向前推进。
3)进程与程序的区别
4)进程的基本状态
三种基本状态
① 就绪状态 (Ready): 当进程已分配到除CPU以外的所有必要资源时,它便处于就绪状态,一旦获得CPU,便立即执行。
② 执行状态 (Running):已获得CPU的进程进入执行状态。执行状态遇到I/O请求且去完成,之后需要重新回到执行状态
③ 阻塞状态 (Block) :正在执行的进程,由于发生某个事件(I/O请求或申请缓存空 间等)而暂时无法执行时,便放弃处理机而进入阻塞状态;
注意:由于执行的进程变为阻塞状态后,调度程序立即把处理机分配给另一个就绪进程;因此,阻塞进程的事件消失后,进程不会立即恢复到执行 状态,而转变为就绪状态,重新等待处理机
五状态进程转换模型
创建一个进程一般要通过两个步骤:
① 创建状态 :系统已为其分配了PCB,但进程所需资源尚未分配,进程还未进入主存,即创建工作尚未完成,进程还不能被调度运行。
–1. 为一个新进程创建PCB,并填写必要的管理信息;
–2. 把该进程转入就绪状态并插入就绪队列之中。
② 终止状态 : 进入终止状态的进程不能再执行,但在操作系统中仍然保留着一个记录,其中保存状态码和一些计时统计数据,供其它进程收集。
- 1.OS进行善后处理。
- 2.将该进程的PCB清零并将PCB空间返还给系统。
一个进程何时进入终止状态?
(1) 当一个进程到达了自然结束点;
(2) 出现了无法克服的错误;
(3) 被操作系统所终结;
(4) 被其它有终止权的进程所终结。
七状态(挂起)进程转换模型
引入挂起状态的原因:
1. 终端用户的请求;2. 父进程的请求;3. 负荷调节的需要;4. 操作系统的需要;
引起挂起状态的目的:
1.提高处理机效率;2.为运行进程提供足够内存;3.调试
5)进程管理中的数据结构
系统为了管理进程设置的一个专门的数据结构,存放了用于描述该进程情况和控制进程运行所需的全部信息。
3.进程控制
内核
进程控制是对系统中所有进程从产生、存在到消亡 的全过程实行有效的管理和控制。进程控制一般是由操 作系统的内核来实现,内核在执行操作时,往往是通过 执行各种原语操作来实现的。
概念:
在现代操作系统设计中,往往把一些与硬件紧密相关的模块或运行效率较高的 模块以及为许多模块所公用的一些基本操作放在靠近硬件的第一层软件中,并使它 们常驻在内存,以提高操作系统的运行效率。把这部分称为操作系统的内核
功能:
支撑功能:中断处理、时钟管理、原语操作
资源管理功能:进程管理、存储管理、设备管理
原语
概念:是由若干条机器指令所构成,用以完成特定功能的一段程序。
特性:这段程序在执行期间不可分割。也就是说原语的执行不能被中断。 所以原语操作具有原子性--要么全都完成,要么全都不做。
分类:创建原语(Create),撤销原语(Termination),阻塞原语(Block) 唤醒原语(Wakeup) ,挂起原语(Suspend),激活原语(Active)
进程图
4.线程
引入
概念
✓ 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
✓ 线程自己基本不用系统资源,只拥有一点在运行中必不可少的资源。
✓ 线程可以与同属于一个进程的其它线程共享进程所有拥有的全部资源。
特点
➢ 线程是进程的一个实体,可作为系统独立调度和分派的基本单位。
➢ 不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程)。
➢ 一个进程中的多个线程可并发执行。 (进程可创建不同的线程去执行同一程序的不同部分)
➢ 系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)
状态
➢ 同样具有就绪、阻塞、执行、创建和终止五种基本状态。
➢ 一个进程中至少有一个线程。
优点
线程与进程的比较
进程同步(进程间的关系包括同步和互斥)
解决不可再现性的问题(解决出现结果不一致的现象)
进程同步是指协调这些完成某个共同任务的并发线程,在某些位置上指定线程的先后执行次序、传递信号或消息。
主要内容:
对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。
与进程调度的区别
➢ 进程调度是为了最大程度的利用 CPU 资源,选用合适的算法调度就绪队列中的进程。
➢ 进程同步是为了协调一些进程以完成某个任务,指定这些进程的先后执行次序使得某个任务能够顺利完成。(比如读和写,你肯定先写后读,不能先读后写,这就是进程同步做的事情)
进程互斥
例(进程同步):
p1:a=x+1,b=K+1
p2:k=y+1,j=a+1
若x,y已知,p1的a就已知,进行到p1的第二条语句b=k+1,k不知道,p2的第一条语句可以求出k,且y已知,所以进行p2的第一条语句,得到k,同时p1的第二条语句等待执行,回到p1的第二条语句,算出b,再进行p2的第二条语句,得到j,至此两个进程结束
由于以上的例子,是直接进程--进程,是多个进程的直接相互制约关系
而进程互斥是 进程-资源-进程,是多个进程的间接相互制约关系
系统中资源的共享程度
① 互斥:指多个进程不能同时使用同一个资源。是正确使用资源的基本要求。
② 死锁:指多个进程互不相让,都得不到足够的资源。
③ 饥饿: 指一些进程一直得不到资源或得到资源的概率很小
进程的制约关系
临界区的访问过程
进入区 (Entry section) :检查当前进程可否进入临界区的一段代码。如果当前进程可以进入临界区,通常设置相应 “正在访问临界区”标志,防止其他进程同时进入临界区。
临界区 (Critical section): 进程中访问临界资源的一段代码。
退出区 (Exit section) :用于将“正在访问临界区”的进程的标志清除。
剩余区 (Remainder section) :代码中的其余部分。
进程同步机制应遵循的准则
➢ 空闲让进: 当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进 入临界区的进程立刻进入自己的临界区,以有效地利用资源。
➢ 忙则等待: 当已有进程进入临界区时,表明临界资源正在被访问,因此其他试图进入临 界区的进程必须等待,以保证对临界资源的互斥访问。
➢ 有限等待: 等待进入临界区的进程不能无限期“死等”。
➢ 让权等待: 在进入区等待而不能进入临界区的进程应释放处理机,转换到阻塞状态,给 其它进程用。
信号量机制
➢ 前面的互斥软件算法都存在问题,它们是平等进程间的一种协商机制。
➢ 有时需要一个地位高于进程的管理者来解决公有资源的使用问题。
➢ 信号量就是OS提供的管理公有资源的有效手段。
!!!!!!!!!!!!
PV操作
最初由 Dijkstra 把整型信号量定义为一个用于表示资源数目的整型量S,它 与一般整型量不同,除初始化外,仅能通过两个标准的原子操作(Atomic Operation)wait(S)和signal(S)来访问。很长时间以来,这两个操作一直被分别 称为P、V操作。
P操作(相当于红灯,停)
将信号量值减 1,表示「申请占用一个资源」。
✓ 如果结果小于0,表示已经没有可用资源, 则执行 P 操作的进程被阻塞。
✓ 如果结果大于等于0,表示现有的资源足够你使用,则执行 P 操作的进程继续执行。
V操作(相当于绿灯,行)
将信号量值加 1,表示「释放一个资源」,即使用完资源后归还资源。
✓如果结果大于零,该进程继续
✓如果结果小于或等于零,该进程继续同时从q中唤醒一个进程
若加完后信号量的值小于等于 0,表示有某些进程正在等待该资源,由于我们已经释放出一个资源了,因此需要唤醒一个等待使用该资源(就绪态)的进程,使之运行下去。
信号量的物理含义
S.value>0,表示有value个资源可用。(表示临界区中有一个进程,互斥量的绝对值表示在临界区外等待进入的进程数)
S.value=0,表示无资源可用。(表示临界区已经有一个进程进入,临界区外尚无进程等待)
S.value<0,则|S.value|表s.list等待队列中的进程个数。
P(S): wait 操作,表示申请一个资源。
V(S): signal 操作,表示释放一个资源。
互斥信号量S.value的初值一般设置为 1。
同步信号量S.value的初值一般设置为 0。
当信号量小于等于0时,表示所有资源已经全部用完,而且还有进程正在等待使用该资源,等待的进程数就是信号量初值的绝对值。此结论仅限于进程互斥的场景。
利用信号量实现进程互斥
互斥:你访问的同时我不能访问;在每个进程进入临界区之前,都要先判断是否能进入(P操作),进程执行之后,不需要访问,其他进程可以来访问(V操作)
例:
利用信号量实现进程同步
同步机制实质:1)运行条件不满足时,能让进程暂停
2)运行条件满足时,能让进程立即继续
P-V操作应用于进程同步的基本思路
1)暂停当前进程:在关键操作(需要前提条件的操作)之前执行P操作
2)继续进程:在关键操作(会影响其他的操作)之后执行V操作
例:
使用信号量和 PV 操作实现进程的同步也非常方便,三步走:
✓ 定义一个同步信号量,一般设置为0,并初始化为当前可用资源的数量。
✓ 在优先级较 「高」的操作的 「后」面执行 V 操作,释放资源。
✓ 在优先级较 「低」的操作的 「前」面执行 P 操作,申请占用资源。
软件临界资源!!!
5.经典进程的同步问题
生产者-消费者问题
1.问题描述
2.情景再现
3.解决思路
由题可知,生产者、消费者共享一个初始为空、大小为 n 的缓冲池, 我们从题目中提炼出同步与互斥关系:
① 同步关系 1:只有缓冲区没满时(优先级高),生产者才能把产 品放入缓冲区(优先级低),否则必须等待。
② 同步关系 2:只有缓冲区不空时(优先级高),消费者才能从中 取出产品(优先级低),否则必须等待。
③ 互斥关系:缓冲区是临界资源,各进程必须互斥地访问。(生产者与消费者互斥)
具体思路
实现代码
读者-写者问题
问题描述
有读者和写者两组并发进程,共享一个文件,当两个或两 个以上的读进程同时访问共享数据时不会产生副作用,但若某 个写进程和其他进程 (读进程或写进程) 同时访问共享数据时 则可能导致数据不一致的错误。
因此要求: (1)允许多个读者可以同时对文件执行读操作;
(2)只允许一个写者对文件执行写操作;
(3)任一写者在完成写操作之前不允许其他读者或写者工作;
(4)写者执行写操作前,应让已有的读者和写者全部退出。
需要满足的条件
① 写进程与写进程之间必须互斥的写入数据(因为如果两个写进程同时对共享 数据中的区域A中的数据进行写操作的话,会导致数据错误覆盖的问题)
② 写进程与读进程之间必须互斥的访问共享数据(因为写进程与读进程如果同 时访问共享数据,可能会导致数据不一致的问题。比如:读进程A想要访问共享数 据中的B数据,但是写进程C在读进程A访问B数据之前将B数据进行了更新,这就会 导致读进程A读不到它想要读到的数据,从而出现数据不一致问题)
③ 读进程与读进程之间可以同时访问数据,不需要实现互斥的访问共享数据(因为读进程读数据,并不会像之前的生产者消费者问题中的消费者那样改变 数据或者是将数据清空,所以多个读进程可以同时访问共享数据)
解题思路
写者信号量 wmutex: 实现写者与读者进程间的互斥以及写者和 写者进程间的互斥。
读者计数变量 readcount:表示正在读的进程数目。
读者信号量 rmutex:为readcount临界资源设置的互斥信号量。
注:其中写者信号量的权力最大,如果写者获得,读者不能读;如果 读者获得,读者能读但不能写,写者肯定不能写。
readcount:由于只有一个读者进程在读时便不允许写者进程去写。
因此,仅当readcount=0,表示尚无读者进程在读时,读者进程才需要执行P(wmutex)操作。
若P(wmutex)操作 成功,说明没有写者进程在写,则读者进程便可去读, 相应地,做readcount+1操作。
同理,仅当读者进程在执行了readcount减1操作后 其值为0时,才须执行V(wmutex)操作,以便让写者进程 去写。
第三章 处理机调度与锁死
3.1处理机调度的层次和调度算法的目标
处理机调度:是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运 行,以实现进程并发地执行。
操作系统设计的中心问题之一
在多道程环境下,进程数目往往多于处理机数目,致使它们争用处理机。 这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程, 使之执行。分配处理机的任务是由进程调度程序完成的。
1.处理机调度的层次
处理机调度分类:① 高级调度(作业调度) ② 中级调度(内存调度) ③ 低级调度(进程调度)
✓ 处理机是计算机系统中的重要资源。
✓ 处理机调度算法对整个计算机系统的综合性能指标有重要影响。
✓ 从处理机调度的对象、时间、功能等不同角度,我们可把处理机调 度分成三种不同的层次类型。
作业与进程的区别
① 作业是用户向计算机提交任务的任务实体。在用户向计算机提交作业后,系统将它放入外存中的作业等待队列中等待执行。而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。 任一进程,只要它被创建,总有相应的部分存在于内存中。
② 一个作业可由多个进程组成,且必须至少由一个进程组成,反过来 则不成立。
③ 作业的概念主要用在批处理系统中,像UNIX这样的分时系统中就 没有作业的概念。而进程的概念则用在几乎所有的多道程序系统中。
高级调度
➢ 高级调度又称作业调度、长程调度和宏观调度,它的调度 对象是作业。
➢ 主要功能是根据某种算法,决定将外存上处于后备队列中 的哪几个作业调入内存,为它们创建进程、分配必要的资 源,并将它们放入就绪队列。
➢ 主要用于多道批处理系统中,而在分时和实时系统中不设 置高级调度。
➢ 时间尺度通常是分钟、小时或天。(时间尺度过大)
中级调度
➢ 中级调度又称内存调度、中程调度。(对象是进程,且只有进程能完成作业)
➢ 主要目的是提高内存利用率和系统吞吐量。
➢ 主要功能:中级调度实际上就是存储器管理中的对换功能。 把那些暂时不能运行的进程,调至外存等待,此时进程的 状态称为就绪驻外存状态(或挂起状态)。当它们已具备运 行条件且内存又稍有空闲时,由中级调度来决定,把外存 上的那些已具备运行条件的就绪进程再重新调入内存,并 修改其状态为就绪状态,挂在就绪队列上等待。
指令和数据必须在内存里才能被处理机(cpu)直接访问。
低级调度
➢ 低级调度又称进程调度、短程调度和微观调度,它的调度 对象是进程(或线程)。
➢ 主要功能:根据某种算法,决定就绪队列中的哪个进程应 获得处理机,并由分派程序将处理机分配给被选中的进程。
➢ 低级调度是最基本的一种调度,在多道批处理、分时和实 时三种类型的OS中,都必须配置这级调度。
➢ 时间上通常是毫秒级的。因为执行频繁,要求在实现时达 到高效率
三种调度对比
3.2处理机调度算法的目标
处理机调度的性能准则
➢ 我们可从不同的角度来判断处理机调度算法的性能。
➢ 如用户的角度、处理机的角度和算法实现的角度。
➢ 实际的处理机调度算法选择是一个综合的判断结果。
➢ 选择调度方式和算法的准则,有的是面向用户的,有 的是面向系统的。
面向用户的调度性能准则
① 周转时间短 ② 响应时间快 ③ 截止时间的保证 ④ 优先权准则
① 周转时间短
周转时间:作业从提交到完成(得到结果)所经历的时间 (等待+执行的时间)
包括:① 进程在提交队列中(创建状态)等待时间 ② 占用处理机的执行时间 ③ 在就绪队列的等待时间 ④ 在阻塞队列中的等待时间。
(系统服务时间是cpu计算时间)
② 响应时间快
响应时间:从用户通过键盘提交一个请求开始(如击键)到系统首次产生响应为止的时间(如屏幕显示)
包括:① 从键盘输入的请求信息传送到处理机的时间 ② 处理机对请求信息进行处理的时间 ③ 将所形成的响应信息回送到终端显示器的时间
作为选择分时系统进程调度算法的重要准则之一
③ 截止时间的保证
截至时间:指从某任务必须开始执行的最迟时间,或必须完成的最迟时间。 ① 周转时间短 ② 响应时间快
是评价实时系统性能的重要指标,选择实时调度算法的重要准则。
④ 优先权准则
在批处理、分时和实时系统中选择调度算法时,都可遵循优先权准 则以便让某些紧急的作业能得到及时处理。
面向系统的调度性能准则
① 系统吞吐量高 :吞吐量:单位时间内所完成的作业数。 事实上,如果单纯为了获得高的系统吞吐量,就应尽量多地选择短作业运行。
② 处理机利用率好:由于处理机非常昂贵致使处理机的利用率成为衡量系统性能的十分重要的指 标;而调度方式和算法对处理机的利用率起着十分重要的作用。
③ 各类资源的平衡利用:在大、中型系统中,不仅要使处理机的利用率高,而且还应能有效地利用其 它各类资源,如内存、外存和I/O设备等。
3.3调度算法
调度算法要将作业或进程归入各种就绪或阻塞队列。有 的算法适用于作业调度,有的算法适用于进程调度,有的两 者都适应。
1. 先来先服务 (First-Come Fist-Served, FCFS)
2. 最短作业(进程)优先 (Short Job First, SJF)
3. 高优先权优先 (Priority-Scheduling Algorithm, PSA)
4. 高响应比优先 (Highest Response Ratio Next, HRRN)
5. 时间片轮转算法 (Round Robin Algorithm, RRA) 6. 多级反馈队列算法 (Multilevel Feedback Queue Algorithm, MFQA)
1. FCFS--最简单的调度算法
先来先服务
基本思想:
作业调度中每次是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为他们分配资源、创建进程,然后放入就绪队列。
进程调度中按进程到达的先后顺序进行调度。把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便执行下去,直到该进程完成或阻塞时,才释放处理机。
• 优点:实现简单,比较有利于长作业。 • 缺点:不利于短作业,没考虑进程的优先级
例题1
有三个进程P1、P2和P3先后进入就绪队列,它们的 执行期分别是21、6和3个单位时间, 执行情况如下图:
对于P1、P2、P3的周转时间为21、27、30,平均周转时间为26。
带权周转时间W = Ti(周转时间) / Ts(系统总服务时间==执行期)
P1:w=21/21=1
P2:w=27/6=4.5
P3:w=30/3=10
2.SJF
基本思想:
短作业优先(SJF)的调度算法是从后备队列中选择一个或 者若干个估计运行时间最短的作业,将他们调入内存运行。
短进程优先(SPF)的调入算法是从就绪队列中选出一个估 计运行时间最短的进程,为之分配处理机,直到该进程完 成或阻塞时,才释放处理机。
经典例题
➢ 周转时间 = 完成时间 – 到达时间
➢ 带权周转时间 = 周转时间 / 服务时间
SJF的优缺点
• 优点: –比FCFS改善平均周转时间和平均带权周转时间,缩短 作业的等待时间。
–提高系统的吞吐量。
• 缺点: –对长作业非常不利,可能长时间得不到执行。
–未能依据作业的紧迫程度来划分执行的优先级。
– 难以准确估计作业(进程)的执行时间,从而影响调 度性能。
3.PSA
基本思想:
作业调度中该算法从后备队列中选择若干个优先权最高的作业装入内存。
进程调度中该算法是把处理机分配给就绪队列中具有最高优先权的进程,
这时又可以把该算法分为以下两类:
① 非抢占式:是指一旦把处理机分配给就绪队列中优先权最高的进程后 便让该进程一直执行,直到该进程完成或发生某事件而被阻塞时, 才把处理机分批给其它进程。
② 抢占式:是指根据某种原则,停止某个正在执行的进程,将已分配给 该进程的处理机,重新分配给另一个优先权更高的进程。
常用以下两种方法来确定进程的优先权: (优先级根据优先数来决定)
① 静态优先数法:静态优先权是在创建进程时确 定的,在整个运行期间不再改变。
② 动态优先数法:在进程创建时创立一个优先数, 但在其生命周期内优先数可以动态变化。
4.HRRN
高响应比优先调度算法
为每个作业引入一个动态优先级:
1.Tw等待时间与P优先权成正比;Ts要求服务时间与P优先权成反比
2.响应时间=等待时间+要求服务时间
3.对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够 长时,其优先级便可升到很高,从而也可获得处理机。
优缺点
◼ 优点: 是FCFS和SJF的折中。既照顾了短作业,又考虑了作业 到达的先后次序,而且不会使长作业长期得不到服务。
◼ 缺点: 每次进行调度之前,都须要先做响应比的计算,因此系 统开销很大
引进现实的例子
5.RRA
时间片轮转算法
基本思路
系统将所有就绪进程按FCFS规则排队,按一定的时间间隔(时间 片)把处理机分配给队列中的进程。
特点
① 如果时间片太长,退化为了FCFS(先来先服务)算法。进程在一个时间片内都执 行完,响应时间长,不能达到提高响应特性的目标。
② 如果时间片太短,用户的一次请求需要多个时间片(不停来排队)才能处理完, 上下文切换次数增加,响应时间长。
时间片长度的选择:要与完成一个基本的交互过程所需的时间相当, 从而保证一个基本的交互过程可在一个时间片内完成。
6.MFQA
多级反馈队列调度算法
多级反馈队列算法是时间片轮转算法和优先级算法的综合 和发展。通过动态调整进程优先级和时间片大小,此算法可兼 顾多方面的系统目标。
优点
➢ 在提高系统吞吐量和缩短平均 周转时间的同时照顾了短进程。
➢ 为获得较好的I/O设备利用率和 缩短响应时间而照顾I/O型进程。
➢ 不必估计进程的执行时间,动态调节。
具体思路
➢ 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列S1 的优先级最高。每个队列执行时间片的长度也不同,规定优先级越 低则时间片越长,如逐级加倍。
➢ 新进程进入内存后,先投入队列S1的末尾,按FCFS算法调度;若按 队列S1一个时间片未能执行完,则降低投入到队列S2的末尾,同样 按FCFS算法调度;如此下去,降低到最后的队列,则按 “时间片轮 转”算法调度直到完成。
➢ 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行 新进程,并把被抢先的进程投入原队列的末尾。
3.5死锁概述
1.引例
2.定义
死锁 (Deadlock) 是指多个进程(>=2、2个资源是进程互斥)在运行过 程中因争夺资源而造成的一种僵局,当进程处于 这种僵持状态时,若无外力作用,他们都将无法再向前推进。
注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃!
3.资源分类
✓ 在系统中有许多不同类型的资源。
✓ 其中可以引起死锁的主要是:需要采用互斥访问方法的、不可以被 抢占的资源,即在前面介绍的临界资源。
✓ 系统中这类资源有很多,如打印机,数据文件,队列和信号量等。
按资源使用期限分类
可重用性资源
可供用户重复使用多次的资源。
性质如下: ① 每一个可重用性资源中的单元只能分配给一个进程使用,不允许多个进程共享。
② 进程在使用可重用性资源时,按照:请求资源(进入区)→使用资源(临界区)→释放资源(退出区)”的顺序。
③ 系统中每一类可重用资源中的单元数目是固定的,运行期间不能被创建/删除。
例如: ① 硬件资源:处理机、I/O通道、外设、主存/辅存。 ② 软件资源:数据结构(如文件、数据库和信号量)。
一般来说,所有的硬件资源都属于可再次使用的永久资源,可以被进程反 复使用
可消耗性资源
可以动态生成和消耗的临时资源,撤销 后就不存在了。一般不限制数量。
性质如下: ① 每一类可消耗性资源中的单元数目在运行期间可以不断变化。
② 进程运行过程中,可以不断创造可消耗性资源的单元。
③ 进程运行过程中,可以请求若干个可消耗性资源单元。
例如:中断、信号、消息和I/O缓冲区中的信息。
可消耗性资源通常是由生产者进程创建,由消费者进程消耗
按是否可抢占分类
可抢占性资源
虽然资源占有者仍然需要使用,但另一 个进程可以强行剥夺。 如:内存(主存)、CPU。
这类资源是不会引起死锁。
不可抢占资源
除非占有者自动释放,否则其他进程不 能强行剥夺。如:磁带、打印机等。
4.产生死锁的原因
1.竞争系统资源引起死锁(资源少进程多)
当系统中供多个进程共享的资源如CPU、 主存、打印机等,其数目难以满足诸进程的 需要时,会引起诸进程对资源的竞争而产生 死锁。
死锁例子:若系统中只有2个资源R1和R2, 可供进程P1和P2共享。若形成环路,这样会 产生死锁。
环路
2. 竞争可消耗资源引起死锁
3. 进程的推进顺序不当引起死锁
进程在并发运行过程中,请求和释放资源的顺序不当,也会导致产生进程死锁。
➢ 在进程P1和P2并发执行时,按照下图曲线①②③所示顺序推进时,两进程 会顺利完成,我们称这种推进顺序是合法的。
➢ 若按曲线④的顺序推进时,进入不安全区D内,两进程再推进会产生死锁。
5.产生死锁的必要条件
1. 互斥条件: 进程要求对所分配的资源(如打印机)进行排他性控制,即在一 段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源, 则请求进程只能等待。
2. 请求和保持条件: 进程已经保持了至少一个资源,但又提出了新的资源请求,而该 资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资 源保持不放
3. 不可抢占条件: 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走, 即只能由获得该资源的进程自己来释放(只能是主动释放)。
4. 循环等待条件: 在发生死锁时,必然存在一个“进程一资源”的循环链(环路), 即进程集合{P0, P1, P2, … ,Pn}中的P0正在等待一个P1占用的资源, P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
以上这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然 成立,而只要上述条件之一不满足,就不会发生死锁。
6.处理死锁的基本方法
1. 预防死锁:这是一种较简单和直观的事先预防方法。该方法是通过设置某些 限制条件,去破坏产生死锁四个必要条件中的一个或几个来预防产生死锁。预防死 锁是一种较易实现的方法,已被广泛使用。
2. 避免死锁:同样是属于事先预防策略,但它并不是事先采取各种限制措施, 去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法防 止系统进入不安全状态,从而可以避免发生死锁。(算法解决)
3. 检测死锁:这种方法无须事先采取任何限制性措施,允许进程在运行过程 中发生死锁。但可通过检测机构及时地检测出死锁的发生,然后采取适当的措施, 把进程从死锁中解脱出来。
4. 解除死锁:当检测到系统中已发生死锁时,就采取相应措施,将进程从死锁 状态中解脱出来。常用的方法是撤消一些进程,回收它们的资源,将它们分配给已 处于阻塞状态的进程,使其能继续运行
上述的四种方法,从(1)到(4)对死锁的防范程度逐渐减弱,但对应的是 资源利用率的提高,以及进程因资源因素而阻塞的频度下降(即并发程度提高)。
不可抢占性资源是临界资源,但是临界资源(CPU)不是不可抢 占性资源。 √
3.6预防死锁
预防是采用某种策略,限制并发进程对资源的请求,使系统在任 何时刻都不满足死锁的必要条件。
预防死锁的方法
在系统设计时确定资源分配算法,保证不发生死锁。具体的做法是破坏产生死锁的四个必要条件之一。
① 破坏“请求和保持”条件。破坏请求和保持条件,将所需要的资源一次性都分配好。
② 破坏“不可抢占”条件。破坏不可剥夺条件,即当某进程新的资源未满足时,释放已占有的资源。
③ 破坏“循环等待”条件。破坏循环等待条件,系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反。
案例
① 破坏“请求和保持”条件
任何一个线程“贪心” ,都可能会导致死锁。大致就是说有了一把钥匙还 没还就要另一把。这里我们可以通过规定在任何情况下,一个线程获取一把钥 匙之后,必须归还了钥匙之后才能请求另一把钥匙,就可以有效解决这个问题。
② 破坏“不可抢占”条件
除非线程自己还钥匙,否则线程会一直占有钥匙,是形成不可剥夺条件的 原因。这里,我们可以通过设置一个”最长占用时间“的阈值来解决这个问 题——如果过了10分钟仍然没有进入下一个步骤,则归还已有的钥匙。这样的 话,两个线程都能取到所需的钥匙继续下去了。
③ 破坏“循环等待”条件
会出现死锁的两两组合,一定都是一个线程先取了红钥匙而另一个线程先取 了蓝钥匙,从而导致了可能形成了“环路等待” 。所以我们可以强制规定任何线程取钥匙的顺序只能是 “先取蓝钥匙再取红钥匙”的话,就能避免死锁了。
④ 为什么没有破坏“互斥”条件?
只有一副钥匙,这是形成死锁的最关键的原因。显然,如果我们能在两个 线程跑之前,能给每个线程单独拷贝一份钥匙的副本,就能有效的避免死锁了。
这种方法试用范围并不广。因为有时如果系统拷贝那副钥匙的成本 极高,而线程又很多的话,这种方法就不适用了。
两种策略
1. 预先静态分配法:
预先分配进程运行所需全部资源,进程在运行过程中不等待资源。
➢ 降低了对资源的利用率,降低进程的并发程度。
➢ 有可能无法预先知道所需资源。
2. 有序资源使用法:
把资源分类按顺序排列,保证资源的申请不形成环路。
➢ 限制进程对资源的请求顺序。
➢ 资源的排序占用系统开销。
3.7避免死锁
避免死锁
—— 预防死锁的几种策略,会严重地损害了系统性能。因此要施 加较弱的限制,从而获得较满意的系统性能来避免死锁。
避免死锁同样是属于事先预防的策略,但并不是事 先采取某种限制措施,破坏产生死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。这种方法所施加的限制条件较弱,可能 获得较好的系统性能,目前常用此方法来避免发生死锁。
安全状态
所谓安全状态,是指系统能按某种进程推进顺序 (P1, P2 … , Pn)为每个进程 Pi 分配其所需资源,直全 满足每个进程对资源的最大需求,使每个进程都可顺利 地完成。此时称(P1, P2 … , Pn)为安全序列。如果系统 无法找到这样一个安全序列,则称系统处于不安全状态。
➢ 虽然并非所有不安全状态都必然会转为死锁状态,但当系统进入 不安全状态后,就有可能进入死锁状态。
➢ 反之,只要系统处于安全状态,系统便不会进入死锁状态。
因此,避免死锁的实质在于:系统在进行资源分配时,应使系统不进入不安全状态。
银行家算法避免死锁
银行家算法
➢ 银行家算法中的数据结构
① Available (可利用资源向量): 它含有 m 个元素的数组,其中的每一 个元素代表一类可利用的资源数目,如果 Available[j] = K ,则表示系统 中现有 Rj 类资源 K 个。
② Max (最大需求矩阵):是一个 n×m 的矩阵,如果 Max(i,j) = K,则 表示进程 i 需要 Rj 类资源的最大数目为 K。
③ Allocation (分配矩阵):是一个 n×m 的矩阵,如果Allocation(i,j)=K, 则表示进程 i 当前已分得 Rj 类资源的数目为 K 。
④ Need (需求矩阵):是一个n×m的矩阵,如果Need(i,j)=K,则表示进 程 i 还需要 Rj 类资源 K 个,方能完成其任务。
上述三个矩阵间存在下述关系:Need[i, j] = Max[i, j] - Allocation[i, j]
安全性检查
① 设置两个向量:
Work (工作向量):表示系统可提供给进程继续运行所需的各类资源的数目, 在执行安全算法开始时,Work = Available;
Finish: 表示系统是否有足够的资源分配给进程,使之运行完成。 在执行安全算法开始时, Finish [i] = FALSE ;
② 从进程集合中找到一个满足下述条件的进程
a. Finish [i] = FALSE
b. Need [i, j] <= Work [j]
如找到,执行 ③;否则,执行 ④。
③ 当进程获得资源,可顺利执行,直至完成,从而释放资源。
Work [j] = Work [j] + Allocation [i, j]
Finish [i] = TRUE
GO TO ②
④ 如所有的进程 Finish [i] = TRUE,则表示安全;否则系统处于不安全状态。
➢设计思想 第三章 3.7.2 利用银行家算法避免死锁
(1)进行 T0 时刻的安全性检查,即在T0时刻若能 找到一个安全序列,则系统是安全的。
(2)以后若有进程发出资源请求,执行银行家算法。
3.8死锁的检测与解除
如果在系统中,既不采取死锁预防措施,也未配有死锁避免算法,系统很可能会发生死锁。这种情况下,系统 应当提供两个算法:
① 死锁检测算法。该方法用于检测系统状态,以确定系统中是否发 生了死锁。
② 死锁解除算法。当认定系统中已发生了死锁,利用该算法可将系 统从死锁状态中解脱出来。
基本思路
➢ 基本思路: 在操作系统中用某种数据结构保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否 存在死锁。
➢ 资源分配图算法: 把进程和资源间的申请和分配关系描述成一个有向图, 通过检查有向图中是否有循环来判断死锁的存在。
资源分配图
① 两种结点:
进程结点:对应一个进程
资源结点:对应一种类型的资源,这一类资源的数量可能有多个
② 两种有向边:
请求边(进程结点—>资源结点):表示进程想申请几个资源(每条边代表一个)
分配边(资源节点—>进程结点):表示已经为进程分配了几个资源(每条边代 表一个)
资源分配图化简方法(死锁定理)
① 在资源分配图中找一个既不阻塞又非孤立的进程结点。 (即从进程集合中找到一个有边与它相连,且资源申请 数量 <= 系统中已有空闲资源数量的进程。)
② 消去其所有请求边和分配边,使之变为孤立结点。即该 进程能获得所需全部资源,可继续运行直至完成,然后 释放它所占有的所有资源。
③ 把所释放的资源分配给一个等待该资源的进程。
死锁定理
如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁。
例子
死锁解除
一旦检测出死锁的发生,就应该立即解除死锁。
补充: 并不是系统中所有的进程都是死锁状态,用死锁检 测算法化简资源分配图后,还连着边的那些进程就是死锁进程。
① 资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源, 将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不 到资源而饥饿。
② 撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程, 并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可 能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一 旦被终止可谓功亏一篑,以后还得从头再来。
③ 进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就 要求系统要记录进程的历史信息,设置还原点。
综合方法
实际操作系统中,往往综合运用多种方法。
➢ 首先,对资源进行分类。归入若干不同资源类。 如:外部设备资源、内存资源。
➢ 其次,对资源类进行排序。
➢ 最后,对资源类中资源进行针对性优化。采用 不同的适当方法。如:采用避免方法处理外设资 源,预防方法处理存储资源等。
第四章 存储器管理
前言
➢ 本章学习存储器管理的主要对象是内存。
➢ 存储器负责保存整个计算机系统中的数据。
➢ 计算机的体系结构从“以运算器为中心”向“以存储器 为中心”逐渐转移。
➢ 存储器朝高速度、大容量和小体积的方向发展。
➢ 存储组织就是要在存储技术和CPU寻址技术许可的范围 内创建合理的存储结构。
4.1存储器的层次结构
➢ 从上到下,访问速度渐慢,容量渐大,价格渐低。
➢ 最佳状态: 各层次的存储器都处于均衡的繁忙状态。
➢ 由操作系统协调这些存储器的使用。
各种存储器简介
寄存器(Register):有限、最快、易变。
✓ 是中央处理器内的一个组成部分。在中央处理器的控制、算术及 逻辑部件中都包含寄存器。
✓ 是有限存储容量的高速存储部件,它们可用来暂存指令、数据和 位址。
高速缓存(Cache):少量、非常快、易变。
✓ 夹在CPU与主存储器之间,缓解速度的差异,提升系统的执行效 率。
✓ 外围设备也会加上Cache来提升该设备的数据存取效率。
内存(RAM 随机存取存储器):若干兆字节、中等速度、易变。
✓ 存放当前正在使用的(即执行中进程)的数据和程序。
✓ 一旦关闭电源或发生断电,其中的程序和数据就会丢失。 外存(External Storage):数百兆或数千兆字节、低速、 不易变。
✓ 能长期保存信息,不依赖电源,机械部件带动。
✓ 如硬盘、软盘、磁带、 光盘等。
内存管理主要功能 (4点)考!!!
(1) 内存分配和回收
为运行进程的程序和数据分配内存空间,并在不需要时进行回收。
(2) 地址变换
必须配合硬件进行地址变换工作,把用户使用的逻辑地址(相对地址,虚拟地 址)转换成处理器能访问的物理地址(绝对地址,实地址)。
• 逻辑地址(相对地址,虚地址) 用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相 对地址的形式,其首地址为0,其余指令中的地址都相对于首地址而编 址。不能用逻辑地址在内存中读取信息。
• 物理地址(绝对地址,实地址) 内存中存储单元的地址,可直接寻址。
地址映射:
把作业地址空间中使用的逻辑地址变换成内存空间中的物理地址的过程。
(3) 内存空间的共享与保护
共享是指若干个进程能够共同访问公共程序所占的主存区。 保护是指在内存中的各道程序,只能访问它自己的区域,避免各道程序间相互干扰,特别是当一道程序发生错误时,不致于影响其他程序的运行。通常 由硬件完成保护功能,由软件辅助实现。
(4) 内存扩充
用户在编制程序时,不应该受内存容量限制,所以要借助于虚拟存储技术或 其他自动覆盖技术,为用户提供比实际内存空间大的地址空间,从而实现内 存容量“扩充”的目的。
4.2 程序的装入和链接
(1) 编译:由编译程序将源程序编译成若干个目标模块。
(2)链接:由链接程序将编译后形成的目标模块以及它们所需要的库函数 链接在一起形成装入模块(可执行文件)。
(3) 装入:由装入程序将装入模块装入内存。构造PCB,形成进程。
4.3 连续分配存储管理方式
连续分配方式 是最早出现的一种存储器分配方式,曾被广 泛应用于上世纪60-80年代的OS中,该分配方式为一个用户程序分配 一个连续的内存空间,即程序中代码或数据的逻辑地址相邻,体现内 存空间分配时物理地址的相邻。可以分为以下四类:
1. 单一连续分配
➢ 只能用于单用户、单任务的操作系统中。
➢ 工作原理:在单道环境下,不管是单用户系统还是单道批处理系统, 进程(作业)执行时除了系统占用一部分主存外,剩下的主存区域 全部归它占用。主存可以划分为三部分: 系统区、用户区、空闲区。 用户占用区是一个连续的存储区所以又称单一连续区存储管理。
优点:简单,易于管理。
缺点:①对要求内存空间少的程序,闲置 内存空间较多,造成内存浪费;
②程序全部装入,很少使用的程序部分也占用内存。
2.分区分配式存储管理
原理:
➢ 把内存分为一些大小相等或不等的分区。
➢ 操作系统占用其中一个分区,其余由应用程序使用,每个应用程序 占用一个或多个分区。
特点:
➢ 适用于多道程序系统和分时系统。
➢ 支持多个程序并发执行。
➢ 难以进行内存分区的共享。
问题:
➢ 可能存在内碎片和外碎片
➢内碎片:占用分区之内未被利用的空间
➢外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)
2.1固定分区
原理:
✓ 预先把可分配的主存储器空间分割成若干个连续区域,称为一个分区。
✓ 每个分区的大小可以相同也可以不同。但分区大小固定不变。
✓ 每个分区装一个且只能装一个作业,且系统需要建立一张分区使用表,表项包含每个分区的起始地址、大小及分配状态。当分配时找到符合的内存大小,如 果该分区未分配,就可以进行分配。
优点:易于实现,开销小。
缺点:内碎片造成浪费。 分区总数固定,限制了并发执行的程序数目。
划分分区的方法
把内存划分为若干个固定大小的连续分区。
分区大小相等
➢ 只适合于多个相同程序的并发执行 (处理多个类型相同的对象)。
➢ 如炉温群控系统。
分区大小不等
➢ 多个小分区、适量中等分区、少量大 分区。
➢ 可根据程序的大小,分配当前空闲的、 适当大小的分区。
2.2动态分区
工作原理:
内存不是预先划分好的,而是当作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配。若有足够的 空间,则按需要分割一部分分区给该进程;否则令其等待主存空间。
优点:没有内碎片。内存 的利用率提高,需要采用 一定的算法才能实现。
缺点:引入了外碎片
动态分区分配的数据结构
① 空闲分区表:
➢ 用于记录每个空闲分区的信息。
➢ 包括分区序号、分区起始地址、 分区大小等这些表项。
➢ 每个空闲分区的信息占一个记录。
② 空闲分区链:将所有空闲的分区使用指针链接到一块(双链)。
分区分配操作 ——
1.分配内存
u.size:用户程序请求的分区大小;
m.size:空闲分区表(链)中每个空闲分区大小;
size:系统所允许的最小剩余分区容量。
分配过程:
①查找并分配:查找过程中每次比较m.size 与u.size大小。若m.size>u.size则此分区满足条件,但要判断m.size-u.size<size,若是,系统将此分区全部分配出;否则,系统从此分区中划出合适用户程序的空间分配,剩余的部分仍留在空闲分区链中
②修改相关数据:对于剩余部分的空闲空间要修改它的相关数据,如分区起始地址、分区大小及状态等
2.回收内存
分区释放过程中需要将相邻的空闲分区合并成一个空闲分区。
动态分区分配算法
为了把一个新作业装入内存,必须按照一定的分配算法, 从空闲分区表或空闲分区链中选出一分区分配给该作业。
基于顺序搜索的动态分区分配算法
➢ 首次适应算法(First Fit, FF) ➢ 循环首次适应算法(Next Fit, NF)
➢ 最佳适应算法(Best Fit, BF) ➢ 最坏适应算法(Worst Fit, WF)
基于索引搜索的动态分区分配算法
➢ 快速适应算法(Quick Fit, QF)
➢ 伙伴系统(Buddy System)[了解] ➢ 哈希算法(Hash)[了解]
① 首次适应算法(FF)
按分区在内存中的先后次序从头开始找,找到符合要求的第一个分区进行分配。
优点:分配和释放的时间性能较好,较大的空闲分区可以被保留在内存的高址部分。
缺点:随着低址分区不断划分,容易形成多个过小分区而难以利用,成为外碎片。同时这些小分区增加了查寻时的判 断时间,每次分配时查找时间开销会增大,降低效率
② 循环首次适应算法(NF)
改变首次适应算法每次从链首开始查寻造成的缺陷。
从上次分配的分区起查找,到最后分区时再从头开始, 找到符合要求的第一个分区进行分配。
优点:使内存区分配比较均匀,减少查寻次数。
缺点:大空闲分区不易保留,大进程无法进入。
③ 最佳适应算法(BF)
按分区在内存中的先后次序从头开始找,找到其大小与 要求相差最小的空闲分区进行分配。 空闲分区链需要按照分区容量递增的方式形成,分配时从链首开始查找,这样找到的第一个大小可以满足的分区肯 定是与进程申请空间大小最接近,甚至是完全吻合的分区, 而且平均查找次数为分区数的一半。
优点:外碎片较小,较大空闲分区可以被保留。
缺点:剩余分区肯定是相对最小的,外碎片较多,每次分配都会产生一个难以再利用的小“碎片”
④ 最坏适应算法(WF)
按分区在内存中的先后次序从头开始找,找到最大的空闲分区进行分配。(“最坏” 不是指这种算法的性能最差, 相反在某种情况下,它却是一种性能“最佳”的算法。)
空闲分区链需要按照分区容量递减的方式形成,分配时从链首开始,若链首分区大小不满足,则可以肯定不存在能 够满足要求的分区;否则对链首分区进行划分。
分割后空闲块仍为较大空块,基本不留下小空闲分区。
优点:基本不留下小空闲分区,不易形成外碎片。
缺点:较大空闲分区不易被保留。
基于顺序搜索的动态分区分配算法,比较适用于不太 大的系统。当系统很大时,系统中的内存分区可能会很多, 相应的空闲分区链就可能很长,这时采用顺序搜索分区方 法可能会很慢。
为了提高搜索空闲分区的速度,在大、中型系统中往 往会采用基于索引搜索的动态分区分配算法,目前常用的 有快速适应算法、伙伴系统和哈希算法。
基于索引搜索的动态分区分配算法
① 快速适应算法(QF)
又称分类搜索法,是将空闲分区根据其容量大小进行分类, 对于每一类具有相同容量的所有空闲分区,单独设立一个空闲 分区链表,这样,系统中存在多个空闲分区链表,同时在内存 中设立一张管理索引表,该表的每一个表项对应了一种空闲分 区类型,并记录了该类型空闲分区链表表头的指针。
优点:外碎片较小,较大空闲分区可以被保留;查找效率高。
缺点:剩余分区肯定是相对最小的,外碎片较多,每次分配都 会产生一个难以再利用的小“碎片” ;归还主存算法复杂, 系统开销大;
4.4对换技术(swapping)
也称交换技术
由于当时计算机的内存 都非常小,为了使该系统能分时运行多个用户程序而引 入了对换技术。系统把所有的用户作业存放在磁盘上, 每次只能调入一个作业进入内存,当该作业的一个时间片用完时,将它调至外存的后备队列上等待,再从后备 队列上将另一个作业调入内存。这就是最早出现的分时 系统中所用的对换技术。现在已经很少使用。
引入(在多道程序环境下)
➢ 在内存中的某些进程由于某事件尚未发生 而被阻塞运行,但它却占用了大量的内存 空间,甚至有时可能出现在内存中所有进 程都被阻塞,而无可运行之进程,迫使 CPU 停止下来等待的情况; ➢ 因内存空间不足,又有着许多作业一直驻 留在外存上,而不能进入内存运行。
定义
是指把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上,以使腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据换入内存。
优点
增加并发运行程序数目, 并且给用户提供适当的响应时间; 编写程序时不影响程序结构。
缺点
对换入和换出的控制增加处 理机开销;
程序整个地址空间都进行 传送,没有考虑执行过程中地址访问 的统计特性。
4.5分页存储管理方式
离散分配方式
✓ 连续分配方式会形成许多碎片。虽然可以通过紧凑的方法将 碎片拼接成可用的大块空间,但需要为此付出较大的开销。
✓ 因而将连续分配方式改变成为离散的分配方式,允许将一个 进程直接分散地装入到不邻接的分区中,无需再进行“靠拢” 。
根据分配时所采用的基本单位不同,可将离散分配方式 分为以下三种:
1 分页式存储管理
2 分段式存储管理
3 段页式存储管理
基本原理
① 将进程的逻辑地址空间分为固定大小的页或页面。
➢ 假设一个进程大小1KB,我们把1KB分成若干个大小相同的 块,叫做一个页面或一页;每页加以编号,从0开始。
② 将物理内存划分为同样大小的块或页框。
➢ 把内存空间分割成与页面大小相同大小的一块块,叫做块或者页框。
③ 在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
④ 由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”(由于所有进程不可能都可以被均分,所以最后一页很可能小于均分的页,也就小于所分配到的块,在块内所剩的空间叫页内碎片)
1.页面大小的选择
✓ 页面大小是由机器的地址结构决定的,32位/64位。一种机器的只能有一种大小的页面,通常是几KB到几十KB。
✓ 页面过大过小都存在弊端。页面过小可以充分利用内存,但是页表 (一个作业的所有页组成一个页表)过长,大量占用内存。
✓ 页面过大,虽然可以使页表变短,占用内存较小,但是内碎片增大, 内存利用率低。
2.内存块(物理块,页框)
✓ 内存块:内存按页的大小划分为大小相等的区域,称为内存块(物理 块,页框)。
✓ 内存分配以页为单位进行分配,并按作业的页数多少来分。逻辑上相 邻的页,物理上不一定相邻,通过页表把进程的各个页面与页框对应 起来。
3.页表
➢ 也称页面映像表,所有 页在页表中都有一项页表项,页表项中记录了相应页对应的物理块号。 ➢ 作用:通过查找该表, 可以找到每页在内存中 的物理块号。(实现页 号 到 物 理 块 的 地 址 映 射)。
4.地址结构
分页地址中的地址结构如下:
➢ 对某特定机器,其地址结构是一定的。
1KB=1024B
➢ 若给定一个逻辑地址空间中的地址为A,页面大小为L,则页号P和页内地址d可按下式求得(INT是取整函数,MOD是取余函数):
5.页式管理的地址变换
➢ 指令所给出地址分为两部分:逻辑页号,页内地址(位移量W)。
➢ CPU中的内存管理单元按逻辑页号通过查找进程页表得到物理块号,
公式如下: 物理地址 = 物理块号 × L(页面大小) + d(页内地址)
➢ 处理机每访问一个在内存中的操作数就需要访问两次内存。第一次 查找页表将操作数的逻辑地址变换为物理地址。第二次完成真正的读写操作。
6.分页系统的地址变换机构
(1)基本的地址变换机构
① 页表大多数位于内存中。系统中有一个页表寄存器,其中存放页表的起始地址和页表长度。当需要进行访问时,分页地址变换机构会自动将有效地址(相对地址)分为页号和页内地址, 通过页号检索页表。
② 如果页号≥页表长度,则表示地址越界,则产生越界中断。
③ 若没有出现错误,则将页表起始地址+页号*页表项长度,便得 到表项在页表中的位置,得到物理块号。页内地址送入物理地 址中的块内地址字段。便完成了从逻辑地址到物理地址的变换。
例题
(2)具有快表的地址变换机构
➢ 为缩短查找时间,提高地址变换速度,可以将页表从内存装入到一个具有并行查询能力的特殊高速缓冲存储器。
➢ 又称联想寄存器(Associative Memory),或称快表, 或称转换后备缓冲器 (TLB, Translation Look aside Buffer) 。
➢ 通常在快表中存放正在运行作业当前访问的那些页表项, 页表的其余部分仍然存放在内存中。
解释:
在CPU给出有效地址后,由地址变换机构自动将页号送入快表,并将此页号与快表中的所有页号进行比较,而且这种比较是同时进行的。
若其中有与此页号相匹配的页号,表示要访问的页的页表项在快表中,于是可直接读出该页所对应的物理块号,这样就无需 访问内存中的页表。
每次访问主存时,首先查找快表,若找到所需的页表项,则快速形成物理地址。否则从页表中查找后形成物理地址,同时把页表项写入快表。如果设计得当,快表的命中率可以很高。
7.分页存储管理的优缺点
• 优点:
① 没有外碎片,每个内碎片不超过页大小。
② 一个程序不必连续存放。这样便于改变程序占用空间 的大小。即随着程序运行而动态生成的数据增多,地 址空间可相应增长。
•缺点:程序全部装入内存。没有足够内存就不能执行程序。
4.6分段存储管理方式
1.分段式存储管理
1.引入
2.基本原理
将程序的地址空间划分为若干个段。系统为每个段分配一个连续的分区,而进程中的各个段可以不连续地存放 在内存中的不同分区中。
程序加载时,操作系统为所有段分配其所需内存,这些段不必连续,物理内存的管理采用动态分区的管理方法。 ——“ 段间离散,段内连续。”
段表
利用段表实现地址映射:
分段地址变换机构:
3.例题
4.分段存储管理的优缺点
• 优点: ① 没有内碎片 ② 外碎片可以通过内存紧缩消除。
• 缺点: ① 进程必须全部装入内存。
5.页式管理和段式管理的比较
➢ 页是信息的物理单位,段则是信息的逻辑单位。
分页是出于系统管理的需要。分段是出于用户应用的需要,相对完整。
➢ 页大小是系统固定的,由机器硬件实现。 而段大小则通常不固定,取决于用户程序。
➢ 页式系统地址空间是一维的,利用一个标识符即可表示一个地址。
分段的作业地址空间是二维的, 标识一个地址需要给出段名和段内地址。
2.段页式存储方式(了解)
基本原理
将用户程序划分若干个段,然后再把每个段分成若干页, 并为每一段赋一个段名。
结合段式和页式的优点,用分段方法来分配和管理用户 地址空间,用分页方法来管理物理存储空间。
基本思想(先分段,再分页):用户程序划分:按段式划分 (对用户来讲,按段的逻辑关系进行划分;对系统讲,按页划 分每一段)。
练习题
假定某页式管理系统,主存为32KB,分成8块, 块号为0、1、2、3、4……7。设某作业有4页,其 页号为0、1、2、3,被分别装入主存的7、3、5、0 块。
试问:
(1)该作业的总长度是多少字节?(按十进制)
(2)写出该作业每一页在主存中的起始地址。
(3)若多个逻辑地址[0,150] 、 [1,70] 、 [2,50]、 [3,0],试计算出相应的内存地 址。(方括号内的第一个元素为页号,第二 个元素为页内位移。)
第五章 虚拟存储器
5.1虚拟存储器概述
离散分配方法的缺点
✓ 都要求将一个作业全部装入内存后方能运行。(解决方法:虚拟存储技术
(1)有的作业很大,其所要求的内存空间超过了内存总容量, 作业不能全部被装入内存,致使该作业无法运行;
(2)有大量作业要求运行,但由于内存容量不足以容纳所有这 些作业,只能将少数作业装入内存让它们先运行,而将其 它大量的作业留在外存上等待
1.常规存储管理方式的特征和局部性原理
研究发现常规存储器管理方式具有一次性和驻留性的特征。