目录
逻辑地址转物理地址:页号变块号,offset不变(反过来同理)
1 Linux基础
2 进程与线程、死锁
(处理机调度和进程线程管理)
2.1 进程
定义:(还未引入线程之前)
组织(组成):PCB进程控制块+程序段+数据段
PCB是进程存在的唯一标识。进程在创建时,操作系统会为它创建一个PCB,随后,这个PCB会被放置到内存中,在进程执行时,系统通过该进程的PCB可以了解进程的现行的状态信息,由此操作系统就可以对其进行控制和管理。当进程结束时,操作系统也会将PCB从内存中删除,进程也就随之消亡了。
程序段:进程调度到CPU执行的程序代码段。一个程序可以被多个进程共享(程序段相同),即多个进程可以运行同一个程序。
数据段:进程对应的程序加工处理的原始数据和进程运行过程中产生的中间/最终结果。
状态:创建、就绪、运行、阻塞、终止
等待(阻塞):进程正在等待合作进程的一个消息
就绪:进程正在等待分给他一个时间片
基本属性:资源的拥有者;调度单位
缺点:进程切换对时间空间开销大,限制并发程度的提高
进程控制:
使用原语来实现进程控制。(PCB转为就绪态 + PCB放到就绪队列)
方法:关中断指令和开中断指令;内核程序运行在核心态,执行关中断指令后,不再检查中断信号,以实现“原子性”。
(进程间通信IPC)
进程间通信:进程之间的信息交换(数据交换),依赖于操作系统提供的支持。因为为了保证安全,一个进程不能直接访问另外一个进程的内存地址,各个进程拥有的内存地址是相互独立的。
(1)共享存储
需要进行通讯的若干进程向操作系统申请一块共享空间,该共享空间可以由这些进程直接访问,通过对这片共享空间进行读/写操作实现进程之间的信息交换。操作系统会将这块共享空间映射到对应的进程的虚拟地址空间。
(2)消息传递
进程以格式化的消息为单位进行数据交换。若进程间不存在共享空间,需要利用操作系统提供的方法传递消息。分为直接通信和间接通信
(3)管道通信
指通过管道这种特殊的共享文件(pipe文件)进行进程间的信息交换。允许两个进程按生产者-消费者方式通信。先进先出、一端读一端写。管道机制有三方面能力:互斥、同步、确定对方存在。
当进程从用户态->内核态,表明陷阱,可能是因为:
系统调用;异常;外设异常
2.2 线程
目的:减少进程切换和创建的开销,提高执行效率和节约资源
将进程自愿申请和调度属性分开,即进程作为资源的申请和拥有者,但线程是独立调度和分派的基本单位。
优点:调度的基本单位,不引起进程切换;并发性提高;线程不拥有资源;多处理器体系结构的利用
线程的实现:用户级ULT、内核级KLT
用户级ULT:用户层通过线程库来支持。线程库提供对线程的创建、调度、管理,不需要用户干预;内核不知道用户线程的存在
优点:调度算法进程专用;线程切换不用内核;与操作系统无关
缺点:如果内核单线程,任何用户级线程阻塞时会引起整个进程阻塞;不能发挥多处理机优势
内核级TLT:内核直接负责线程的创建、调度、管理,给每个线程配备一个TCB线程控制器。
优点:发挥多处理机优势;阻塞时可调用其他线程;内核也可以用多线程技术;内核支持线程具有很小的数据结构和堆栈,线程切换开销小。
缺点:同一进程的线程切换需要用户态转到内核态,开销大
混合模式,多线程组合:
2.3 调度
定义:在某个队列中,按照某种方法(算法),选择合适的个体(作业、进程)的过程。
七状态模型:
挂起:由于内存有限,需要将某些进程的数据调出暂存至外存,待这些进程需要运行且内存空闲时再重新调入内存,这些被暂存至外存等待的进程的状态就是挂起状态。
层次:
高级调度(作业调度):外存->内存,创建新进程,作业调度
中级调度(内存调度):外存<->内存,挂起->激活,不创建新进程
低级调度(进程调度):内存,进程调度、CPU调度,从就绪->运行
指标:
CPU利用率=CPU有效工作时间 / ( CPU有效工作时间+CPU空闲等待时间 )
吞吐量=一个时间单元内完成*进程*的数量
周转时间=进程提交到完成的时间
均周转时间=各个作业周转时间总和/作业数
等待时间=进程在就绪队列里等待的时间之和
响应时间=分时系统,提到请求到第一次响应的时间
2.4 调度算法
2.4.1 FCFS先来先服务
缺点:周转时间与响应时间无法保证;短作业不利,等待时间远长于处理时间
2.4.2 SJF最短作业优先
两种形式:抢占式、非抢占式
缺点:需要事先估计每个作业所需时间;长作业可能会锁死;不利于分时系统(分时系统不可抢占)
2.4.3 SRT剩余最短时间优先
针对SJF增加抢占机制。选择预期剩余时间最短的,新程序就绪且有更短的剩余时间,可以抢占当前正在运行的进程。
缺点:记录过去的服务时间,增加开销;
优点:周转时间看来,由于SJF;不产生过多中断,优于轮转法
2.4.4 HRP最高响应比优先算法
响应比R = (等待时间W + 作业时间T)/ 作业时间T
优点比较:FCFS强调系统等待时间,SJF强调运行时间,HRP综合他们的特点
2.4.5 RR轮转法
为每个进程定义时间片。基于时钟的抢占策略,一般用于分时系统。
时间片选择:
时间片过短,进程切换过多开销大;时间片过长,变成FCFS。
优点:公平;
缺点:时间片短,切换开销大;时间片长,短作业不公平
改进方法:
2.4.6 PS优先级算法调度
每个进程都有一个优先号数,CPU被分配给优先级最高的 。
问题:低优先级饥饿
解决方案:老化——随时间增加进程的优先级
2.5 竞争问题
(进程、线程间竞争问题的处理)
当并发进程/线程竞争使用统一资源,可能会出现竞争条件。
一次只允许一个进程使用的资源被称作临界资源。
进程/线程访问临界资源的那段代码称为临界区。
同步:直接制约关系:未完成任务多个进程、线程需要某些位置、次序而等待、传递信息形成的制约关系。
互斥:间接制约关系,进程占用临界资源时,另外的进程需要等待。
实现方法:
软件实现:半标志法、双标志法先检查、双标志法后检查。
硬件实现:中断屏蔽方法、硬件指令方法(原子操作)
信号量semaphore:可以解决互斥同步问题。只被两个原语操作控制:P(S)加锁和V(S)释放锁
分类:
非记录型信号量(忙等待方式:不断测试):+空闲资源的数量;0无资源
二元信号量(信号量取值只有0和1,0有资源,1被占用)
记录型信号量(睡眠与唤醒方式:增加资源等待队列)
取值:0无资源无等待;+空闲资源的数量;-等待进程的数量
经典问题:生产者消费者、 哲学家就餐、读写者(读优先、写优先)
(死锁形成的原因和解决方法)
2.6 死锁问题
定义:一系列进程正在死锁,当每一个进程都在等待另外进程给他释放资源
原因:
资源不足,总需求超过最大资源量
可重用资源
不可重用资源
进程推进速度不当
P操作顺序不当
必要条件:互斥、占有并等待、不可抢占、循环等待
资源分配图:
2.7 解决死锁
2.7.1 方法
鸵鸟算法:无视可能出现的问题,当死锁概率很低时才可以使用
预防:限制,破坏4大必要条件
互斥:无法破坏,有的资源就是互斥
请求并保持:预先静态分配;资源严重浪费
不可抢占:复杂,前段工作失效,造成额外开销
循环等待:编号;不好修改系统构造,浪费且编码困难
检测和恢复:允许死锁,按时检测,再采取解锁手段
避免:资源动态分配中,采取方法防止不安全的操作
2.7.2 安全状态
安全序列:系统按序列进行资源分配,每个进程都可以顺利完成
并非不安全状态都是死锁状态,进入不安全状态可能造成死锁。
避免死锁的实质是,避免进入不安全状态。
2.7.3 银行家算法
2.7.4 安全性算法
死锁解除:资源剥夺法;撤销进程法;进程回退法。
3 内存管理
(内存管理基本方法)
内存管理的功能包括:内存空间的分配和回收、地址转换、内存空间扩充(虚拟内存)、存储保护
3.1 内存
构成:
地址映射:为保证程序正常运行,必须将虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址。(地址变换、地址重定位)
创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:
编译:由编译程序将用户源代码编译成若干个目标模块。
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
装入:由装入程序将装入模块装入内存运行。
3.2 装入、链接
链接:
静态链接:在生成可执行文件时进行的,由连接装配程序把它们连接成一个可运行的目标程序。
问题:花费时间,浪费空间
装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,釆用边装入边链接的链接方式。
运行时动态链接:开始运行时,只将主程序段装配好并调入内存,其它各段的装配是在主程序段的运行过程中逐步完成。
优点:便于修改和更新,实现对目标模块的共享。
装入:
绝对装入:编译时给出绝对地址的目标代码,装入时则不需对程序和数据的地址进行修改,直接按绝对地址装入。
缺点:只适应于单道程序环境。
可重定位装入:在多道程序环境下,多个目标模块的起始地址通常都是从0开始,根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对目标程序中指令和数据的修改过程称为重定位(也是地址变换)。在虚拟空间程序执行之前由装配程序完成地址映射工作,所以又称为静态重定位。
• 对于虚拟空间内的指令或数据来说,静态地址重定位只完成一个首地址不同的连续地址变换。
• 它要求所有待执行的程序必须在执行之前完成它们之间的链接,否则将无法得到正确的内存地址和内存空间。
优点:简单,无关硬件;缺点:地址重定位后不可更改;要占用连续内存空间
动态运行时装入(动态重定位):程序在内存中如果发生移动,就需要釆用动态的装入方式。装入程序不进行地址映射,在程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。
优点:可以对内存进行非连续分配;动态重定位提供了实现虚拟存储的基础;有利于程序段的共享
缺点:需要附加的硬件支持;实现存储管理的软件算法比较复杂。
当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。
变址寄存器:存储应用程序的长度。
基址寄存器:存储数据内存的起始位置
形式地址:指令中地址字段给出的操作数地址信息。
变址寻址:操作数地址 = 变址寄存器内容 + 形式地址
3.3 覆盖和交换
覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法。
内存覆盖:
由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。
内存交换:
把处于等待状态(或在CPU调度原则下被剥夺运行权利)的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出;把准备好竞争CPU运行的程序从辅存移到内存,这一过程又称为换入。中级调度就是釆用交换技术。
交换技术主要是在不同进程(或作业)之间进行,而覆盖则用于同一个程序或进程中。
3.3 连续分配管理
把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发进程共享。
基本原理是给每一个内存中的进程划分一块适当大小的存储区,以连续存储各进程的程序和数据,使各进程得以并发执行。
3.3.1 单一连续分配
内存中只驻留一道作业。为便于地址转换,把作业连续的存放在内存中,而不是离散的存放。
优点:方法简单,易于实现;缺点:仅适合于单道程序
3.3.2 固定分区法
将内存空间划分为若干固定大小(分区间的大小不用相等)的区域,每个分区只能装入一个进程。
优点:管理简单,系统开销小; 缺点:不灵活、大程序可能无法装入;利用率低,浪费,内部碎片大。
3.3.3 动态分区法
把内存中的可用分区单独构成可用分区表或可用分区自由链。装入程序时,根据需要动态分配内存。
问题:查找合适的空白分区;分配后更新;释放资源后合并空闲区
分配策略:
a. 最先适应法:按起始地址递增的次序排列,顺序查找到第一个满足要求的空闲分区。算法简单;低地址部分很多碎片,查找开销增大
b. 最佳适应法::按照分区容量递增的方式形成,顺序查找到第一个满足要求且最小的空闲分区。留出大存储区给大作业;算法复杂且留下碎片过小无法利用造成空间浪费
c. 最坏适应法:按照分区容量递减的方式形成,顺序查找到第一个满足要求且最大的空闲分区。避免留下碎片过小无法利用,但复杂且消耗掉了大存储区。
碎片:
内部碎片:固定分区,已经被分配出去却不能利用的空间。
外部碎片,动态分区,太小而无法被分配出去的空间。
3.4 非连续分配管理
非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。
概念:
将物理内存分为固定大小的块(称为帧)
将逻辑内存分成同样大小的块(称为页)
执行一个大小为n页的进程,要以页为单位,发现n个空闲帧并把程序装入其中,利用页表进行逻辑到物理地址的映射。
3.4.1 分页
分页的思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。
根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本分页存储管理方式和请求分页存储管理方式。
执行一个大小为n页的进程,要发现n个空闲帧并把程序装入其中;利用页表进行逻辑到物理地址的映射;内部碎片
页表(慢表):页表被保存在内存中,查询虚拟地址和物理地址的对应关系
TLB(快表):特殊的硬件缓冲,也称相联存储器或转换表缓冲区
有效位:0表示页面不再内存中,即缺页
3.4.2 分段
按照逻辑关系分段,段内要求连续,段间不要求连续,同时进出内存;面向用户的内存管理机制;把程序按内容或者过程关系分成段
段表:段号+段长+本段在主存的起始位置
3.4.3 段页式存储管理
用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。
(虚拟内存管理技术)
3.5 虚拟内存管理技术
3.5.1 概念
虚拟存储器:内存根据局部性只调用需要部分执行程序,好像提供了一个比实际内存容量大很多的存储器。
虚拟内存技术需要建立在离散分散内存管理方式的基础上,所以实现方式有:
请求分页存储管理
请求分段存储管理
请求段页式存储管理
所需硬件支持有:一定外存和内存;页表机制;中断机构;地址变换机构;
3.5.2 请求分页存储管理
页表项
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址 |
状态位P:页是否调入内存
访问字段A:本页一定时间的访问次数
修改位M:页面内容是否有修改,是否写回
外存地址:该页在外存的地址,通常是物理块号
**通常做题是:
逻辑地址 = 页号 + offset
物理地址 = 块号 + offset
根据页号在页表内索引块号,再和offset拼起来即可
(1)一级页表:只需要存块号就行
当求标志位最多时,页号可以按照顺序编码,只保留块号(页帧号),所以标志位最多 = 页表项位数 - 页帧位数 = 页表项位数 - (物理地址位数- offset)
(2)二级页表:页表内还是只存储一个页地址
此时,逻辑地址 = 页目录号 + 页号 + offset
(3)表达式求目录号/页号
逻辑地址LA>>(偏置+页号位数)/(偏置位数) & (全1的所求号位数)
(4)倒排页表
一级和两级分页系统中的页表存在一个缺陷:页表的大小与虚拟地址空间的大小成正比。一种替代方法是使用一个倒排页表,其机构如下:
页表结构之所以称为”倒排“,是因为它使用页框号而非虚拟页号来索引页表项。(没说就不分级)
(5)页框分配
页框:即块;页框大小就是物理块的实际大小。
(6)访问时间
假如有页表在内存中100ns,有TLB10ns,缺页2^8ns查询某地址
-
- TLB成功:TLB成功(10ns)+存取100ns=110
- TLB失败,页表成功:TLB失败10ns+页表成功100ns+存取100ns+更新=210ns
- 缺页:TLB失败10ns+页表失败100ns+缺页更新2^8ns+TLB成功10ns+存取100ns=2^8+220ns
3.6 页面替换算法
3.6.1 FIFO先进先出
抖动现象Belay
3.6.2 OPT最佳置换
在访问串中将来再也不出现的或者是在离当前最远的位置上出现的页。
需要预先知道每个进程的访问情况,因此在实际的操作系统中无法实现,但可以用来评价其他算法的优劣。
3.6.3 LRU最近最久未使用
选择离当前时间最近的一段时间内最久没有使用过的页先淘汰。付出很大的系统开销。
3.6.4 老化算法
引入引用位,0表示未使用,1表示使用。时钟时过去后计数器最小的被淘汰。
是LRU的近似算法:老化算法有位数限制;不记录使用的频次和时间。
3.6.5 CLOCK时钟置换
???王道P200
4 文件系统
(数据在外部设备上存储和管理的方法)
4.1 概念和操作
文件定义:
文件锁:允许进程锁定文件,防止其他进程访问(共享锁、独占锁)
4.2 文件访问和目录
文件内部结构:逻辑块序列
文件访问方法:使用文件时需要加载到内存
顺序访问:文件信息按顺序处理
直接访问:允许程序按任意顺序进行快速读取和写入记录
定长记录的顺序文件,第i个记录的首地址可计算;变长记录的文件,通常采用索引文件的方式组织。
其他:建立在直接访问之上,通过创建文件索引。
分区:一个存储设备可以化为多个分区,每个分区可以由单独的文件系统。
多个分区可共享一个磁盘;一个分区可跨越多个磁盘。
卷:包含文件系统的分区。
目录:记录卷上的所有文件的信息,如名称,位置,大小和类型等。本身也存储在磁盘上。
4.3 目录
4.3.1 单级目录
所有文件包含在同一目录下,不允许同名,随着文件数量的增加,单目录管理给用户造成混乱。
优点:简单
缺点:查找慢;不允许重名;不利于共享
4.3.2 两级目录
为每个用户创建一个单独目录,主文件目录(MFD)+ 用户文件目录(UFD);不同用户的文件名可相同;用户间文件互访可通过完整路径名。
优点:利于文件管理、共享、保护;适用于多用户系统;不同用户可命名相同文件名
缺点:不能对文件分类,用户文件多时查找速度慢
4.3.3 树形目录
目录是一个特殊文件;每个进程有一个当前目录,引用文件时将搜索目录;如果文件不在当前目录,用户需指定路径名。(绝对路径、相对路径)
优点:便于分类;查找速度快;可实现文件共享
缺点:复杂;所有文件存放外存,多次读取磁盘影响速度
当前目录、相对路径
4.3.4无环图目录
文件可能拥有多个绝对路径名;
但存在一些问题:影响磁盘利用率的准确计算、备份、删除;指向不存在文件的悬挂指针, 甚至可能存在磁盘地址被重用。
解决方案:硬链接:指向同一个文件在硬盘中的区块;
符号链接(软链接):保存了其代表的文件的绝对路径。
4.3.5 通用图目录
允许环存在的图;降低搜索性能但删除操作复杂。
4.3.6 目录实现
线性列表:采用链表结构可以减少删除文件的时间,其优点在于实现简单,不过由于线性表的特殊性,比较费事。
哈希表:哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。这种方法的优点是查找非常迅速,插入和删除也标胶简单,不过需要一些预备措施来避免冲突。最大的困难是哈希表长度固定以及哈希函数对表长的依赖性。
4.4 共享文件
inode:一种文件目录瘦身策略。由于检索文件时只需要用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。
组成:记录文件元数据的一种结构;文件与inode一一对应;每个inode有单独编号;记录文件的磁盘块;link counter只计数硬链接
多个文件名可能指向同一个inode!目录文件中的数据包括目录内的文件名和inode。
硬链接会指向同一个inode,所以只有当所有硬链接和源文件删除时,系统才会彻底删除文件。
软链接(符号链接)是创建新的文件和inode,文件内容是另外文件的路径。可删除文件软链接单独存在,只是无法寻到文件。
求n级索引可存储最大文件大小:
先计算一个物理盘块可以存储n个地址;m级就一共可存储nm个地址,一个地址可存储文件大小为一个磁盘块的大小v,那么最大文件的大小就是v*nm
文件共享:文件共享支持多用户合作。多用户分为用户ID、组ID来控制权限。
一致性语义:规定了多个用户如何访问共享文件
Unix文件系统:一个用户对已打开的文件写入,对于打开同一个文件的其他用户立即可见;多用户共享文件的当前位置指针,一个用户前移指针,会影响所有共享用户。
Andrew文件系统:一个用户对已打开的文件写入,对于打开同一个文件的其他用户,不是立即可见;一旦文件关闭,对其所做的修改只能被后来打开的会话可见,已打开的会话不可见。
不可变共享文件语义:文件一旦被创建者声明为共享,就不能被修改。
保护:
文件所有者/创建者应当能够控制:能对文件做什么(读、写...)
哪些人有哪些权限
访问类型划分:读、写、扩展、删除、执行、显示列表...
4.5 文件系统结构
文件系统的整体结构(目录+文件)都是存放在磁盘里。
⚫可以原地重写
⚫可以直接访问磁盘上的任意一块信息
最底层:对I/O设备的控制;设备驱动程序 + 中断处理程序;驱动程序可以提供基本的块访问命令接口。
基本文件系统:完成以物理块为单位的数据读写。发起的一般命令是对磁盘地址进行访问。
文件组织模块:知道文件的逻辑块和物理块。根据文件的类型分配空间以及文件的位置,该模块可以完成逻辑块地址到物理块地址的转换,也包含空闲空间管理模块。
逻辑文件系统:管理文件系统元数据。元数据包括文件系统所有结构数据,但是不包括文件内容。逻辑文件系统通过文件控制块(FCB)来维护文件结构。
对象和设备:文件管理系统管理的对象有3种:文件、目录、磁盘
文件系统实现:
引导控制块:包含从对应卷引导操作系统所需信息。
卷控制块:包含卷的详细信息,如块的数量、块大小、空闲块数量等。
目录结构:用于组织文件。
文件控制块FCB:每个文件都有一个控制块,包含文件的详细信息。
内存中的文件系统结构:
安装表:包含每个安装卷的信息
目录结构缓存
整个系统的打开文件表:包含每个打开文件的FCB副本及其他信息
每个进程的打开文件表:包含指向整个系统的打开文件表条目的指针。
虚拟文件系统:为了支持多种类型的文件系统,基于面向对象设计理念,提供了一套统一的文件系统接口。
4.6 文件分配方式
常用的文件在磁盘上的空间分配方法有三种:连续分配、链接分配和索引分配。
4.6.1 连续分配:将一个文件的信息存放在若干连续的物理块中。
特点:顺序存取速度快,所需的磁盘寻道次数和寻道时间最少。
优点:简单;支持随机访问
缺点:要求连续的存储空间;不能动态增长;不利于文件的删除和插入;外部碎片
4.6.2 隐式链接分配:每个磁盘块中留出一个指针地址,用来进行块间链接。
显示链接分配:把用于链接文件各物理块的指针,从每个物理块的块末尾中提取出来,显示地存放在内存的一张链接表中。
优点:简单,晚间只需要记录起始位置;空间管理浪费少;
缺点:不支持随机访问
4.6.3 索引分配:存放在若干不连续物理块中,系统为每个文件建立一个专用数据结构——索引表。
优点:支持动态增长;支持随机存取
缺点:索引表增加存储空间开销;操作一次访问索引表,二次访问文件信息,降低存取速度。
4.7 空闲空间管理
空闲空间管理方法列表:
空闲表法:适用于连续分配方式。
位示图法:如果块是空闲的,位为1;如果块是分配的,位为0。
空闲链表法:把文件存储设备上的所有空闲块链接在一起;分配程序从链头开始摘取所需要的空闲块,然后调整链首指针。当回收空闲块时,把释放的空闲块逐个插入链尾上。
按空闲区大小顺序/释放先后顺序链接:
在增加或移动空闲块时需对空闲块链做较大的调整,因而需耗去一定的系统开销。
按成组链接法,支持大量空闲块地址快速查找:
在第一个空闲块中存储n个空闲块地址,前n-1个确实为空;最后一个地址指向另外一个n空闲块地址。
组/计数:支持多个连续块的同时分配和释放,记录第一块的地址和紧跟其后的连续块的数量n。
空间图:日志+平衡树
4.8 备份和恢复
备份
策略:全备份:备份整个系统
系统备份:只备份系统目录和文件
数据备份:只备份用户数据
增量备份/差异备份:只备份增量更新内容
(文件和设备的管理机制)
4.9 磁盘
4.9.1 磁盘
磁盘驱动器可看作是一个一维的逻辑块的数组,逻辑块是最小的传输单位。
扇区0是最外面柱面的第一个磁道的第一个扇区。
映射顺序:先按磁道内扇区顺序,再按柱面内磁道顺序,最后按从外到内的柱面顺序来排序的。
磁盘链接:主机链接存储:通过本地IO端口访问存储
网络连接存储:数据网络远程访问,网络竞争通信
4.9.2 磁盘调度
磁盘访问时间 = 寻道时间(定位柱面)+旋转延迟(定位扇区)+传输时间(读写数据)
磁盘调度:当有多个读写请求到达时,决定执行哪个柱面的任务。
- FCFS先来先服务
优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
- SSTF最短寻道时间优先
选择处理距离当前磁头位置的寻道时间最短的请求。短作业优先,可能造成部分请求饥饿。
优点:算法性能好,平均寻道时间短
缺点:会产生饥饿现象
- SCAN电梯算法,来回扫描
磁臂从磁盘的一端向另一端移动;当到达另一端时,改变方向继续处理。
优点:性能较好,寻道时间短,不会产生饥饿现象
缺点:只有达到最边上的磁道时才能改变磁头移动方向;对于各个位置的磁道响应频率不平均
- C-SCAN循环扫描
磁臂从磁盘的一端向另一端移动;当到达另一端时,立即返回磁盘的开头。
优点:比起SCAN来,对于各个位置磁道的响应频率很平均。
缺点:只有到达最边上的磁道时才能改变磁头移动方向;另外,比起SCAN算法来,平均寻道时间更长。
- LOOK/C-LOOK调度
磁臂从磁盘的一端向另一端移动;只需要移动到一个方向的最远请求为止。
- 选择:
- 磁盘格式化
- 低级格式化:将一个原始磁盘划分扇区的过程。
- 正式存储数据之前的格式化:划分分区;逻辑格式化(在分区中创建操作系统。
- 逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构((如位示图、空闲分区表)。
Windows系统启动时,ROM内存中的Bootstrap程序启动;从磁盘第一个扇区调入主引导记录MBR(引导代码、磁盘分区表)到内存;找到引导分区,读取其第一扇区(引导扇区);加载系统组件。
4.9.3 RAID廉价磁盘冗余阵列
多个独立的物理硬盘按照不同的方式组合起来,形成一个虚拟的硬盘。
优势:RAID在容量和管理上的优势:易于灵活的进行容量扩展;“虚拟化”使可管理性极大的增强。
RAID在性能上的优势:“磁盘分块”技术带来性能的提高。
RAID在可靠性和可用性上的优势:通过冗余技术和热换提升了可靠性。
镜像冗余:磁盘镜像技术;提高磁盘的读性能。每个I/O操作(输入输出操作)都会在两个磁盘上执行,两个磁盘看起来就像一个磁盘一样。
校验冗余:保证数据可靠性;开销更小。根据冗余算法计算阵列中成员磁盘上数据的校验信息,将校验信息保存在其他的磁盘资源上。
RAID级别和适用范围:
RAID0:数据损失并不重要的程序;条带化:磁盘性能快
将程序分到多个磁盘上并行读写
RAID1(镜像模式):用于高可靠性和快速恢复的程序;
每个磁盘完整备份一次,容量减半
RIAD0+1,RAID1+0:用于性能和可靠性都重要的程序;
可用空间n/2
RAID2:汉明码将数据编码,分割为独立的位元并分别写入硬盘;
RAID3:数据块被分为较小的块并行传输到各个成员磁盘上,同时计算XOR校验数据存放到专用的校验磁盘上。
仅用一个磁盘存放校验和;字节交叉方式,奇偶校验和;
RAID4:同3,但数据块被分为更大的块
RAID5:独立存取的阵列方式,校验信息被均匀的分散到阵列的各个磁盘上。性能、数据安全和存储成本兼顾,存储大量数据首选。
将各个磁盘生成的校验数据分成块,分散存放在组成阵列的各个磁盘中,缓解校验数据存取时所产生的瓶颈问题。可用空间是n-1
读取扇区的平均时间 = 磁盘转半周的时间+寻道时间+传输时间+控制器延迟时间
5 设备管理
设备管理的主要任务之一是控制设备和内存或 CPU 之间的数据传送 。
5.1 设备管理
设备分类的目的:简化设备管理程序
分类:
按设备使用特性:
主要任务:设备管理是对计算机输入输出系统的管理。
主要功能:
1.5.2 I/O数据传送控制方式
(1)程序直接控制方式
在早期的计算机系统中没有中断系统,所以CPU和I/O设备进行通信、传输数据时,由于CPU 的速度远远快于I/O 设备,因此CPU 需要不断地测试 I/0 设备。这种控制方式又称为轮询或忙等。在设备输入数据期间,处理器通过循环执行测试指令不断地检测设备状态寄存器的值。
优点:简单
缺点:CPU的利用率低下;CPU和外设速度上的差异导致CPU大量时间处于等待和空闲状态
不能实现设备间的并行工作;因为CPU在一段时间内只能和一台外围设备交换数据信息。
适用:早期计算机系统,外围设备比较少的系统。如单片机系统。
(2)中断控制方式
当用户进程需要数据时,由 CPU 向设备控制器发出启动指令启动外设输入数据。在输入数据的同时,CPU 可以做其他工作。当输入完成时,设备控制器向 CPU发出一个中断信号,CPU 接收到中断信号之后,转去执行设备中断处理程序。设备中断处理程序将输入数据寄存器中的数据传送到某一特定内存单元中,供要求输入的进程使用,然后再启动设备去读下一个数据。
目的:减少程序直接控制方式中CPU等待时间;CPU 和I/O 设备间可以并行工作,CPU只需收到中断信号后处理即可。
缺点:控制器数据缓冲寄存器较小,完成一次I/O可能要多次中断驱动,发生中断次数较多;设备间并行操作,由于中断次数的急剧增加而造成CPU无法响应中断和出现数据丢失现象。
对各种高速外围设备,可以利用DMA和通道方式。
(3)DMA方式(直接存储访问方式)
基本思想:在外围设备和内存之间开辟直接的数据交换通路。在 DMA控制方式中,设备控制器具有更强的功能,在其控制下,设备和内存之间可以成批地进行数据交换,而不用 CPU 干预。
I/O控制器还包括传送字节数、内存地址寄存器等;DMA控制器可用来代替CPU控制内存和设备之间进行成批的数据交换;*除了在数据传送开始时需要CPU的启动指令和在结束时需发中断通知CPU 外,不再象中断控制方式那样需要CPU的频繁干涉。
优点:CPU不干预数据在内存和设备之间直接传送;
数据的传输控制完全由DMA控制器完成,速度快,适合高速成组数据传输;
并行性高,数据块在传输过程中,CPU与外设并行工作。
局限性:外围设备的管理和某些操作仍由CPU控制。对外围设备的管理和控制也就愈来愈复杂。
多个DMA控制器的同时使用显然会引起内存地址的冲突。
(4)通道方式
通道相当于一个功能单纯的处理机,专门用于处理I/0操作。通道有自己的运控部件和指令系统,但没有专门的内存,而是通过“周期窃取”方式与主机共享内存。
通道控制方式是一种以内存为中心,实现设备和内存直接交换数据的控制方式。
- 对比
通道和DMA:DMA中,数据的传送方向、存放数据的内存地址机长度由CPU控制,在通道方式中,这些由通道来进行控制。
DMA方式时每台设备至少一个DMA控制器,通道方式可以做到一个通道控制多台设备与内存进行数据交换。进一步减轻了CPU的工作负担和增加了计算机系统的并行工作程度。
中断和DMA:中断控制方式在每个数据传送完成后中断CPU,而DMA 控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU;中断控制方式的数据传送是在中断处理时由CPU 控制完成,而DMA 控制方式则是在DMA控制器的控制下完成。
5.3 中断技术
定义:计算机在执行期间,系统内发生任何非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
(1)禁止中断
禁止中断也称为关中断;CPU的处理机状态字PSW的中断允许位的设置也被称为开中断。
在有些情况下,尽管产生了中断源和发出了中断请求,但CPU内部的处理机状态字PSW的中断允许位已被清除,从而不允许CPU响应中断。
开中断和关中断是为了保证某些程序执行的原子性。
(2)中断屏蔽
在中断请求产生之后,系统用软件方式有选择地封锁部分中断而允许其余部分的中断仍能得到响应。
通过每一类中断源设置一个中断屏蔽触发器来屏蔽它们的中断请求而实现的。
中断分类:
根据中断源产生的条件,可把中断分为外中断和内中断。
外中断是指来自处理机和内存外部的中断,外中断在狭义上一般被称为中断。
内中断主要指在处理机和内存内部产生的中断。内中断一般称为陷阱(trap)。
各中断源的优先级在系统设计时给定,在系统运行时是固定的。而处理机的优先级则根据执行情况由系统程序动态设定。
区别:
5.4 缓冲技术
匹配外设与CPU之间的处理速度,为了减少中断次数和CPU的中断处理时间,在设备管理中引入了用来暂存数据的缓冲技术。
基本思想:空间换时间
- 单缓冲:在设备和处理机之间设置一个缓冲器。
- 双缓冲:解决两台外设、打印机和终端之间的并行操作问题。
- 多缓冲:把多个缓冲区连接起来组成两部分,一部分专门用于输入,另一部分专门用于输出的缓冲结构
- 缓冲池:把多个缓冲区连接起来统一管理,既可用于输入又可用于输出的缓冲结构。
由于缓冲器是临界资源,在使用缓冲区时都有一个申请、释放和互斥的问题。
高速缓存与缓冲区
高速缓存是可以保存数据备份的高速存储器。访问高速缓存要比访问原始数据更高效,速度更快。虽然高速缓存和缓冲区均介于一个高速设备和一个低速设备之间,但高速缓存并不等价于缓冲区,它们之间有着很大的区别。
高速缓存上放的是低速设备上的某些数据的一个备份,也就是说,高速缓存上有的数据,低速设备上必然有;而缓冲区中放的则是低速设备传递给高速设备的数据,这些数据从低速设备传递到缓冲区中,然后再从缓冲区送到高速设备,而在低速设备中却不一定有备份。
引入高速缓存是为了存放低速设备上经常要被访问到的数据的备份,这样一来,高速设备就不需要每次都访问低速设备,但是如果要访问的数据不在高速缓存中,那么高速设备还是需要访问低速设备;而缓冲区是为了缓和高速设备和低速设备间速度不匹配的矛盾,高速设备和低速设备间每次的通信都要经过缓冲区,高速设备不会直接去访问低速设备。
5.5 Spooling( 假脱机)技术
是低速输入输出设备与主机交换的一种技术,核心思想是以联机的方式得到脱机的效果。低速设备经通道和外设在主机内存的缓冲存储器与高速设备相联,该高速设备通常是辅存。为了存放从低速设备上输入的信息,在内存中形成缓冲区,在高速设备上形成输出井和输入井,传递时信息从低速设备传入缓冲区,再传到高速设备的输入井,再从高速设备的输出井传到缓冲区,最后传到低速设备。
特点:提高了 I/O速度;设备并没有分配给任何进程;实现了虚拟设备功能;SPOOLing 除了是一种速度匹配技术外,也是一种虚拟设备技术。
(应用这些知识和技术解决一些计算机系统问题)