前言
参考许毅平老师的复习要点进行补充整理
第一章:操作系统概论
1. 操作系统的发展历史、定义、作用、功能、特征、分类、发展动力和研究方向
操作系统的形成和发展:
- 人工操作阶段
- 半自动控制阶段
- 多道程序设计与操作系统形成
- 操作系统分类
操作系统定义为用以控制和管理系统资源,方便用户使用计算机的程序集合
操作系统的作用可从以下几个观点来分析:
- 服务用户观点:操作系统作为用户接口和公共服务程序
- 进程交互观点:操作系统作为进程执行的控制者和协调者
- 系统实现观点:操作系统作为扩展机或虚拟机
- 资源管理观点:操作系统作为资源的管理者和控制者
从资源管理的观点来看,操作系统具有五项主要功能
- 处理器管理
- 存储管理
- 设备管理
- 文件管理
- 联网与通信管理
操作系统作为一个并发系统,其主要特性如下:
- 并发性
- 共享性
- 虚拟性
- 异步性
按照功能、特点和使用方式,可以把操作系统分为三种基本类型:1. 批处理操作系统 2. 分时操作系统 3. 实时操作系统
操作系统进一步发展的主要动力:器件快速更新换代;计算机体系结构不断发展;提高系统资源利用率的需要;让用户使用计算机越来越方便的需要;满足用户新要求,提供给用户新服务
功能分类:微机操作系统,网络操作系统,并行操作系统,分布式操作系统,嵌入式操作系统,多核操作系统,云操作系统
发展方向:云计算;框计算
2. 操作系统在计算机系统中的地位以及与其他软件的联系与区别
操作系统是最靠近硬件的一层软件,它一方面直接和硬件交互,在裸机上运行,将硬件的复杂性封装起来,负责管理和控制机器硬件并对其做首次扩充和改造,主要做好资源的调度和分配、信息的存取和保护、并发活动的协调与控制等工作;另一方面和上层的支撑软件和应用软件交互,把他们和计算机硬件隔离开来,为程序员提供方便的编程接口,有力的功能支撑,良好的运行环境,使计算机系统成为完整,可用,高效的计算平台
操作系统与支撑软件和应用软件的主要区别是:虽然它们都是软件,但操作系统有权分配资源,而其他软件只能通过操作系统使用资源,两者之间是控制与被控制的关系,操作系统直接作用在硬件上,隔离其他上层软件,为其提供接口服务,因此操作系统是软件系统的核心,是各种软件的基础运行平台
3. 操作系统的资源管理技术:复用、虚拟和抽象
- 资源复用:目的是解决物理资源数量不足
- 资源虚拟:目的是解决物理资源数量不足,提供服务的能力和水平
- 资源抽象:目的是处理系统的复杂性,解决资源的易用性
资源复用
可分为空分复用共享和时分复用共享
- 空分复用共享:资源分割成多个更小的分配单元,供进程使用
- 时分复用共享:资源以整体为分配单元,在一个时段里供一个进程独占享用,分为以下两种
- 时分独占式:进程获得时分独占式资源后,对资源执行多个操作,通常使用一个完整的周期后才会释放(如磁带)
- 时分共享式:指进程占用该类资源使用后,很可能随时被剥夺,被另一个进程抢占使用(如处理器,磁盘机)
资源虚拟
资源转化、模拟或整合技术,可将物理上的一个资源变成逻辑上的多个对应物(或物理上多个变为逻辑上的一个)。空分复用分割实际存在的物理资源,虚拟实现虚构假想的虚拟同类资源。
资源抽象
资源抽象用于处理系统的复杂性,重点解决资源的易用性。资源抽象指通过创建软件来屏蔽硬件资源的物理特性和接口细节,简化对硬件资源的操作、控制和使用的一类技术。资源抽象可分为单级资源抽象和多级资源抽象
4. 操作系统三个最基本抽象:进程抽象、虚存抽象和文件抽象
进程抽象
进程是对于进入内存的执行程序在处理器上操作的状态集的一个抽象,进程抽象的效果是让用户感觉到有自己独享的处理器,从而可为用户提供多任务操作系统和分时操作系统
虚存抽象
虚存抽象的效果是给用户造成假象,感觉独占了一个连续地址空间,编写应用程序的长度不受物理内存大小限制;虚存是通过结合对内存和外存的管理来实现的,把一个进程的虚存的内容存储在磁盘上,用内存作为磁盘的高速缓存,以此为用户提供比物理内存空间大得多的虚拟内存空间
文件抽象
文件是通过将文件中的字节映射到存储设备的物理块中来是实现文件抽象,文件抽象的效果是让用户感觉到总能满足自己对设备上信息的存取需求,而且使用十分方便。
5. 操作系统虚拟机及其实现原理
操作系统虚拟机=裸机+操作系统,操作系统虚拟机的组成:虚处理器,虚拟内存,虚拟辅存,虚拟设备
6. 多道程序设计定义、实现基础、基本原理、主要特征
- 多道程序设计是指允许多个作业(程序)同时进入计算机系统的内存并启动交替计算的方法
- 起因是高速CPU与低速I/O设备不匹配。
- 根本目的是提高CPU利用率,提高内存利用率,提高I/O利用率,增加系统吞吐量
- 运行特征:
- 多道:内存中同时存放几个作业
- 宏观上并行运行:都处于运行状态,但都未运行完
- 微观上串行运行:各作业交替使用CPU
- 优缺点分析:
- 优点:提高了CPU利用率,提高了主存与I/O设备的利用率,改进了系统的吞吐率,充分发挥了系统的并行性
- 缺点:作业周转时间延长
- 实现基础:实现多道程序设计必须解决三个问题,他们分别是存储保护和程序浮动,处理器的管理和调度,系统资源的管理和调度
7. 程序接口与系统调用
操作系统提供两种调用服务和功能的接口:
- 程序接口:运行程序调用操作系统的服务和功能的接口。由一组系统调用组成,通过该接口,用户程序可获得操作系统底层服务,使用或访问系统的软硬件资源
- 操作接口:操作系统为用户提供的操作控制计算机工作和提供服务手段的集合,通常有操作命令、图像操作界面、作业控制语言等实现手段
- 内核会提供一系列实现预定功能的内核函数,通过一组称为系统调用的接口呈现给用户
- 系统调用把应用程序的请求传达给内核,内核调用对应的内核函数完成请求所需处理后,再将处理结果返回给应用程序。内核的主体是系统调用的集合,可以把内核看成特殊的公共子程序,系统调用是应用程序获得操作系统服务的唯一途径,系统调用是一种中介,把用户与硬件隔离开来,应用程序通过系统调用才能请求系统服务和使用系统资源
- 系统调用的作用:
- 内核可基于权限和规则对资源访问进行裁决,保证系统的安全性
- 系统调用封装资源抽象,提供一致性接口,避免用户使用资源时可能发生的错误,且使编程方便效率高
系统调用与函数调用的区别
- 调用形式和实现方式不同:函数调用一般调用指令,其转向地址包含在跳转语句中,系统调用不包含处理程序入口,仅提供功能号,按功能号调用
- 被调用代码的位置不同:函数调用时,调用程序和被调用代码在同一程序中,系统调用的处理代码在调用程序之外(在操作系统中)
- 提供方式不同:函数由编译系统提供,不同编译系统提供的的函数可以不同。系统调用由操作系统提供,对设计好的操作系统,系统调用的功能,种类与数量固定不变。
8. 操作接口与系统程序
- 操作接口:操作系统为用户操作控制计算机工作和提供服务的手段集合,通常可借助操作控制命令、图形操作界面(命令)、以及作业控制语言(命令)等来实现
- 系统程序:系统程序虽非操作系统的核心,但却必不可少,为用户程序的开发、调试、执行和维护解决带有共性的问题或执行公共操作
9. 操作系统内核、功能及属性
- 内核定义为作为可信软件来提供支持进程并发执行的基本功能和基本操作的一组程序模块,内核通常驻留在内核空间,运行于核心态,具有访问硬设备和所有主存空间的权限,是仅有的能执行特权指令的那部分程序,内核可分类为单内核(又称宏内核)和微内核
- 单内核:将内核从整体上作为一个大进程实现,并同时运行在一个单独地址空间,所有内核服务在一个地址空间运行,相互之间直接调用函数,简单高效。优点是效率高,缺点是稳定性差
- 微内核:内核中只有最基本的调度、内存管理。驱动、文件系统等都是用户态的守护进程去实现的,功能被划分为独立的进程,进行间通过IPC通信,一个服务失效不会影响另一个服务。优点是模块化程度高,一个服务失效不会影响其他服务。
- 内核包含的基本功能
- 中断处理
- 时钟管理
- 进程调度
- 原语管理等
- 内核的特性
- 内核由中断驱动的
- 内核是不可抢占的
- 内核可以在屏蔽中断状态下执行
- 内核可以使用特权指令
10. 操作系统的运行模式及分类
操作系统按结构分类可分为单体式结构,层次式结构,虚拟机结构,微内核结构
从操作系统的运行方式来看,可分成:
- 嵌入应用进程中运行模型
- 作为独立进程运行模型
第二章:处理器管理
1. 可重入程序和可再用程序
- 可重入程序:指能够被多个程序同时调用的程序,纯代码,在执行过程中不被修改
- 可再用程序:指在调用它的程序退出之前不允许其他程序调用的程序,被调用过程中可以有自身修改
2. 为什么要引入进程?进程的定义和属性、进程的状态和转换、进程的描述与组成、进程上下文
为什么要引入进程
为了刻画程序的并发性;解决资源的共享性;
进程的定义和属性
- 进程定义:进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和保护的基本单位
- 进程属性:动态性;共享性;独立性;制约性;并发性
进程的状态和转换
- 进程三态模型:运行状态;就绪状态;等待状态
- 进程状态转换图
进程的描述与组成
进程映像:进程某时刻的内容和状态集合,包括:进程控制块,进程程序块,进程核心栈,进程数据块
进程上下文
- 操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文,进程上下文由用户级上下文,系统级上下文,寄存器上下文组成
3. 进程切换、切换时机和切换进程、处理器状态转换
- 进程切换:让处于运行态的进程中断进行,让出处理器,这时要做一次进程上下文切换、即保存老进程的上下文而装入被保护了的进程的上下文,以便新进程运行
- 切换时机:请求调度的事件发生后,就会进行低级调度程序,低级调度程序选中新的就绪进程后,就会进行上下文切换,实际上,调度和切换并不一定能一气呵成,通常的做法是,有内核置上请求调度标志,延迟到上述工作完成后再进行调度和进程上下文切换
- 处理器状态转换:当中断/系统调用发生时,暂时中断正在执行的用户进程,将进程从用户状态转换到内核状态,去执行操作系统服务程序以获得服务,这就是一次状态转换
- 处理器转换步骤:
- 保存被中断进程的处理器现场信息
- 处理器从用户态转换到核心态,以便执行服务程序或中断处理程序
- 如果处理中断,可根据规定的中断级设置中断屏蔽位
- 根据系统调用号或中断号,从系统调用表或中断入口表找到服务程序或中断处理程序地址
4. 多线程环境中进程与线程联系和区别、线程的实现(内核级线程和用户级线程)
- 进程是操作系统中除处理器外进行的资源分配和保护的基本单位,有独立的虚拟地址空间,容纳进程映像,并以进程为单位对各种资源实施保护
- 线程是操作系统进程中能够独立执行的实体,是处理器调度和分配的基本单位,线程是进程的组成成分,每个进程内运行包含多个并发执行的实体,这就是多线程
- 从实现角度看,线程分成用户级线程ULT,内核级线程KLT,混合式线程
- 用户级线程由用户应用程序建立、调度和管理的线程,优点是线程切换不调用内核,调度是应用程序特定的:可以选择最好的算法,ULT可运行在任何操作系统上(只需要线程库);缺点是大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞;核心只将处理器分配给进程,同一进程中的两个线程不能同时运行在两个处理器上
- 内核级线程的优点是对多处理器,内核可以同时调度统一进程的多个线程,阻塞是在线程一级完成,内核例程是多线程的;缺点:在同一进程内的线程切换调用内核,导致速度下降
- 混合式线程的线程创建在用户空间完成,大量线程调度和同步在用户空间完成,程序员可以调整KLT数量,可取两者中最好的
5. 特权指令与非特权指令、程序状态字
- 从资源管理和控制程序执行的角度出发,将指令系统中的指令分作两部分:特权指令和非特权指令;特权指令是指只能提供给操作系统的核心程序使用的指令,如启动I/O设备,设置时钟等
- 操作系统引入程序状态字(PSW)来区别不同的处理器工作状态,PSW用来控制指令执行顺序并保留和指示与程序相关的系统状态,主要作用是实现程序状态的保护和恢复
6. 处理器调度的层次;处理器调度算法选择的准则
- 作业从进入系统成为后备作业开始,直到运行结束退出系统为止,需经历不同级别的调度:高级调度:也叫作业调度;中级调度:也叫平衡调度;低级调度:也叫处理器/线程/进程调度
- 处理器选择调度算法的原则主要参考资源利用率,响应时间,周转时间,吞吐率,公平性
7. 作业调度和低级调度算法
- 作业调度:指按照某种算法从后备作业队列中选择部分作业进入内存运行,当作业运行结束后做好善后工作
- 作业调度程序的任务:选择作业,分配资源,创建进程,作业控制,后续处理
- 低级调度算法主要分为先来先服务算法,最短作业优先算法,最短剩余时间优先算法,最高响应比优先算法,优先级调度算法,时间片轮转调度算法,多级反馈队列调度
- 作业周转时间定义为完成时间-作业被提交给系统的时间,实际上等于等待时间和运行时间之和
- 作业的带权周转时间定义为作业的周转时间/运行时间,周转时间等于等待时间和运行时间之和,故带权周转时间总大于1
先来先服务算法(FCFS)
先来先服务是按照作业进入系统后备队列的先后次序来挑选作业,先进入系统的作业优先被挑选进入内存,FCFS调度算法的平均作业周转时间与作业提交的顺序有关
最短作业优先算法(SJF)
最短优先算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行,算法易于实现,效率不高,主要弱点是忽视作业等待时间,会出现饥饿现象,其平均作业周转时间比FCFS要小,故它的调度性能比FCFS好
最短剩余时间优先算法(SRTF)
SRTF把SJF算法改为抢占式的。一个新作业进入就绪状态,如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需的CPU时间短,SRTF强行赶走当前正在执行作业,称最短剩余时间优先算法,此算法不但适用于JOB调度,同样也适用于进程调度
最高响应比优先算法(HRRF)
- FCFS与SJF是片面的调度算法。FCFS只考虑作业等候时间而忽视了作业的计算时间,SJF只考虑用户估计的作业计算时间而忽略了作业等待时间
- HRRF是介乎这两者之间的折衷算法,既考虑作业等待时间,又考虑作业的运行时间,即照顾短作业又不使长作业的等待时间过长,改进了调度性能。
- 响应比=1+已等待时间/估计运行时间,短作业容易较高响应比,长作业等待时间足够长后,也将获得足够高的响应比,饥饿现象不会发生
优先级调度算法
静态优先数法
- 使用外围设备频繁者优先数大,这样有利于提高效率;重要算题程序的进程优先数大,这样有利于用户;进入计算机时间长的进程优先数大,这样有利于缩短作业完成的时间;交互式用户的进程优先数大,这样有利于终端用户的响应时间等等
动态优先数法
- 根据进程占用CPU时间多少来决定,当进程占用CPU时间越长,那么,在它被阻塞之后再次获得调度的优先级就越低,反之,进程获得调度的可能性越大
- 根据进程等待CPU时间多少来决定,当进程在就绪队列中等待时间越长,那么在他被阻塞之后再次获得调度的优先级就越高,反之,进程获得调度的可能性就越小
时间片轮转调度算法
- 时间片调度:调度程序每次把CPU分配给就绪队列首进程使用一个时间片,就绪队列中的每个进程轮流的运行一个时间片,当这个时间片结束后,强迫一个进程让出处理器,让他排列到就绪队列的尾部,等待下一轮调度。
- 轮转策略可防止那些很少使用外围设备的进程过长的占用处理器而使得要使用外围设备的那些进程没有机会去启动外围设备
- 时间片长度变换的影响:过长:退化为FIFO算法,进程在一个时间片内都执行完,响应时间长。过短:用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长,对响应时间要求等于进程数目乘时间片,时间片长度的影响因素,就绪进程的数目:数目越多,时间片越小,系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长
第三章:同步、通信与死锁
1. 程序的顺序执行与并发执行
- 程序的顺序执行:一个程序由若干个程序段组成,而程序段在顺序处理器上的执行是严格按序的,只有当前一个操作结束后,后继操作才能开始
- 程序的并发执行:一组进程的执行在时间上是重叠的,从宏观上,并发性反映一个时间段中几个进程都在同一处理器上,处于运行还未运行结束状态。从微观上看,任一时刻仅有一个进程在处理器上运行。
2. 与时间相关错误、相交和不相交并发进程
- 与时间相关的错误:对于一组交往的并发进程,执行的相对速度无法相互控制,各种与时间有关的错误就可能出现,其主要有两种表现形式:结果不唯一,永远等待
- 不相交的并发进程:一组并发进程分别在不同的变量集合上操作,一个进程的执行与其他并发进程的进展无关
- 相交并发进程:一组并发进程共享某些变量,一个进程的执行可能影响其他并发进程的结果
- Bernstein条件:两个进程使用的变量没有交集,则可并发执行
3. 进程互斥、临界区、临界资源、临界区管理的实现方法(硬件设施和软件算法)
进程互斥
进程互斥指若干个进程因相互争夺独占型资源时所产生的竞争制约关系,是一种特殊的进程同步关系,即逐次使用互斥共享资源,是对进程使用资源次序上的一种协调
临界区与临界资源
并发进程中与共享变量有关的程序段叫“临界区”,共享变量代表的资源叫“临界资源”
临界区调度原则:互斥使用,有空让进;忙则等待、有限等待;择一而入,算法可行
临界区管理的实现方法
硬件设施
- 关中断:禁止一切中断发生。缺点是代价高,影响并发性;不安全,不适合多CPU
- 硬件指令:主要使用测试并设置指令与对换指令;缺点是容易产生忙等待和饥饿;优点是使用单处理器和多处理器,方法简单,可以被使用于多重临界段情况
4. 进程的竞争和协作
竞争关系
- 竞争关系指原本不存在逻辑关系的各进程因共享资源而产生的交互和制约关系,这是一种间接制约,又称互斥关系。
- 资源竞争的两个控制问题:死锁问题:进程因争夺资源陷入永久等待状态;饥饿问题:进程对资源的使用被无限期拖延或超过等待时间的上限;资源竞争要求我们既要解决饥饿问题又要解决死锁问题。
协作关系
- 协作关系:指某些进程为完成同一任务需要分工协作而产生的关系
- 进程同步:指为完成共同任务的并发进程基于某个条件来协调它们的活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。
- 如果一个进程的执行依赖于协作进程的消息或信号,当该进程没有得到来自于协作进程的消息或信号时需等待,直到消息或信号到达才被唤醒
5. 进程同步、同步机制、用信号量和PV操作解决经典同步问题
进程同步与同步机制
通过调整并发进程的推进速度来防止并发进程访问缓冲区速度不匹配导致出现不正确结果,这种制约关系定义为进程同步。交互的并发进程可以通过交换信号或信息来达到调整相互速度,保证进程协调运行的目的。操作系统实现进程同步的机制称为同步机制。
用信号量和PV操作解决经典同步问题
- 信号量:一种软件资源,除初始化外,仅能由两个同步原语对其进行操作的整型变量。
- 原语:内核中执行时不可被中断的过程:可分为P操作原语与V操作原语
- 信号量可按其取值分为二元信号量和一般信号量,二元信号量的值仅允许取0或1,主要用于互斥变量。一般信号量取值允许为非负整数,主要用于进程间的一般同步
- 在一般信号量中,P和V操作原语定义为,P(s):将信号量s减去1,若结果小于0,则调用P(s)的进程被置为等待信号量s的状态。V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程
- 信号量的物理意义:信号量S的初值表示可用资源数,当S>0时,S的值表示还剩可用资源数。当\(s\le 0\)时,表示已无资源可分配,其绝对值表示此时在等待队列中等待分配资源的进程数;wait操作:申请资源,若S>0,意味着有资源可以申请,操作后,S=S-1意味着资源减少;Signal操作:释放资源,执行Signal操作之后,S=S+1,意味着资源数增加
- 若可用资源数为m,进程数为n,则信号量的变化范围定义为\(-(n-m)\le S\le m\)
- 为临界资源设置一个互斥信号量mutex,初值为1,在每个进程中把临界区代码置于P(mutex)和V(mutex)原语之间;必须要成对使用P和V原语,遗漏P原语则不能保证互斥访问,遗漏V原语则不能再使用临界资源之后将其释放给其他等待的进程;P,V原语不能次序错误,重复或遗漏
6. 死锁定义、引发原因、产生条件、死锁防止、避免、检测及解除方法
- 死锁定义:死锁是指系统中的一组进程,由于进程系统资源或由于彼此通信而永远阻塞,称这些进程处于死锁状态,其产生于资源分配策略和并发进程执行速度有关
- 死锁产生原因:进程竞争资源而资源不足;进程推进顺序不合适
- 必要条件
- 互斥条件:一个资源一次只能被一个进程所使用
- 占有和等待条件:一个进程因请求资源得不到满足而等待时,不释放已占有的资源
- 不剥夺条件:任一进程不能从另一进程那里抢夺资源,已被占用的资源只能由占用进程自己来释放
- 循环等待条件:在系统中存在一个由若干个进程形成的循环等待链,其中的每一个进程均占有若干个资源的某一种,同时还要求下一个进程所占有的资源
- 处理死锁的三种基本方法:
- 死锁的预防
- 死锁的避免
- 死锁的检测和恢复
- 死锁的防止:死锁的预防主要通过设置某些限制条件,破坏死锁产生的必要条件,以达到不产生死锁的目的
- 破坏第一个条件(互斥条件):使资源可同时访问,而不是互斥使用
- 破坏第二个条件(占有和等待条件):采用预先静态分配法
- 破坏第三个条件(不剥夺条件):采用剥夺式调度方法
- 破坏第四个条件(循环等待条件):采用层次分配策略
- 死锁的避免:在分配时判断是否会出现死锁,如不会死锁,则分配资源;主要利用银行家算法(单资源或多资源)
- 死锁的检测:基本思想是通过系统设置检测机构,实际的检测系统中是否存在死锁,并精确的标定出与死锁相关的进程和资源。实现是在操作系统中保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁;检测算法主要是检测是否有循环等待
- 死锁定理:如果进程资源分配图无环路,则此时系统没有发生死锁。如果有环路且每个资源类仅有一个资源,则系统发生死锁,如果有环路,涉及资源类有多个资源,则环路存在只是产生死锁的必要条件而不是充分条件
- 死锁的解除:
- 借助于死锁的安全性测试算法来实现
- 与死锁的检测配套使用,在发现进程死锁时,采用一定策略将系统从死锁状态中恢复,常用的方法是撤销进程并剥夺资源,使用挂起和解除挂起机构
第四章:存储管理
1. 存储器层次、逻辑地址空间和物理地址空间及其关系
存储器层次
存储器层次主要可以分为内存储器和外存储器。内存储器负责处理能直接访问的存储器。用来存放系统和用户的程序和数据,其特点是存取速度快,存储方式是以新换旧,断电信息丢失。外存储器是处理机不能直接访问的存储器。用来存放用户的各种信息,存取速度相对内存而言要慢的多,但它可用来长期保存用户信息,在文件系统中介绍。具体层次可从下图参考
逻辑地址空间和物理地址空间及其关系
- 程序地址:用户编程序时所用的地址(或称逻辑地址、虚地址),基本单位可与内存的基本单位相同,也可以不相同
- 程序地址空间(逻辑地址空间):用户的程序地址的集合称为逻辑地址空间,它的编址总是从0开始的,可以是一维空间,也可以是多维空间
- 物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间
- 为什么程序使用逻辑地址而不是物理地址?
- 用户需要精确计算空间与存放地址
- 支持多道程序运行十分困难
- 程序的可移植性差
2. 地址重定位、存储保护机制
地址重定位
- 可执行程序逻辑地址转换(绑定)为物理地址的过程称为地址重定位、地址映射或地址转换,基于上述程序装载方式,可分为三种地址重定位
- 静态地址重定位:程序装入内存时由连接装入程序完成从逻辑地址到物理地址的转换
- 动态地址重定位:在程序执行时由系统硬件完成从逻辑地址到物理地址的转换。
- 运行时链接地址重定位
存储保护机制
- 主要目的是为了防止地址越界和控制正确存取
- 地址越界保护
- 各道程序只能访问自己的内存区而不能相互干扰,必须对内存中的程序和数据进行保护,以免受到其他程序有意或无意的破坏。
- 对进程执行时所产生的所有内存访问地址进行检查,确保进程仅访问它自己的内存区,就是地址越界保护
- 越界保护依赖于硬件设施,常用的有:界地址和存储键
- 信息存取保护:进程访问分配给自己的内存区时,要对访问权限进行检查,如运行读、写、执行等,从而确保数据的安全性和完整性,防止有意或无意的误操作而破坏内存信息
3. 分区存储管理:分区原理、分配算法、内存不足解决方法(移动技术、对换技术和覆盖技术)
存储管理中,连续存储空间管理技术主要有单用户连续存储管理,固定分区存储管理和可变分区存储管理三种
固定分区存储管理
- 基本概念:把主存分为若干个固定大小的存储区,每个分区给一个作业使用,直到该作业完成后才将该区归还系统
- 用户分区划分可分为分区大小相等或不等,大小相等的缺点在于如果程序小于分区大小,则可能出现内部碎片,造成主存浪费。如果程序大于分区,则程序无法在一个分区内装入,导致程序无法运行;分区大小不等则能克服分区大小相等的缺点。
- 存储分块表(MBT):当分区大小不等时,系统需要对每个分区的信息进行记录以便管理,MBT就是用来存储分区管理信息的数据基。MBT中一般记录存储块的大小位置和状态
- 优点:管理简单;硬件支持要求少,一对界地址寄存器;缺点:主存利用率不高,存在内部碎片。分区总数固定,限制了并发执行的程序数目。
可变分区存储管理
- 因为固定分区主存利用率不高,使用不灵活,所以引入可变分区存储管理,其定义为指事先并未将主存划分为一块块分区,而是在作业进入主存时,按作业的大小动态地建立分区,且分区个数也是随机的,实现多个作业对内存的共享,进一步提高内存资源利用率
分配算法
最优适应法
- 定义:按分区的在内存的次序从头查找,找到其大小与要求相差最小的满足要求的空闲分区进行分配。
- 思想:避免"大材小用",使分区内未用部分最少
- 为了便于查找,一般对空闲存储块由小到大顺序排列,这样,第一次找到的满足要求的空闲块就是最佳的空闲块
- 缺点:孤立地看,此方法似乎是最优的,但从宏观和长远看,其会在主存中留下许多难以利用的小空闲区(外部碎片)
- 优点:较大的空闲分区可以被保留
最先适应法
- 定义:按分区在内存的先后次序从头查找,找到符合要求的第一个分区进行分配
- 分析:因为分区序号常从低到高排列,因此该算法倾向于优先利用主存的低地址部分的空闲分区,可保留高端大空闲区,一般会要求对空闲分区按地址递增的次序排列
- 优点:分配回收时间性能较好,可保留高端大空闲区
- 缺点:低端易出现很多较小空闲分区,查找时间开销增大
最坏适应法
- 定义:按分区在内存的先后次序从头查找,找到最大的满足要求的空闲分区进行分配
- 一般要求对空闲存储块按其大小以递增顺序排列
- 优点:减少了最佳适应法中出现过多外部碎片的缺点
- 缺点:不利于大作业分配
下次适应法
- 定义:该算法总是从未分配区的上次扫描结束处顺序查找非分配区表,直到找到第一个满足长度要求的空闲区为止
- 优点:缩短平均查找时间,使存储空间利用率更加均衡,不会导致小空闲区集中于主存一端
内存不足的存储管理技术
移动技术
- 起因:在可变分区中,会出现大量小的空闲分区,由于地址离散,不能为程序所用,形成外部碎片,造成内存浪费
- 措施:通过移动程序,将碎片集中起来形成一个大分区
- 实施时机:
- 在某分区被释放后立即进行紧缩
- 当请求分配模块找不到足够大的空闲分区时,再进行紧缩
对换技术
- 作用:解决多个程序存在而导致内存区不足
- 定义:通过选择一个进程,把其暂时移除到磁盘,腾出空间给某个进程使用,同时把磁盘中某个进程再换进内存,让其投入运行,这种互换称对换。
- 对换进程选择:把时间片耗尽或优先级较低的进程换出,因为短时间内它们不会被投入运行
覆盖技术
- 作用:解决用户程序长度超出物理内存总和
- 定义:指一个作业的若干程序段(或数据段)间,或几个作业的某些部分间共享某主存空间。
- 不足:由用户程序自己控制内外存信息交换,用户负担很重,且程序不宜过长,用于早期的OS
4. 分页存储管理基本概念-页面、页框、逻辑地址、页表和地址转换、快表、页面共享和保护
分页存储管理
- 基本思想:固定和可变分区有碎片存在,解决碎片除了前面可变分区通过内存紧凑技术消除碎片外,分页存储则采取由连续分配变为离散分配的方法
- 基本原理:
- 等分内存:把主存划分为相同大小的存储块,称为页架,并按其在内存中的地址顺序对其编号,记为页架号或块号
- 用户逻辑地址空间分页:将用户程序的逻辑地址空间划分为若干个与页架大小相等的部分,每个部分称为页,同样,按逻辑地址顺序对页进行编号,记为页号
基本概念
- 逻辑地址表示:在分页系统中,每个逻辑地址用一个数对表示(p,d),p:页号;d:页内偏移地址
- 主存分配原则:主存以页架为单位进行分配,可将作业任意一页放入主存的任意页架,作业所有页一次性装入主存,若主存空间不够,则作业等待
- 页表:用于管理和维护进程页和页架映射关系的数据结构,称为页表,记为PMT,系统创建进程时,同时会为其产生一个PMT,结束后删除,每个进程页表存放在主存的一个连续地址空间,系统里有一个页表寄存器,用来存放当前正在运行的进程的页表起始地址和页表长度
- 地址转换:从逻辑地址中求出页号和页偏移,然后以页号为索引查找页表,得到相应的块号;将块号转换为块的物理内存地址,并与也页偏移相加获得对应的物理地址
- 快表:存放在关联高速缓存中的页表。其表目包含:页号,页架号,所属进程和页面保护权限
页面共享和保护
- 页面共享定义为多个进程共享代码和数据,不同的进程可以使用不同页号共享数据项,但必须使用相同页号共享代码页
- 实现信息共享必须解决共享信息的保护问题,通常做法是在页表中添加标志位,指出此页的信息的权限
5. 分段存储管理基本概念、实现思想及优点
基本概念
- 段的定义:一组逻辑信息的组合
- 分段的引入:主要目的是为了满足用户在编程和内存使用上的要求
- 方便编程:用户希望能够把程序按照逻辑关系分成若干个段,每个段有段名和长度,用户程序在执行时可按段名和段内地址进行访问
- 共享和保护:在实现程序和数据的共享和保护时,都是以信息逻辑单位为基础的。而在分页系统中,每页都是存放信息的物理单位,本身并没有完整的意义,因而不便于实现信息共享和保护,而段则是信息的逻辑单元
- 基本原理:
- 逻辑地址空间划分和表示:每个进程的地址空间被划分为若干段,每段有段名,每段从0开始连续编址,段的长度由相应点逻辑信息组长度决定,段间是可以不连续编址的,采用二维地址空间进行表示:V=(S,W),S为段号,W为段内地址
- 主存分配:以段为单位进行主存分配,段内连续存放,每段分配一个连续的主存物理空间,段间可以不连续,段和段之间在主存中地址可以离散
- 段表:用于记录和管理进程分段信息的数据表示,应包含段号,段长,段的主存起始地址。其会在用户创建进程时同时创建,进程结束时,段表删除。和页表一样被存放于连续地址空间,且有段表寄存器管理
- 特点:没有内部碎片,便于共享和保护,存在外部碎片,由于段内连续分配,段的长度受内存空闲区大小的限制,但其需要更多硬件支持
6. 虚拟存储器、程序局部性原理;请求分页虚存管理的基本原理、硬件支撑、页表结构、地址转换、缺页中断率计算
虚拟存储器
- 引入原因:实存管理需要把作业一次全部内存方能运行,使作业的大小受到内存的极大限制,解决方法有两种,物理上增加主存和逻辑上扩充主存,逻辑上扩充主存就用到了虚拟存储技术
- 定义:在具有层次结构存储器的计算机系统中,采用自动实现部分转入和部分对换功能,为用户提供一个比物理内存容量大得多的,可寻址的一种"内存储器"
- 物质基础:相当容量的辅存与一定容量的主存,地址变换机构
- 虚拟空间的限制:指令中的地址场长度限制(主要原因);外部存储器大小的限制
- 实现要求解决的问题:内存外存统一管理问题;逻辑地址到物理地址的转换问题;部分装入和部分对换问题
程序局部性原理
- 指程序在执行过程中一个较短时间内,所执行的指令地址或操作地址分别局限于一定的存储区域中,又可以被细分为时间局部性和空间局部性
- 时间局部性:程序中某条指令一旦被执行,则较短时间内可能被再次执行,某个数据被访问,则在较短时间内可能被再次访问
- 空间局部性:一旦程序访问某个存储单元,较短时间内,附近存储单元也可能被访问,程序在一顿短时间内访问的地址可能集中在一定范围内。
虚拟存储管理实现技术
请求分页虚拟存储管理
- 基本原理:只需将部分页装入内存,在执行过程中访问到不在内存页面时,产生缺页中断,再从磁盘动态地装入。当页面不在内存中,采用扩充页表内容,增加驻留标志位等信息以及增加请求调页和页面置换功能
- 外页表:页面与磁盘物理地址的对应表,由操作系统管理,进程启动运行前系统为其建立外页表,并把进程程序页面装入外存,其按进程页号顺序排列,为节省内存,外页表可存放在磁盘中,当发生缺页中断时需要查用才被调入
- 硬件支撑:内存管理单元MMU完成逻辑地址到物理地址的转换功能,它接受逻辑地址作为输入,物理地址作为输出,直接送到总线上对内存单元进行寻址
- 地址转换:
- 直接映像的页地址转换
- 特点:降低CPU执行指令速度,每个进程一个页表,页表全部表项装在一个地址连续内存空间,只适合小进程地址空间
- 问题:页表可能非常大,地址映射要求非常快
- 多级页表地址转换:目的是为了减少进程页表对内存的占用,具体实现是通过让系统为每个进程建一个页目录表,每个表项对应一个页表项,页表项每个表项给出页面页框对应关系,页目录表是一级页表,页表项是二级页。其逻辑地址结构由三部分组成:页目录,页表页和位移
- 直接映像的页地址转换
- 多级页表地址映射示意图
- 优缺点分析:
- 优点:作业程序和数据可按页分散存放于内存中,减少移动开销,有效解决碎片问题,即有利于改进内存利用率,又有利于多道程序运行
- 缺点:要有硬件支持,要进行缺页中断处理,机器成本增加,系统开销加大
缺页中断率计算
假设作业p共计n页,系统分配给它的内存块只有m块\(1\le m \le n\)。如果作业p在运行中成功的访问次数为s,不成功访问次数为F,则总访问次数A=S+F,缺页中断率f=F/A
影响缺页终端率因素有:内存页框数,页面大小,页面替换算法,程序特性
7. 各种页面替换算法
最近页面替换算法OPT
- 基本思想:选择"将来不再使用的"或"在最远的将来才被访问的"页面被置换
- 特点:无法实现,因为无法预知未来页面的访问情况,常用作评价其他算法的依据
先进先出页面替换算法FIFO
- 基本思想:算法淘汰最先调入内存的页,或者说在内存中驻留时间最长的页
- 实现技术:设置具有m个元素的页号表,控制换页,最后引入指针链成队列
- Beledy现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现增加可用物理页框数量反而会导致缺页率增加的异常现象
- Beledy现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的
最近最少用页面替换算法LRU
- 基本思想:算法淘汰的页面是在最近一段时间内较久未被访问的那页。因为根据程序局部性原理,那些刚被使用过的页面,可能马上还要被使用,而较长时间未被使用的页面,可能不会马上需要被使用
- 实现技术:
- 页面淘汰队列:队列中存放当前内存中页号,每当访问一页时就调整一次,使队列尾总指向最近访问的页,队列头就是最近最少用的页。发生缺页中断时总淘汰队列头所指示的页,执行一次页面访问后,需要从队列中把该页调整到队列尾
- 引用法:每页设置一个引用法R,访问某页时,由硬件将页标志位R置1,隔一定时间t将所有页的标志R均清0,发生缺页中断时,从标志位为0的页中挑选一页淘汰。挑选到要淘汰的页后,也将所有页的标志位R清0。又称最近未使用页面替换算法(NRU)
- 计数法:每个页面设置一个多位计数器,又叫最不常用页面替换算法LFU。每当访问一页时,就使它对应的计数器加1,当发生缺页中断时,可选择计数值最小的对应页面淘汰,并将所有计数器全部清0
- 计时法:为每个页面设置一个多位计时器,每当页面被访问时,系统的绝对时间记入计时器,比较各页面的计时器的值,选最小值的未使用的页面淘汰,因为他是最老的未使用的页面
- 老化算法:为每个页设置一个多位寄存器R,当页面被访问时,对应寄存器的最左边置为1,每隔时间t,将R寄存器右移一位,发生缺页中断时,找最小数值的R寄存器对应的页面淘汰
第二次机会页面替换算法SCR
- 基本思想:对FIFO算法进行改进,将FIFO与页表中的"引用位"结合起来使用,最先进入内存的页面,如果最近还在被使用的话,仍然有机会像一个新调入的页面一样留在内存中
- 实现技术:检查FIFO中的队首页面,如果引用位为0,这个页面既老又没有用,选择该页面淘汰,如果引用位为1,说明它进入内存较早,但最近仍在使用,把他的引用位清0,并把这个页面移到队尾,看为一个新调入的页
时钟页面替换算法Clock
- 基本思想:为了改善二次机会置换算法的算法开销,其实现方式和二次机会置换基本一样,只不过把线性链表构成一个环形链表
- 实现技术:一个页面首次装入内存,其引用位置1,内存中任何页面被访问时,引用位置1,淘汰页面时,从指针当前指向页面开始扫描循环队列,把遇到的引用位是1的页面的引用位清0,跳过这个页面,把所遇到的引用位是0的页面淘汰掉,指针推进一步,在扫描循环队列时,如果遇到的所有页面的引用位为1,指针就会绕整个循环队列一圈,把遇到的所有页面的引用位清0,指针停在起始位置,并淘汰掉这一页,然后指针推进一步
- 改进算法:把引用位和修改位结合起来使用,组合成四种情况:最近没被引用和修改(r=0,m=0),最近被引用但没被修改(r=1,m=0),最近没被引用但被修改(r=0,m=1),最近被引用被修改(r=1,m=1)
- 改进算法工作流程:从指针当前位置开始,扫描循环队列,扫描过程中不改变引用位,把遇到的第一个r=0,m=0的页面作为淘汰页面,如果失败,再从原位置开始,找r=0,m=1的页面,遇到的第一个页面淘汰,把扫描过程中指针扫过的页面的引用位置为0,如果失败,再次从原位置开始,此时所有页面引用位r都为0,再按序重复前面流程,一定可以找出可淘汰的页面
第五章:设备管理
1. I/O设备分类;I/O控制方式;设备控制器及其工作原理
I/O设备分类
- 按照I/O操作特性:输入型设备、输出型设备、存储型设备
- 按照I/O信息交换的单位:字符设备、块设备
- 其中输入输出型外围设备一般为字符设备,存储型外围设备一般为块设备
I/O控制方式
按照I/O控制器功能的强弱以及和CPU间联系方式的不同,对I/O设备的控制方式可分类为轮询方式、中断方式、DMA方式、通道方式,主要差别在于:中央处理器和外围设备并行工作方式不同,并行工作的程度不同。
轮询方式
- 也叫程序IO方式或忙等待方式,使用查询指令测试设备控制器的忙闲状态位,决定内存和设备是否能交换数据。
- 工作流程:几个设备同时要求I/O,可对每个设备都编写I/O数据处理程序,轮流查询这些设备的状态位,当某个设备准备好允许I/O数据后,就调用这个设备的I/O程序处理数据传输,否则依次轮询下个设备是否准备好
- 特点:在外设进行数据处理时,CPU只能等待,消耗大量处理机时间;处理机和设备串行工作;管理简单
中断方式
- 中断方式要求CPU和设备控制器与设备之间有中断请求线,控制器的状态寄存器有相应中断允许位。
- 工作流程:
- 进程发出启动I/O指令,CPU加载控制信息到设备控制器的寄存器,然后进程继续执行或放弃CPU等待设备操作完成
- 设备控制器检查状态寄存器,按照I/O指令要求执行相应操作,一旦传输完成,设备控制器通过中断请求线发出I/O中断信号
- CPU收到并响应I/O中断后,转向处理该设备的I/O中断例程执行
- 中断处理例程执行数据读取操作,将I/O缓存寄存器的内容写入内存,操作结束后退出中断处理程序,返回中断前执行状态
- 进程调度程序在适当时刻恢复得到数据的进程执行
- 优点:在外设进行数据处理时,CPU不必等待,可执行该程序或其他程序
- 缺点:每次I/O都要CPU干预,CPU每次处理的数据量少,只适于数据传输率较低的设备
DMA方式
- 工作流程:
- CPU通过设置DMA控制器实现DMA编程,启动磁盘控制器并测试设备
- DMA控制器向磁盘控制器发出读请求,并将内存地址放在地址总线上
- 磁盘控制器将字节传送到内存指定单元
- 磁盘控制器向DMA控制器发送应答,DMA控制器将内部地址寄存器加1同时将计数器减1
- 重复2-4,当计数器为0时,DMA控制器向CPU发出中断信号
- 优点:CPU只需干预I/O操作的开始和结束,而其中的一批数据读写无需CPU控制,适于高速设备,相比中断方式,减少了CPU对I/O控制的干预,进一步提高了CPU与I/O设备的并发程度
通道方式
- 定义:采用专用的I/O处理器来接受CPU委托,独立执行自己的通道程序来是实现I/O设备与内存之间的信息交换,这就是通道技术
- 工作流程:
- 用户执行I/O请求时,通过访管指令进入管理程序,由CPU通过管理程序组织一个通道程序并启动通道
- 通道执行CPU为他组织的通道程序,完成指定的数据输入输出工作,此时CPU可执行其他任务并与通道并行工作
- 通道程序结束后向CPU发中断请求,CPU响应这个中断请求后,调用管理程序对中断请求进行处理
- 通道还可按照信息交换方式把通道分为字节多路通道、数组选择通道、数组多路通道
设备控制器及其工作原理
- 定义:I/O设备的电子部件,又称适配器,是可插入主板扩充槽的印刷电路板
- 工作原理:设备控制器是CPU和设备之间的接口,负责接收从CPU发来的命令,控制I/O设备操作,实现内存和设备间的数据传输
2. I/O软件层次(I/O中断处理程序、I/O设备驱动程序,独立于设备的I/O软件和用户层I/O软件)及各层的功能
I/O软件层次组织为四个层次:I/O中断处理程序,I/O设备驱动程序,独立于设备的操作系统I/O软件,用户空间的I/O软件
I/O中断处理程序
- I/O中断的类型和功能:
- 通知用户程序I/O操作沿链推进程度
- 通知用户程序I/O操作正常结束
- 通知用户程序发现的I/O操作异常
- 通知程序外围设备上的重要异步信号
- I/O中断处理原则:
- 操作正常结束:唤醒等待进程,并置为就绪态
- 操作发生故障或特殊事件的中断处理
- 人为要求而产生的中断处理
- 外围设备的异步信号处理
设备驱动程序
- 定义:I/O系统高层与设备控制器之间的通信程序,是与设备密切相关的代码
- 主要任务:接收用户提交的逻辑I/O请求并转换为物理I/O操作,发送给设备控制器,启动设备去执行;将设备控制器发来的信号传给上层软件
- 主要功能:
- 设备初始化:检查并预置设备和控制器以及通道的状态
- 执行设备驱动例程:启动设备进行数据传输,生成通道指令和通道程序,启动通道工作
- 执行中断处理例程:响应设备、控制器和通道发出的中断请求,调用相应的中断处理程序进行处理
- 特点:
- 是设备无关软件和设备控制器之间通信和转换程序
- 与设备控制器和I/O设备的硬件特性紧密相关,不同类型的设备应配置不同的设备驱动程序
- 与I/O设备所采用的I/O控制方式紧密相关
- 与硬件紧密相关,其中一部分用汇编语言设计
- 允许可重入,常会在一次调用完成前被再次调用
独立于设备的I/O软件
功能:
- 提供设备驱动程序统一接口:方便添加设备驱动程序
- 设备命名和设备保护:所有设备抽象为文件,用设备文件来表示设备
- 提供独立于设备的块大小:隐藏不同设备物理数据块大小差异,向高层软件提供大小统一的逻辑数据块
- 缓冲区管理:建立内核缓冲区,数据复制
- 块设备的存储分配:实现块设备共享
- 独占性外围设备分配和回收:由系统进行统一分配和回收处理
- 错误报告:发现错误,就近逐层处理错误,提示错误
用户空间的I/O软件
主要是库函数(与应用程序链接)和假脱机技术(虚拟设备)
3. I/O调度和磁盘驱动调度算法
在介绍调度算法前,需要先介绍I/O系统中数据的组织
盘片:磁盘最基本组成部分
磁道:盘片表面以盘片中心为圆心,不同半径的同心圆称为磁道
扇区:盘片被分为许多扇形区域,称为扇区,硬盘每个扇区存512字节信息
磁头:每个盘片的每一面都有一个读写头用于读取相应盘面数据
柱面:不同盘片相同半径的磁道所组成的圆柱称为柱面
容量磁盘:存储容量=\(磁头数*磁道(柱面)*每道扇区数*每扇区字节数\)
驱动调度:系统根据调度策略,按最佳次序执行要求访问的诸多请求,能提高系统效率
调度算法:
- 先来先服务算法:磁盘臂随机移动,不考虑I/O请求间的相对次序和移动臂当前所处位置,进程等待请求时间会很长,寻道性能较差
- 最短查找时间优先算法:总是先执行查找时间最短的请求,与FIFO相比有更好的寻道性能。容易产生饥饿现象
- 扫描算法:磁盘臂每次沿一个方向移动,扫过所有柱面,遇到最近的请求便处理,直到最后一个柱面后,再向相反方向移动回来。
- 分布扫描算法:将I/O请求分为长度为N的子队列,按FIFIO依次处理每个子队列,每个子队列采用扫描算法
- 电梯调度算法:扫描算法的改进,无访问请求时,移动臂不动,有访问请求时,移动臂按电梯规律移动。电梯调度和扫描算法的区别在于电梯调度不用运行到端点就可以返回
- 循环扫描算法:移动臂总是从0柱面到最大号柱面顺序扫描,然后直接返回0柱面重复进行,构成循环,缩短处理新来请求的最大延迟
4. 虚拟设备的原理、实现要点
- SPOOLing技术:是用一类物理设备模拟另一类物理设备的技术,是使独占设备变为共享设备的一种技术
- 实现要点:独占设备改造为共享设备由于Spooling技术把所有用户进程的输出都送入输出井,然后再由输出进程完成打印工作,而输出井在磁盘上,为共享设备。这样,Spooling技术就把打印机等独占设备改造成立共享设备。实现了虚拟设备功能由于Spooling技术实现了多个用户进程共同使用打印机这种独占设备的情况,从而实现了把一个设备当成多个设备来使用,即虚拟设备的功能。