第一章绪论
1.1 操作系统的基本概念
1.1.1计算机硬件的基本组成
(冯 ~诺伊曼模型) ,由运算器,存储器,控制器,输入设备,输出设备组成。
引入操作系统的目的:提供一个计算机用户与计算机硬件系统之间的接口,有效控制和管理计算机系统中的各种硬件和软件资源,合理组织计算机系统的工作流程,以改善系统性能。
1.1.2操作系统的概念
- 用户观点:根据用户所使用的计算机的不同而设计不同类型的操作系统。
- 系统观点(资源管理的观点):操作系统是计算机系统的资源管理程序
- 进程观点:把操作系统看作由若干个可以独立运行的程序和一个对这些程序进行协调的核心所组成。
- 虚拟机观点(机器扩充):提供许多服务功能和良好的工作环境,扩充为虚拟计算机。
操作系统与硬件的关系:操作系统时覆盖在硬件上的第一层软件,管理计算机硬件资源
操作系统与其他系统软件的关系:操作系统时一种特殊地系统软件,时其他系统软件与硬件之间的接口。
1.1.3操作系统的特征
操作系统的特征(4项):
- 并发性:两个或多个事件在同一时间间隔内发生。(易混淆概念:并行性:两个或多个事件在同一时刻发生)
- 共享性:系统中的软硬件资源为多个程序、多个用户共同使用。**并发性与共享性是操作系用最基本的特征。**与并发互为存在条件。
- 互斥共享,打印机,队列
- 同时访问,硬盘,可重入代码
- 虚拟性:把一个物理上的实体变为若干个逻辑上的对应物。多道程序设计技术可以把一台物理上的CPU虚拟为多台逻辑上的CPU。虚拟性还表现在虚拟存储器(逻辑上扩充存储器容量),虚拟设备(独占设备变共享设备)
- 异步性:系统中程序的何时执行,多道程序间的执行顺序以及完成每道程序所需的时间都是不确定且不可预知的。
1.1.4操作系统的主要功能和提供的服务
基本功能(五项)
- 处理器管理
- 进程控制:负责进程的创建,撤销和状态转换
- 进程同步:对并发执行的进程进行协调
- 进程通信:进程间的信息交换
- 进程调度:使用一定算法进行处理器分配
- 存储器管理
- 内存分配
- 内存保护
- 内存扩充
- 设备管理
- 设备分配
- 设备传输控制
- 设备独立性:用户程序中的设备与物理设备无关
- 文件管理
- 文件存储空间的管理
- 目录管理
- 文件操作管理
- 文件保护
- 用户接口
- 命令接口
- 联机命令接口(交互式命令接口):分时或实时操作系统,直接控制
- 脱机命令接口(批处理命令接口):批处理系统,间接控制,由作业控制命令组成,系统自动执行。
- 程序接口(系统调用):程序级接口,由系统提供一组系统调用命令供用户程序和其他系统程序调用
- 图形接口:图形界面,联机命令接口的图形化
- 命令接口
1.2操作系统的发展与分类
1.2.1操作系统的发展
1.无操作系统阶段(手工操作)
问题:CPU与I/O设备之间速度不匹配
解决办法:脱机输入/输出技术
2.单道批处理系统
单道批处理系统特点:
- 自动性
- 顺序性
- 单道性
3.多道批处理系统
**多道程序设计技术:**将一个以上的作业存放在主存中,并且同时处于运行状态,这些作业共享处理器,外设以及其他资源。
特点:
- 多道
- 宏观上并行
- 微观上串行
综上,操作系统是一组控制和管理计算机硬件和软件资源,合理地组织计算机工作流程以及方便用户的程序的集合。
1.2.2操作系统分类
作业的概念
用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合,包括用户程序,所需数据以及命令。
1.批处理操作系统:不能加以干预
2.分时操作系统:时间片轮转
- 简单分时操作系统
- 具有前台和后台的分时操作系统,前台分时处理,后台是批处理作业
- 多道分时操作系统
- 分时特征:
- 多路性
- 交互性
- 独占型
- 及时性
3.实时操作系统:被控制对象允许的时间范围内做出快速反应
- 实时控制系统
- 实时信息处理系统
- 特征:
- 提供及时响应
- 高可靠性
4.兼有两种以上,则为通用操作系统
5.其他操作系统
- 嵌入式操作系统
- 集群系统
- 网络操作系统(基于计算机网络)(信息的处理和控制是集中的,计算机之间具有主从性,有节点计算机和监视计算机)
- 分布式操作系统(信息的处理和控制不是集中的,具有分布性)
- 统一性
- 共享性
- 自治性:计算机地位平等
- 透明性
- 优势:分布式(较低成本,较高性能),可靠性
1.3操作系统的运行环境
1.3.1CPU运行模式
核心态(管态,系统态):主体:操作系统管理程序执行时所处状态。能执行包括特权指令的一切指令,能访问所有寄存器和存储区。
- 内核的指令操作:
- 时钟管理
- 中断机制
- 原语:一些用于关闭中断的共用小程序
- 特点:处于操作系统最底层,最接近硬件; 程序运行具有原子性; 运行时间短,调用频繁。
- 系统控制的数据结构及处理
用户态(目态):主体:用户程序执行时所处状态,只能执行规定的指令,只能访问指定寄存器和存储区
特权指令:只能由操作系统内核部分使用,不允许用户直接使用的指令(I/O指令,设置中断屏蔽指令,清内存指令,存储保护指令和设置时钟指令)
1.3.2中断处理与异常的处理
中断:外中断,系统正常功能
异常:内中断,错误引起
1.3.3系统调用
系统调用:程序接口或应用编程接口(API),是应用程序同系统之间的接口。
操作流程:用户程序需要执行系统调用时,准备并传递系统调用所需参数,通过陷入指令(trap)进入操作系统的系统内核,用户态进入内核态,执行对应系统调用函数,使用特定系统内核功能,返回结果给用户进程,从内核态回到用户态。
1.4操作系统的体系结构
1.4.1模块组合结构
- 优点:结构紧密,接口直接简单,效率高
- 缺点:独立性差,结构不清晰,可扩展性差
- 只适用系统小,模块少,使用环境比较稳定的系统
1.4.2层次结构
- 优点:单向调用,单向依赖
- 缺点:层次划分需要考量
1.4.3微内核结构
- 思想:在操作系统中只保留最基本的功能,将其他服务尽可能地从内核中分离出去,由用户进程来实现,形成(C/S客户服务器模式)
- 适用于分布式系统
- 优点:可靠性好,灵活性,易于维护
- 缺点:效率不高,所有进程通过微内核通信,对通信频繁地系统不友好。
第二章进程管理
2.1进程与线程
2.1.1进程的引入
进程是资源分配的基本单位(与线程的主要区别),也是独立运行的基本单位。
前驱图
顺序执行
并发执行
Bernstein条件:读集和写集,令并发程序保持封闭性和可再现性。
2.1.2进程的定义
进程定义:
- 进程是程序在处理器上的一次执行过程
- 进程是可以和别的进程并行执行的计算
- 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位
- 进程可以定义为一个数据结构以及能在其上进行操作的一个程序。
- 进程是一个程序关于某个数据集合在处理器上顺序执行所发生的活动
进程的特征(四项):
- 动态性
- 并发性
- 独立性
- 异步性
- 结构特征, PCB,每个进程 = 程序段+数据段+PCB构成
进程和程序的关系
- 进程是动态的,程序是静态的,进程是程序的执行,进程包含程序
- 进程是暂时的,程序是永久的
- 进程与程序的组成不同
- 一个程序可以产生多个进程,一个进程可以执行多个程序,进程可以创建进程,程序不能形成新的程序。
- 进程具有并行特性(独立性,异步性),程序没有
进程映像:由程序段,相关数据段和PCB三部分,也叫进程实体;
进程映像与进程的关系:进程映像是静态的,进程是动态的,进程是进程实体的运行过程。
进程和作业的区别
- 作业是用户需要计算机完成某项任务而要求计算机所做工作的集合。一个作业的完成要经过作业提交,作业收容,作业执行和作业完成四个阶段。进程是已提交完毕的作业的执行过程,是资源分配的基本单位。
- 作业是计算机向用户提交任务的任务实体。进程是完成用户任务的执行实体。
- 一个作业可由多个进程组成,且必须至少由一个进程组成,但一个进程不能构成多个作业。
- 作业的概念主要用在批处理系统中(分时系统没有作业概念),进程则几乎在所有的多道程序系统中。
**进程的组成 : PCB(进程存在的唯一标识) + 程序段 + 数据段 **
**PCB = **PID(进程标识符)+ 进程当前状态 + 进程队列指针 + 程序和数据地址 + 进程优先级 + CPU保护现场区 + 通信信息 + 家族联系 + 占有资源清单
为什么说PCB是进程存在的唯一标志:
PCB的作用:PCB是系统为每个进程定义的一个数据结构(其作用是使程序(含数据)能独立运行),PCB的作用是为了保证程序的并发执行。创建进程实质上使创建PCB,撤销进程实质上是撤销PCB。
**在进程的整个生命周期中,系统总是通过PCB对进程进行控制,系统也是根据进程的PCB感知进程的存在。**系统调度到某进程后,根据其PCB中保存的处理机状态信息,设置进程恢复运行的现场,并根据PCB中的程序数据地址找寻数据与程序。进程在执行过程中都需要通过访问PCB来实现与其他合作进程进行同步,通信和访问文件。当暂停执行时,其端点的处理机环境也保存在PCB中。
综上,PCB是进程存在的唯一标志。
2.1.3进程的状态与转换
进程的五种基本状态:
- **就绪状态 **已获得了除了处理器以外的所有资源
- 执行状态(运行态)
- 阻塞状态(等待态): 与就绪态的区别在于,给该进程分配处理器资源后,能不能立刻执行,就绪态可以,阻塞态不行
- **创建状态 **
- 结束状态
进程状态的相互转换
进程状态之间的转换并非都是可逆的。
进程之间的状态转换并非都是主动的
进程状态具有唯一性,一个具体的进程再扔和一个时刻必须只能处于一种状态。
执行状态只能由就绪状态转换,而无法由阻塞状态直接转换。
2.1.4进程的控制
**进程的创建 **
- 进程前驱图(进程树,进程家族树)
- 创建原语
- 进程创建使用过创建原语来实现的
- 先从PCB集合中找到被撤销进程的PCB,并制定唯一的PID
- 为新进程分配必要的资源
- 将新进程的PCB初始化
- 将新进程的PCB插入到就绪队列中
- 进程创建使用过创建原语来实现的
进程的撤销
- 只撤销一个具有指定标识符的进程
- 撤销指定进程及其所有的子孙进程
- 撤销原语
- 先从PCB集合中找到被撤销进程的PCB
- 若被撤销进程处于执行状态,立即停止进程的执行,设置重新调度标志,以便撤销后将处理器分配给别的进程
- 第二种撤销策略还需将子孙进程都撤销了
- 回收被撤销进程所占的资源,归还父进程或系统,回收PCB。
进程的阻塞与唤醒
**阻塞原语(P原语):**执行态-》阻塞态,主动行为
- 停止当前进程的运行
- 保存CPU现场,以便可以重新调用该进程并从中断点开始执行。
- 停止运行该进程,执行态改为阻塞态,将进程插入到对应事件的等待队列中。
- 转到进程调度程序,选择就绪队列中的新进程投入运行。
**唤醒原语(V原语):**阻塞态-》就绪态,发现者进程调用原语,是一种被动行为。
- 将被唤醒进程从等待队列中移出
- 将状态改为就绪态,插入对应的就绪序列中
进程切换
进程的运行环境发生了变化。
与调度的区别:调度是决定将系统资源分配给哪个进程。进程切换是实际分配系统资源,且一定会发生中断,进行处理器模式切换,从用户态进入内核,再回到用户态。
但是处理器模式切换不一定发生进程切换。
2.1.5 进程通信
低级进程通信:同步与互斥
高级进程通信
- 共享存储器系统
- 消息传递系统
- 管道通信系统
2.1.6线程
线程的引入
线程的引入提高了程序并发执行的程度,改善资源利用率,进一步提高了系统吞吐量(线程引入的目的)
线程的定义
正确提法、补充理解:
- 线程是进程内的一个执行单元,比进程更小
- 线程是进程内的一个可调度实体
- 线程是程序(进程)中相对独立的一个控制流序列
- 线程本身不能单独运行,只能包含在进程中,只能在进程中执行。
综上,线程是进程内一个相对独立的,可调度的执行单元,线程自己基本上不用有资源。
多线程指一个进程中有多个线程,这些线程共享该进程资源。
线程的实现
由操作系统内核提供线程控制机制; 或者 由用户程序利用函数库提供线程的控制机制; 或者在操作系统内核与用户程序两个层次上提供控制机制。
**内核级线程:**依赖于内核,由操作系统内核完成创建和撤销工作的线程。一个内核级线程由于I/O操作被阻塞时,不会影响其他线程的执行
用户级线程:不依赖操作系统内核,由应用进程利用线程库提供创建,同步,调度和管理线程的函数来控制线程。因此,用户级线程可用于不支持内核级线程的多进程操作系统,或单用户操作系统,但是当一个线程阻塞时,整个进程都必须等待。
线程锁
- 互斥锁
- 条件锁
- 自旋锁
- 读写锁
线程的状态与转换
线程的六种状态
- 初始(new)
- 就绪状态
- 运行状态
- 阻塞
- 等待
- 超时等待
- 终止
进程与线程的比较
调度:引入线程的操作系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。同一进程中,线程切换不会引起线程切换,在不同进程中进行线程切换会引起进程切换。
资源:进程拥有资源基本单位,线程几乎没有,除了必要的需求
并发性:两者都可以并发执行
系统开销:引入线程,大大减小了开销,同时同一进程内多个线程共享进程的地址空间,线程的通信与同步容易实现。
2.2处理器调度
2.2.1处理器的三级调度
高级调度(作业调度):按照一定原则从外存上处于后备状态的作业中选择一个或多个给他们发配内存等资源,运行频率低。
- 调度程序决定操作系统接纳多少作业?多道程序的并发程度由系统的规模与运行速度决定。
- 应将哪些作业调入内存取决于调度算法,先来先服务,短作业优先等
中级调度,提高内存利用率与系统吞吐量,负责内存管理与扩充(换页时,将页面在外存与内存之间调度)
低级调度(进程调度)分配处理器资源,运行频率高。
作业调度与进程调度区别
- 作业调度为进程被调用做准备,进程调度使进程被调用。(作业调度的结果是为作业创建进程,进程调度的结果是进程被执行)
- 作业调度次数少,进程调度频率高
- 有些操作系统可以没有作业调度,但进程调度一定有。
2.2.2调度的基本原则
- cpu利用率,不是最重要的
- 系统吞吐量:单位时间内CPU完成的作业的数量
- 响应时间,主要面向用户。
- 周转时间
- 周转时间(作业从提交至完成的时间间隔,包括等待时间和执行时间) 作业 i 的周转时间 T i = 作业 i 的完成时间 − 作业 i 的提交 / 到达时间 作业i的周转时间T_i=作业i的完成时间-作业i的提交/到达时间 作业i的周转时间Ti=作业i的完成时间−作业i的提交/到达时间
- 平均周转时间(多个作业周转时间的平均值) T = ( T 1 + T 2 + . . . . . . . . + T n ) / n T = (T_1 + T_2 + ........+T_n)/n T=(T1+T2+........+Tn)/n
- 带权周转时间(指作业周转时间与运行时间的比) W i = 作业 i 的周转时间 / 作业 i 的运行时间 W_i = 作业i的周转时间/作业i的运行时间 Wi=作业i的周转时间/作业i的运行时间
- 平均带权周转时间(多个作业的带权周转时间平均值) W = ( W 1 + W 2 + . . . . . . . . + W n ) / n W = (W_1 + W_2 + ........+W_n)/n W=(W1+W2+........+Wn)/n
2.2.3进程调度
功能:
- 记录系统中所有进程的有关情况以及状态特征
- 选择获得处理器的进程
- 处理器分配
调度的场合:
- 当前运行进程运行结束(正常的,异常的)
- 当前进程应某种原因从运行态进入阻塞态
- 时间片用完
- 优先级更高
- and so on
不能进行调度的场合:
- 处理中断过程
- 在操作系统内核程序临界区中
- 其他需要完全屏蔽中断的原子操作过程中(加锁,解锁,中断现场保护,恢复等)
- 进程调度的方式
- 抢占式,优先级高者优先
- 非抢占式,不可剥夺方式。
2.2.4常见调度算法
1.先来先服务调度算法(作业调度,进程调度, FCFS)
2.短作业优先调度算法(作业调度,进程调度, SJF):把处理器分配给最快完成的作业(进程)。
3.优先级调度算法(作业调度,进程调度):将处理器分配给优先级最高的进程,如何确定进程的优先级
- 静态优先级,创建进程时确定了,确定了就不变了
- 动态优先级
- 按进程类确定的,系统进程优先级高于用户进程
- 按用户类型和要求确定,用户收费标准不同
- 按作业的资源要求确定,资源,处理器时间,内存大小,I/O设备类型及数量
- 按进程占有CPU时间的长短来决定
- 按就绪进程等待CPU时间的长短来决定
优先级相同情况下,通常按照先来先服务或者短作业优先的顺序执行。
4.时间片轮转调度算法(进程调度)
- 时间片大小的确定因素,系统的响应时间, 分时系统必须满足系统对响应时间的要求,表示为 T = N*q (q时间片大小,N为就绪队列中的进程数)
- 就绪队列中的进程数目
- 系统的处理能力
5.高响应比优先调度算法(作业调度)
综合等待时间和运行时间。
响应比 = 作业响应时间/估计运行时间 = (作业等待时间+作业运行时间)/估计运行时间
6.多级队列调度算法(进程调度)
7.多级反馈队列调度算法(进程调度)时间片轮转调度算法和优先级调度算法的综合与发展。
时间片逐渐增大,优先级逐渐降低.
最后一个队列采用时间片轮转调度法
当有优先级更高的新进程进入队列,则将正在执行的今晨放回第i个队列的队尾,新进程抢占处理器资源。
2.3同步与互斥
2.3.1进程同步的基本概念
两种形式的制约关系
- 间接相互制约(互斥)
- 直接相互制约(同步)
- 判断方法:同类进程为互斥关系,不同类进程就为同步关系。
**临界资源:**同时仅允许一个进程使用的资源
临界区:进程中用于访问临界资源的代码(临界段)
2.3.2 互斥实现方法
- 软件方法
- 四大原则
- 变量标记法,违背了“空闲让进准则”
- 标记数组法,违背了“忙则等待”准则
- 标记数组法+执行检查语句while(flag[i]),违背了“有限等待”准则。1+3算法, flag[]解决资源的互斥访问,turn解决“饥饿”现象。
- 违背让权等待——忙等:进程因为某事件发生而无法继续执行时,仍不释放处理器。
- 四大原则
- 硬件方法
- 用指令完成标志的检查和修改: 中断屏蔽或者硬件指令
硬件方法与软件方法都存在忙等(违背让权等待)的问题
2.3.3信号量
除了初值,信号量的值只能由P操作和V操作改变(P, V操作为原子操作,P申请资源,V释放资源,成对出现)
信号量的分类:
- 整型信号量,存在忙等问题。
- 记录型信号量(添加链表结构,解决忙等问题)
- 理发师问题
- 椅子与理发椅为一种资源
- 椅子与理发椅为两种不同的资源
- 生产者与消费者问题
- 读者-写者问题
- 读者优先算法
- 公平情况算法
- 写者优先算法
- 哲学家进餐问题
- 出现死锁问题, 解决方法:
- 最多允许四个哲学家同时进餐
- 仅当一个哲学家左右筷子都可用时,才拿起筷子进餐
- 将哲学家编号,要求奇数号哲学家先拿左边筷子,偶数号哲学家先拿右边筷子
- iii相反
- 出现死锁问题, 解决方法:
- 多个同类进程要用互斥信号量,同类进程就一个使用记录型信号量
- 信号量解题思路:
- 关系分析,存在一对同步关系,往往就需要一种资源信号量,资源信号量的初值应该设置为对应资源数量
- 确定临界资源,临界资源需要用到互斥信号量
- 整理思路:互斥的信号量设为1,表示同时只能有一个进程访问
2.3.5 管程
管程是一个语言成分,管程地互斥访问完全由编译程序在编译时自动添加,而且保证正确。
基本特征:
- 局部于管程的数据只能被局部于管程内的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
- 每次仅允许一个进程在管程内执行某个内部过程,进程互斥地通过调用内部过程进入管程
2.4死锁
2.4.1死锁的概念
无限期等待某个其他进程占有的、自己永远无法得到的资源。
2.4.2死锁产生的原因和必要条件
资源分类:可剥夺资源, 不可剥夺资源 (分类完全取决于本身的性质)
死锁产生原因:资源竞争,但资源竞争不等于死锁 , 死锁产生原因为 系统资源不足(根本原因)和进程推进顺序不当(重要原因)
死锁产生的必要条件
- 互斥条件:排他性
- 不剥夺条件:不能被其他进程强行夺走,只能由自己释放, 破坏这个条件,可能会增加系统开销,降低系统吞吐量。
- 请求与保持条件:(部分分配条件),占有当前资源,并等待分配新资源,,破坏这个条件要使用预先静态分配法(缺点:系统资源不能充分被利用)
- 环路等待条件:循环等待链,破坏这个条件应当采用有序资源分配法(将系统中所有资源按类型赋予编号,要求编号递增次序请求资源,同类资源一次申请完,只能请求比当前编号大的资源,避免了环路)
(四个条件缺一不可,可以通过破坏四个条件来预防死锁)
2.4.3处理死锁的基本方法
- 鸵鸟算法
- 预防死锁:破坏死锁的四个必要条件
- 避免死锁:预知可能状态来决定是否分配资源,银行家算法(不适合系统进程过多的时候,成本过高)
- 检测及解除死锁:被动,死锁发生后,强制释放资源或结束死锁进程
死锁避免与死锁预防不是一个概念,都是在死锁发生前采取措施,死锁预防对系统限制条件严格,并发性差,但不用计算死锁发生可能性; 死锁避免对限制条件宽松,有利于并发执行但是分配资源之前要计算分配后是否安全。
2.4.4死锁的预防
破坏四个条件 2.4.2
2.4.5死锁的避免
- 将系统分为安全状态与不安全状态
允许进程动态申请资源,进行资源分配前,先计算资源分配的安全性。
若在某一时刻,系统能按某种顺序为每个进程分配其所需要的资源,直至最大需求,使每个进程都顺利完成,此时为安全状态,该序列为安全序列(并不唯一,可能有多个)。
若在某一时刻系统中不存在这样的一个安全序列,则处于不安全状态(可能发生死锁,并不代表必然或者已经死锁了)。
- 银行家算法
n个进程,m类资源,Availablem,Max(最大需求矩阵)[n][m]
, 分配矩阵Allocation[n]m, Need[n][m]需求矩阵
N
e
e
d
[
i
]
[
j
]
=
M
a
x
[
i
]
[
j
]
−
A
l
l
o
c
a
t
i
o
n
[
i
]
[
j
]
Need[i][j] = Max[i][j] - Allocation[i][j]
Need[i][j]=Max[i][j]−Allocation[i][j]
P74页有例题
安全性算法
2.4.6死锁的检测与解除
死锁检测:
- 资源分配图
- 死锁定理:可以简化资源分配图的方法来检测系统状态S是否是死锁状态
- 找出一个既不阻塞又非孤立的进程结点Pi(资源申请数量少于空闲资源数量),满足它所需的所有资源,然后就可以唤醒要等待资源而阻塞的其他进程,简化消去分配边与申请边,重复执行。
- 若如何过程都不能使其简化,则为不可完全简化图。
- 系统状态S为死锁状态的条件是:当且仅当S状态的资源分配图是不可完全简化的,该定理称为死锁定理。
死锁检测算法,与银行家算法类似
死锁解除
- 剥夺资源
- 撤销进程
- 进程回退
2.4.7死锁与饿死
进程饥饿:资源分配策略不公平,不能保证等待时间上界的存在,此时等待时间给进程推进和响应带来明显影响.
进程饿死:饥饿到一定程度,进程所赋予的任务即使完成也不再具有实际意义时,则称为进程饿死。
**活锁:**在忙时等待条件下发生的饥饿。
第三章内存管理
3.1.1 内存管理基础
- 内存管理的功能
- 内存的分配和回收
- 地址变换
- 扩充内存
- 存储保护
- 应用程序的编译,链接与装入
程序链接:
- 静态链接:奖各个目标模块以及库链接为一个完整的可执行程序
- 装入时动态链接:边装入边链接
- 运行时动态链接:用什么装入什么,链接什么
程序装入:
- 绝对装入
- 可重定位装入(静态重定位:基址+逻辑地址)
- 动态运行装入(动态重定位,重定位寄存器)
物理地址
=
基址寄存器内容
+
逻辑地址
物理地址 = 基址寄存器内容 + 逻辑地址
物理地址=基址寄存器内容+逻辑地址
4.内存保护
- 界限寄存器方法:
- 上下界寄存器方法
- 基址和现场寄存器方法
- 存储保护键方法:给每个存储块分配一个单独的保护键
3.1.2覆盖与交换
- 覆盖技术:把一个大的程序划分为一系列的覆盖,每个覆盖是一个相对独立的程序序列,(不用了)
- 交换技术:把暂时不用的某个程序以及数据部分(或全部)从内存移到外存中,腾出内存空间,转交控制权的一种内存扩充技术。
3.1.3连续分配管理方式
内部碎片:已经分配给作业但不能被利用的内存空间(某个作业所占用的内存区域如果没有装满)
外部碎片:系统中还没有分配作业,但由于碎片太小而无法分配给申请内存空间的新进程的存储块(作业和作业之间的空隙)
- 单一连续分配:适合静态分配,单道程序,可采用覆盖技术,资源利用率低,会产生内部碎片
- 固定分区分配:采用静态重定位装入内存,分区大小可以不等但必须事先确定并且保持不变,适合多道程序系统最简单的存储分配,其缺点是不能实现多进程共享一个主存区,利用率低,存在内部碎片
- 动态分区分配(可变式分区分配):空闲分区表,空闲分区链
空闲分区算法:
- 首次适应算法(First fit , FF):地址递增
- 优点:优先利用低地址空闲分区,保留高地址大量空闲分区,无内部碎片
- 查找空闲分区的开销大
- 下次适应算法(Next Fit, NF):(循环首次适应算法), 循环队列,在上次找到的空闲分区的下一个分区开始找。
- 优点:空闲分区更均匀,减少了查找空闲分区的开销
- 缺乏大的空闲分区
- 最佳适应算法(Best Fit, BF):按分区容量大小递增排序,每次分配满足大小的最小分区
- 优点:总能分配最恰当的分区
- 产生难以利用的碎片空间
- 最差适应算法(Worst Fit, WF)按容量大小递减排序,每次分配最大的分区
- 优点:剩下的空闲分区大
- 但当有大作业来的时候,申请可能不会被满足
- 分区的回收
- 上邻接区
- 下邻接区
- 上下邻接区
- 分区分配的动态管理
- 拼接技术,(紧缩)
- 动态重定位分区分配技术,与动态分区分配算法相似,区别在于加入拼接功能
- 动态分区分配的优缺点
- 优点
- 实现了多道程序共用主存(多进程同时存在于主存的不同位置)
- 管理方案相对简单,开销小
- 存储保护手段简单
- 缺点
- 主存利用不充分,存在外部碎片
- 无法实现多进程共享存储器信息
- 无法实现主存的扩充,进程地址空间收到实际存储空间的限制
- 优点
3.1.4非连续分配管理方式
按分区大小是否固定分为
- 分页存储管理方式(页式存储管理技术)
- 是否需要把作业的所有页都装入内存
- 基本分页存储管理
- 分页原理:用户作业分为大小一样的区域:页, 将主存分为与页面大小相等的区域为块或者物理块,或者页框。
- 基本分页存储管理
- 是否需要把作业的所有页都装入内存
逻辑地址
=
页号
+
页内偏移
逻辑地址 = 页号+页内偏移
逻辑地址=页号+页内偏移
逻辑地址A,页面大小L
P
=
(
i
n
t
)
(
A
/
L
)
,
W
=
A
P = (int)(A/L),W = A%L
P=(int)(A/L),W=A
- **页表:页面与物理块的映射关系(通常在内存中)**
- **基本地址变换机构:页表寄存器(PTR)**
- **具有块表的地址变换机构**
- 简单分页(纯分页):将所有页面一次性调入主存,否则等待。
- 两级页表与多级页表
- 页表大小计算:M页表长度由页号位数决定,宽度由块号位数决定
- 两级页表:逻辑地址 = 外层也好,外层页内地址, 页内地址
- 多级页表:缺点多次访问内存地址变换浪费时间
- 页的共享与保护
- 优点
- 内存利用率高,实现了离散分布,便于存储访问控制,无外部碎片
- 缺点
- 需要硬件支持(快表),内存访问效率下降,共享困难,有内部碎片
- 请求分页存储管理
- 分段存储管理方式
- 基本分段存储管理
- 优点:方便编程,信息共享,信息保护
- 分段存储原理:作业的地址空间由若干个逻辑分段组成,每个分段是一组逻辑意义上相对完整的信息集合,作业地址空间是二维的(段的分类一维,段内偏移一维)以段为单位分配内存,段不要求连续
- 基本分段存储管理
- 段表及地址变换过程
段表项: 段号, 段长, 该段的内存起始地址
可加入快表加速
- 段的共享与保护
- **纯代码/可重入代码 :不能修改的代码,可以共享**
- **地址越界保护**
- **访问控制保护**
- 优缺点
- 优点:便于程序模块化处理和处理变换的数据结构;便于动态链接和共享;无内部碎片
- 缺点:需要硬件支持;为满足分段的动态增长和减少外部碎片要采用拼接技术;最大尺寸受主存可用空间限制;有外部碎片
为什么分页存储管理系统的地址空间是一维的,分段存储管理系统是二维的?
页号是系统自动生成的,本身地址是线性连续的,给出地址系统自动划分页号和页内偏移。段号是自定义的段的大小和意义不同,寻找数据或指令必须指定段号和段内偏移。
分页 | 分段 |
---|---|
信息的物理单位 | 信息的逻辑单位 |
目的:系统管理所需,提高内存利用率 | 目的:为了更好满足用户的需求 |
页的大小固定且由系统决定 | 段的长度不定,由用户编写的程序决定 |
作业地址空间一维 | 作业地址空间二维 |
有内部碎片,无外部碎片 | 无内部碎片,有外部碎片 |
- 基本段页式存储管理方式:地址空间分成若干逻辑分段,再将段分为若干页,对主存空间采用分页管理方式划分物理块。
- 逻辑地址结构
同时设置 页表和段表,每个进程一个段表(段号,页表地址,页表长度),每个段表一个页表(页号,块号),段表寄存器。
特点:段页式地址变换要访问内存3次,可采用快表加速
结合了段式,页式的优点,克服了段式的外部碎片问题,但是内部碎片没有像页式一样少,平均内部碎片比页式多。
3.2 虚拟内存管理
3.2.1虚拟内存的基本概念
虚拟内存管理技术的引入原因:此前的存储管理方法存在一次性和驻留性,难以满足较大的作业或者较多的作业进入内存执行,部分代码使用率低,部分代码需要较长处理时间,内存空间浪费问题严重,因此引入一种能让作业部分装入就可以运行的存储管理技术。
局部性原理:大多数程序执行时在一段较短的时间内仅使用程序代码的一部分,程序访问的存储空间也局限于某个区域。
- 时间局限性
- 空间局部性
虚拟内存的定义及特征:程序装入时,一部分放入内存,一部分放在外存,启动程序(部分装入),访问信息不在内存中,再将所需部分调入内存(请求调入)。操作系统将内存中暂时不实用的内容置换到外存上,从而腾出空间存放将调入内存的信息(置换功能)。从效果上看,计算机系统为用户提供了一个存储容量比实际内存大得多的存储器,从逻辑上扩充内存容量的存储器系统称为虚拟存储器(虚存)。
虚拟内存特征:
- 离散性:程序离散存储
- 多次性:分多次调入内存
- 对换性(交换性):作业在运行过程中可以换入,换出。
- 虚拟性:逻辑上扩充内存容量
常用的虚拟存储技术有, 请求分页存储管理,请求分段存储管理,请求段页式存储管理。
3.2.2请求分页存储管理方式
请求分页原理
请求分页 = 基本分页存储管理系统 + 请求调页功能 + 页面置换功能
页表结构
状态位:判断页面是否在主存中,不在就发生缺页中断
访问字段:记录访问次数
修改位:没修改,就不同步到外存中,反之将页面写到外存,减少磁盘写的次数。
缺页中断与地址转换
一条指令可以产生多个缺页中断。
优缺点:
- 优点:离散存储程序,降低碎片数量; 提供虚拟存储器,提高主存利用率; 有利于多道程序运行,方便用户。
- 缺点:需要硬件支持; 有些情况出现系统抖动现象; 程序最后一页仍存在未被利用的部分空间
3.2.3 页面置换算法
页面置换和连续分配方式中的交换的区别:
页面置换的单位:页面
交换的单位:整个进程
缺页中断不必然导致页面置换,缺页中断且没有空闲块时调用页面置换。
最佳置换算法(OPT):每次置换掉以后不再使用的或者以后最迟使用的的页面,有最低缺页率,但是无法实现。
先进先出算法(FIFO):总是淘汰最先进入内存的页面,可能造成Belady异常(缺页次数随着分配的物理块号的增加而增加),与实际情况不符,实际效果不佳
最近最少使用算法(LRU):选择最近最长时间没有被使用的页面进行淘汰,使用寄存器组和栈来实现,性能较好。
时钟置换算法(CLOCK):(最近未使用算法(NRU)),LRU与FIFO折中,设置页面访问位标记最近是否被访问,维护所有页面的循环链表,页面在链表中则访问位为1,否则从上次淘汰的页面位置的下一位开始,将途径的访问位为1的页面置零,遇到为0的就淘汰,循环遍历,比LRU少了硬件支持,实现简单,但是比FIFO使用的硬件要多。
改进型时钟算法:加入修改位,优先淘汰没有被修改的页面。减少了磁盘I/O次数,但增加了扫描次数。
最不常用置换算法(LFU):选择到当前时间为止访问次数最少的页面淘汰,每个页面都要计数器,每次淘汰计数值最小的,同时将计数器都清零。
页面缓冲算法(PBA):建立页面缓存,找回刚刚被置换的页面,减少系统I/O消耗,设两个链表一个已修改,一个未修改,修改页面数量达到一定程度一起写入磁盘。
3.2.4工作集与页面分配策略
工作集模型原理:让操作系统监视各个进程的工作集大小,若有空闲物理块可新调一个进程入内存,增加多道程度,或者选择进程兑换到磁盘,减少内存进程数量防止抖动发生。
页面分配策略
- **固定分配局部置换:**物理块数量固定
- 可变分配全局置换:缺页时分配系统空闲物理块
- 可变分配局部置换:缺页时让进程换出自己的内存页,通过缺页率分配物理块数量,有较高内存空间利用率,较低的缺页率
页面调入策略
- 请求调页策略
- 预调页策略
3.2.5抖动现象与缺页率
Belady异常:缺页率会随着所分配的物理块数量增加而增加。堆栈类算法的页面置换算法不会发生这类异常。
抖动现象:刚淘汰的页面反复调入调出,几乎不能完成任何有效工作。
缺页率,衡量页面置换算法的重要指标。 作业有n页,系统分配给作业m页空间(m<= n) ,作业在运行中访问A次页面,其中所访问的页面不存在,需要将所需页调入内存F次。
缺页率
f
=
F
/
A
缺页率f = F / A
缺页率f=F/A,
命中率
=
1
−
f
命中率 = 1- f
命中率=1−f
3.2.6请求分段存储管理
类似请求分页存储管理系统,除了段号,段长,内存始址
3.3 内存管理方式比较
分页存储管理 | 分段存储管理 | 段页式存储管理 | |
---|---|---|---|
有无外部碎片 | 无 | 有 | 无 |
有无内部碎片 | 有 | 无 | 有 |
优点 | 内存利用率高,基本解决内存零头问题 | 段拥有逻辑意义,便于共享,保护和动态链接 | 兼有二者 |
缺点 | 页缺乏逻辑意义,不能很好满足用户 | 内存利用率不高,难以找到连续的空闲区放整段 | 多访问一次内存 |
3.3.3基本分页管理方式中有效访问时间的计算
没有快表: EAT = 2t
存在快表:EAT = a*b +(t+a)(1-b) + t, a访问快表时间。访存一次时间t,快表命中率b.
3.3.4请求分页管理方式中有效访问时间计算
- 访问页在主存中,且在快表中,EAT = 查找快表时间 + 根据物理地址访存时间 = a + t
- 访问的页在主页中,但不在快表中,EAT = 查找快表时间 + 查找页表时间 +修改快表时间 + 用物理地址访存 = a + t + a+ t= 2*(a+t)
- 访问页不在主存中,发生缺页,缺页中断时间T(页调入,更新页表和快表时间) ,EAT = 查找快表时间+查找页表时间+处理缺页时间(更新页表与快表)+查找快表+按物理地址访存 = a + t + T + a + t = T + 2*(a+t)
命中快表的概率d,缺页率f
E
A
T
=
a
+
d
∗
t
+
(
1
−
d
)
[
t
+
f
(
T
+
a
+
t
)
+
(
1
−
f
)
(
a
+
t
)
]
EAT = a + d*t + (1-d)[t+f(T+a+t) + (1-f)(a+t)]
EAT=a+d∗t+(1−d)[t+f(T+a+t)+(1−f)(a+t)]
T
=
n
∗
T
1
+
(
1
−
n
)
T
2
T = n*T_1 + (1-n)T_2
T=n∗T1+(1−n)T2,(n页面被修改的概率)
第四章文件管理
4.1文件系统基础
文件是具有文件名的一组相关元素的集合,在文件系统中是一个最大的数据单位,描述了一个对象集,每个文件都有一个文件名,用户通过文件名来访问文件。
- 数据项:数据项是文件系统中最低级的数据组织形式,可以命名的最小逻辑单位
- 基本数据项
- 组合数据项:多个基本数据项组成
- 记录:一组相关的数据项的集合,用于描述一个对象在某方面的属性。
- 文件:是指由创建者所定义的一组相关信息的集合,逻辑上可分为有
- 结构文件:文件由一组相似记录组成,记录式文件
- 无结构文件:字符流,流式文件
文件的属性
- 名称
- 标识符
- 文件类型
- 文件位置
- 文件的大小,建立时间,用户标识
文件的分类
按用途分类
- 系统文件
- 库文件
- 用户文件
按保护级别分类
- 只读文件
- 读写文件
- 执行文件
- 不保护文件
按信息流向分类
- 输入文件
- 输出文件
- 输入/输出文件
按数据形式分类
- 源文件
- 目标文件
- 可执行文件
文件的操作
- 创建文件
- 删除文件
- 读文件
- 写文件
- 截断文件
- 设置文件的读/写位置
- 打开文件, 设置索引编号
- 文件指针
- 文件打开计数
- 文件磁盘位置
- 访问权限
- 关闭文件
文件的结构
- 逻辑结构:用户视角,用户能直接处理的数据以及数据结构
- 有结构的记录式文件(定长或不定长)
- 顺序(连续结构)(是否按关键字排序, 串结构, 顺序结构), 顺序存取速度较快, 会产生碎片,不利于文件的动态扩充。
- 索引,索引表,(索引表(文件记录的长度,逻辑文件的起始位置)+逻辑文件 = 索引文件)可以随机访问,易于进行文件的增删,增加了存储空间的开下,索引表的查找策略对系统效率影响大。
- 索引顺序:两者结合,将顺序文件所有记录分组,建立索引表,每组第一个建立索引项。索引顺序文件的逻辑文件是一个顺序文件,每个分组内部的关键字不必有序排列,但是组与组之间的关键字有序排列。 大大提高顺序存取速度,需配置索引表,增加了存储开销
- 直接文件和散列文件 :建立关键字和相应记录物理地址之间的映射关系,有较高的存取速度,但是会因为不同关键字的散列函数值相同而产生冲突。
- 无结构的流式文件
- 有结构的记录式文件(定长或不定长)
- 物理结构:计算机视角,文件在外存上的存放组织,与存储设备特性关系大。(连续分配,链接分配,索引分配)
4.1.4目录结构
文件目录
- 按“名”存取
- 提高检索速度
- 允许文件同名
- 允许文件共享
文件控制块FCB (FCB + 文件体 = 文件)
- 文件名
- 文件的结构
- 文件的物理位置
- 存取控制信息
- 管理信息
单机目录结构
优点:易于实现,管理简单
缺点:不允许文件重名,文件查找速度慢
二级目录结构
将文件目录分为主文件目录和用户文件目录。
优点:解决了重名问题,查找速度高,二级目录缺乏灵活性,在与其他文件进行合作与访问时会产生很多问题。
树形目录结构
非叶子节点都是目录文件,叶子节点是文件。
优点:方便文件分类,层次结构清晰,有效进行文件管理和保护
缺点:按路径逐级访问中间节点,增加了磁盘访问次数,影响查询速度,不便于文件共享
图形目录结构
加入有向边,有向无环图,共享计数器
优点:便于共享
缺点:系统管理复杂。
4.1.5文件共享
共享动机
传统树形目录文件的共享通过不同用户将各自文件的FCB设置相同的物理地址来实现,当其中一个目录项添加了新的内容,其他目录项没添加,新增的内容不能被共享。
基于索引结点的共享方式(硬链接)
目录项只有文件名与索引节点指针,就能实现修改的共享,也能实现文件的异名共享,但是文件被多用户共享时,文件拥有者不能删除文件。
利用符号链实现文件共享(软链接)
创建称为链接的新目录项,新的目录项包含被共享文件的路径名。
优点:解决了基于索引结点共享方法中文件拥有者不能删除共享文件的问题,但是其他用户访问共享文件时,要逐层查找目录,开销大。
4.1.6文件保护
防止文件受到物理破坏和非法访问。
访问类型
访问控制
- 访问控制矩阵
- 访问控制表
- 用户权限表
- 口令与密码
- 口令,开销小,但不够安全
- 密码,需要密钥,保密性强,节省空间,但解码和译码花时间。
4.2文件系统以及实现
文件系统是指操作系统中与文件管理有关的软件和数据的集合。从系统角度看,文件系统是对文件的存储空间进行组织和分配,负责文件的存储并对存入文件进行保护和检索的系统。具体来说,它负责为用户建立、撤销、读写、修改和复制文件。从用户角度看,文件系统主要实现了按名存取。
4.2.3文件的实现
外村分配方式
静态分配,动态分配
连续分配 查找速度快,信息简单,但容易产生碎片,需要定期进行存储空间紧缩
链接分配
- 隐式链接 随机访问率低,可靠性差
- 显式链接 文件分配表FAT,简单,文件创建与增长容易实现,不能随机访问盘块,在内存中找节省时间,指针占用存储空间,存在可靠性问题。
索引分配
为每个文件分配索引块,索引块里有索引表,表项对应应该分配给文件的物理块。
支持直接访问,不会产生外部碎片,解决文件长度受限问题,但是索引块分配增加存储空间开销,存取文件要两次访问外存,存取速度慢(可以先将索引表调入内存,这样就只用访问一次即可)
单级索引分配
两级索引分配
混合索引分配
文件存储空间管理
空闲文件表法
空闲块链表法
位示图法 二进制标记状态
成组链接法(UNIX的文件存储空间管理方法)
适用大型文件系统,占用空间小,超级块不大,大多数工作在内存进行,效率高。
4.3磁盘组织与管理
磁盘
引导控制块
分区控制块
目录结构
文件控制块
磁盘的访问时间
T
a
=
寻道时间
T
s
+
旋转延迟
T
r
+
传输时间
T
t
T_a =寻道时间T_s+旋转延迟T_r+传输时间T_t
Ta=寻道时间Ts+旋转延迟Tr+传输时间Tt
寻道时间:磁头收到读指令后 从当前位置移动到目标磁道位置所需的时间
T
s
=
m
×
n
+
s
,启动磁臂时间
s
,磁头移动
n
条磁道,移动一个磁道
m
T_s=m×n+s , 启动磁臂时间s,磁头移动n条磁道,移动一个磁道m
Ts=m×n+s,启动磁臂时间s,磁头移动n条磁道,移动一个磁道m
旋转延迟
T
r
=
(
1
/
r
)
/
2
T_r=(1/r)/2
Tr=(1/r)/2 r磁盘旋转速度, 等价于磁盘旋转半周的时间,半周是随机旋转长度的平均期望值。
传输时间取决于每次读写的字节数b和磁盘的旋转速度r,N一个磁道上的字节数。
T
t
=
b
/
(
r
N
)
T_t=b/(rN)
Tt=b/(rN)
4.3.2调度算法
先来先服务算法FCFS
最短寻道时间优先算法SSTF
选择与当前磁头所在的磁道距离最近的请求作为下一次服务的对象,寻道性能较好,但不能保证平均寻道时间最短,可能存在饥饿现象
扫描算法SCAN或者电梯调度算法
在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务对象,有较好的寻道能力,避免了饥饿现象,但对两端磁道请求比较不公平。
循环扫描算法C-SCAN
规定磁头单向,循环扫描移动,消除了对两端磁道请求的不公平。
磁道请求序列
55 58 39 18 90 160 150 38 184
4.3.3磁盘管理
磁盘格式化
低级格式化:分扇区方便读写
引导块,通常在ROM中
坏扇区,扇区备用
第五章设备管理
5.1I/O管理概述
I/O设备的分类
- 按设备的使用特性分类
- 存储设备
- 人机交互设备
- 网络通信设备
- 按信息交换单位分类
- 字符设备, 单位字符,如键盘,打印机
- 块设备,单位字符块,如磁盘
- 按传输速率分类
- 低速设备
- 中速设备
- 高速设备
- 按设备的共享属性分类
- 独占设备, 临界资源
- 共享设备
- 虚拟设备
- I/O管理的任务和功能
- 设备分配
- 设备处理, I/O指令, 中断请求响应
- 缓冲管理,缓和CPU与I/O设备速度不匹配的矛盾
- 设备独立性, 应用程序独立于物理设备,可提高用户程序的可适应性。
5.1.2I/O控制方式
设备控制器是一个可编址设备
设备控制器功能
- 接收和识别来自CPU的各种指令
- 实现CPU与设备控制器、设备控制器与设备之间的数据交换
- 记录设备的状态供CPU查询
- 识别所控制的每个设备的地址
- 对CPU输出的数据或设备向CPU输入的数据进行缓冲
- 对输入、输出的数据进行差错控制
I/O控制方式
- 程序直接控制方式
- 忙等:CPU不断测试I/O设备
- 优点:工作过程简单
- 缺点:CPU利用率低,造成浪费
- 中断控制方式
- 优点:加入中断硬件支持,CPU与I/O设备可以并行工作,提高了CPU利用率
- 缺点:多设备每输入一次数据都要中断CPU,在一次数据传输过程中中断次数过多,耗费大量CPU时间
- DMA控制方式
- 基本思想:在外设和内存之间开辟直接的数据交换通路,成批进行数据交换,就、一般用于块设备的数据传输,大大减轻CPU负担,数据传输速度大大提高。
- 特点:数据传输的基本单位是数据块,数据是**单向传输的,**且从设备直接送入内存或者相反;仅在传送一个或多个数据块的开始和结束才需要CPU的干预,整块数据的传送是在控制器的控制下完成的。
- 优点:DMA控制方式下,CPU与I/O设备可以并行工作,同时设备与内存的数据交换速度加快,并且不需要CPU干预。
- 缺点:DMA控制方式仍然存在局限性,数据传送方向,内存起始地址等都由CPU控制,且需要DMA控制器。
- 通道控制方式
- 本质是一个简单的处理器,独立于CPU有自己的运算控制逻辑和指令系统,在程序控制下工作,专门负责输入输出控制,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作。
- 特点:指令类型单一,没有自己的内存,与CPU共享内存。
- 按信息交换方式的不同分为
- 字节多路通道,连接多个慢速或者中速设备
- 数组选择通道:通道利用率低,只能连接一个分配型子通道。
- 数组多路通道:传输速率高,多个分配型子通道,连接多台中高速的外部设备,数据传送以数组方式进行。
- 优点:解决了I/O操作的独立性和各部件工作的并行性,实现了通道与CPU的并行,通道与通道的并行,各通道上外设的并行,提高系统的整体效率。
- 缺点:需要更多的硬件(通道处理器),成本较高,应用于大型数据交互场合。
DMA控制方式与中断控制方式的差别
- 中断控制方式在每个数据传送完成后中断CPU。DMA控制方式在所要求传送的一批数据全部传送完成后才需要CPU干预,
- 中断控制方式的数据传送时在中断处理时由CPU控制的。DMA控制方式是在DMA控制器的控制下完成的。
DMA控制方式与通道控制方式的差别
- DMA控制方式需要CPU来控制所传输的数据块的大小等信息,而后者这些信息都是由通道来控制管理的
- 一个DMA控制器对应一台设备与内存传递数据,一个通道可以控制多台设备与内存的数据交换。
5.1.3I/O软件层次结构
I/O设备管理软件分为四层
- 中断处理程序
- 设备驱动程序
- 设备独立性软件
- 用户层软件
5.2I.O核心子系统
5.2.1 I/O调度
确定一个好的顺序来执行I/O请求
(I.O核心子系统改善计算机效率的方法:I/O调度,使用主存或磁盘上的存储空间技术(缓冲,高速缓存,假脱机))
5.2.2高速缓存与缓冲区
缓冲技术可以提高处理器与外设并行程度。
缓冲区的引入缓和了CPU与设备速度不匹配的矛盾,降低了设备对CPU的中断频率,放宽对中断响应时间的限制,提高了设备与CPU的并行操作程度,提高了系统吞吐量和设备利用率。
缓冲技术实现方法
- 硬件缓冲器
- 缓冲区,内存中划分出来的临时存放数据的存储区
缓冲的分类
- 单缓冲 ,操作串行
- 双缓冲
- 循环缓冲,指针
- 缓冲池
高速缓存是可以保存数据备份的告诉存储器,访问高速缓存比访问原始数据更高效,速度更快。
高速缓存与缓冲区的区别
- 两者存放的数据不同:高速缓存放低速设备上的某些数据的备份; 后者存放低俗设备传递给高速设备的数据,低速设备中不一定有备份。
- 两者的目的不同:前者是为了存放低速设备上经常要被访问到的数据的备份,如果数据不在还是要访问低速设备的,后者为了缓和高速设备和低俗设备之间速度不匹配的矛盾,每次通信一定经过缓冲区。
5.2.3设备的分配与回收
设备分配依据的主要数据结构
- 设备控制表DCT
- 设备控制器表COCT
- 通道控制表CHCT
- 系统设备表SDT
- 系统设备表
设备分配策略
- 设备的使用性质
- 独享设备
- 共享分配
- 虚拟分配
- 设备分配算法
- 先来先服务
- 优先级高者优先
- 设备分配的安全性:设备分配中应保证不发生进程的死锁
- 静态分配
- 动态分配,可能或造成死锁
- 安全分配,发出I/O请求后就进入阻塞状态,直到I/O完成才唤醒
- 不安全分配
设备独立性
引入逻辑设备和物理设备,逻辑设备表LUT(逻辑设备名,物理设备名,设备驱动程序地址)
好处:设备分配时的灵活性,易于实现I/O的重定向。
设备分配程序
- 单通路I/O系统的设备分配,一对一
- 多通路I/O系统的设备分配, 多对多
5.2.4假脱机技术(SPOOLing技术)
通过共享设备来虚拟独占设备,提高设备利用率和系统效率。
SPOOLing==同时外设联机操作、排队转储技术,是一种低速输入/输出设备与主机交换的一种技术,核心思想——联机方式实现脱机效果。
SPOOLing的组成
- 输入井,输出井:两个存储区域,磁盘上
- 输入缓冲区,输出缓冲区,内存中
- 输入进程,输出进程,模拟模拟外围控制机
再输入输出之间增加输入井,输出井的排队转储环节,消除用户的联机等待时间
特点:
- 提高了I/O的速度
- 设备并没有分配给任何进程
- 实现了虚拟设备功能呢
- SPOOLing除了是一种速度匹配技术外,还是一种虚拟设备技术。