内存管理,外存(文件/磁盘)管理,IO管理
第三章 内存管理
3.1,多层次的存储系统:缓和存储器的访问速度与处理机运行速度差异大的问题。
- CPU寄存器 速度与处理机相当,很贵
- 主存(内存)
高速缓存 缓和处理机与内存访问速度不匹配。
主存储器
磁盘缓存 缓和内存与外存(磁盘IO)速度不匹配。
- 辅存
3.2,程序的装入与连接:
3.2.1,程序在系统上运行的步骤:
①编译:将源程序编译成若干目标模块
②连接:将一组模块与所需库函数连接形成装入模块
③装入:将装入模块装入内存--将逻辑地址转化为逻辑地址
- 绝对装入
- 可重定位装入:早期批处理系统
- 动态运行时装入:【重定位寄存器】,现代操作系统,
3.3,内存管理的功能:
①内存空间的分配与回收
②内存空间的扩充(虚拟内存)
③地址转换:逻辑地址->物理地址
- 绝对装入
- 可重定位装入
- 动态运行时装入
④存储保护:
- 保证各进程在自己内存空间运行,不会越界。
- 方式:<1>上下限寄存器<2>利用重定位寄存器,界地址寄存器。
3.4,物理内存分配:
3.4.1,连续地址分配与管理:
①单一连续分配:单道程序,单任务操作系统。
②固定分区算法:(多道程序系统)
将整个用户空间划分若干固定大小区域,每个区域只装入一道作业。【不产生外部碎片,产生内部碎片】
③动态内存分配:--可变分区分配。
<1>数据结构:空闲分区表,空闲分区链。
<2>内存的分配与回收:
- 分配:若一个分区大小>=需要大小,则此空闲分区可分配给调用者,剩余空间如果小于事先规定的最小切割单位,
则不切割。剩余空间放回空闲链。
- 回收:因为分配时存在分割,避免内存碎片化,回收时要合并
- 若回收分区与前一个空闲分区相邻,合并。
- 若回收分区与后一个空闲分区相邻,合并。
- 若与前后空闲分区都相邻,合并。
④动态分区算法:
- 顺序搜索:
<1>首次适应算法:
- 空闲分区按地址递增排列
- 按空闲链首地址遍历,遇到第一个能容纳的分区就分配
- 倾向于用内存地址部分
<2>循环首次适算法:
- 每次不从空闲链首开始遍历,从上一次分配分区的以一个分区开始遍历。
- 缺乏大分区
<3>最佳适应算法:
- 将链或表按从小到大递减方式排序
- “最佳”指所有满足分配分区(空间>=所需空间)中空间最小的。
- 留下很多难以利用的碎片
<4>最坏适应算法:
- 将链或表按从大到小排序
- 从满足分配的分区中挑一个最大的。
- 大进程(需要内存多的)不友好。
- 索引分配:
<1>快速适应算法:
- 又称为分类搜索法,根据分区大小划分不同的空闲列表,分配时先找到能容纳的最小空闲列表,再区列表中
找分区。
- 空间换时间
3.4.2,非连续物理内存分配:
①分页式储存管理:
<1>结构
- 页可以装入不连续的物理块中
- 页面大小要适中,太小--页表过长,换页频繁。太大--页内碎片。(2的幂次方,1K-8K)
- 地址结构: 【页号|偏移量】
- 页表:记录页号和内存中的物理块号。【页表是顺序结构的(数组),页号即下标表示了,逻辑地址/页面大小】
<2>地址变换:
将逻辑地址转换为逻辑地址,通过逻辑地址计算出页号,从页表中找到快号,物理地址:块号+偏移量。
<3>TLB:快表,具有块表(高速缓存,)的地址转换结构。
<4>多级页表:所管理的内存大,页表过长,无够大连续空间存放页表,对页表进行分页。
②分段式储存管理:
<1>结构:
- 段:连续空间,不同段分散在不连续的地址块。根据模块将程序分为若干段,每段段内地址从0-段长-1。
- 地址结构:【段号|段内地址-偏移量】
- 段表:记录段长和和段起始地址。
- 寻址方式:根据段号在段表中找到起始地址,判断有无越界,加上偏移量,得到物理地址。
<2>与分页式存储的区别:
- 页是信息的物理单位,实现内存的离散分配,减少碎片,完全是系统行为。
段是信息的逻辑单位,更好的满足用户需求。
- 页的大小是固定的,由系统决定,段长是不固定的,决定于程序。
- 分页的用户程序地址空间是一维的,分页是系统行为。分段的用户程序地址空间是二维的,需给出段号和偏移量。
- 分段的用户程序容易实现信息的共享和保护。
③段页式存储管理:
<1>先对程序分若干个段,再对每个段分页,逻辑地址【段号|页号|页内地址】
<2>段表:【段号|页表大小|页表始址】
3.4,虚拟存储器:
- 具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统,其逻辑容量由内存容量和外出容量之和所决定
其运行速度接近于内存速度,而每位成本却又接近于外存。
- 传统存储管理方式的特征:
①一次性:作业必须一次性全部装入内存后才开始运行。
②驻留性:一旦作业装入内存,会一直驻留在内存,直至作业运行结束。
- 局部性原理:
①时间局部性:如果执行了程序中某条指令,不久之后这条指令很可能再次执行。
某个数据访问,不久后很可能再次被访问。(因为程序中有大量循环)
②空间局部性:一旦程序访问了某个存储单元,不久之后其附近的存储单元很可能被访问。(因为很大数据是连续存放的)
③局部性原理的应用:
<1>高速缓存技术思想,将近期会频繁访问的到的数据放到更高速的存储器中,暂时用不到的数据放在更低的存储器中。
<2>TLB快表,
- 特性:
①多次性:一个作业的数据和程序允许分成多次调入内存。
②对换性:一个作业中的程序的数据,无需在作业运行时一直常驻内存,可换进换出
③虚拟性:从逻辑上扩充内存容量
- 请求分页式存储管理方式:
①请求页表机制:【页号|物理块号|状态|访问字段|修改为位|外存地址】
状态标识该页是否在内存,访问字段记录一段时间内被访问次数,修改位,若被修改换出内存时需要写回外存。
②缺页中断机制:
- 当访问某页时,若该页不在内存中,产生缺页中断。
- 中断处理:将目标页调入内存或换出页面。
- 缺页中断为内中断
- 一条指令可能产生多次缺页中断
③地址转换机构
- 访问块表,命中则分获取物理地址
- 未命中,查页表,在页表,则计算物理地址
- 未查到,缺页中断,进行相应置换。
- 页面置换算法:
①最佳置换算法:理论上的,无法实现,所选取的淘汰页面将是以后永远不使用的。
②先进先出置换算法FSFO:最直观,性能最差,应用极少
③LRU,(最近最久未使用)算法:赋予每个页面对应页表项中,用访问字段记录该页面自上次被访问以来经历的时间t,当需要淘汰时,
选一个最大的t淘汰。
④Clock置换算法,将所有页面,当页面被分为后,访问位设1,置换算法选择淘汰页时,遍历队列检测访问位,若是0,则换成。
若是1,将其置0,循环遍历直到找到0;
最多经历两轮即可找到淘汰页。
⑤改进Clock置换算法:增加一个因素:置换代价。将一个页面换出时,若页面数据已修改,需要重新写回外存。
访问位A,修改位:M
<1>A=0,M=0,最近未被访问,也没被修改,最佳淘汰页。
<2>A=0,M=1,表示最近未被访问,被修改,并不是很好的淘汰页
<3>A=1,M=0,最近已被访问,未被修改,该页可能再被访问。
<4>A=1,M=1,最近已被访问,已被修改,该页可能再被访问。
【1】遍历队列,寻找第一类页面,找到则换出。
【2】1未找到,则进行第二轮,寻找第二类,并将扫描过的页面的访问A该为0,找到则换出
【3】2未找到,重复第一步,若失败,重复第二步,这一步一定能找到A=0,M=1的页面。
最多经过4轮能找到。
第四章 外存管理(磁盘管理+文件管理)
4.1,相关名词:
- 磁盘:外存的主要构成,存放大量文件,磁盘IO速度高低,直接影响系统性能。
- 盘面:磁盘设备(硬盘)中包括多个物理盘片,每个盘片有一个或两个盘面。
- 磁道:每个盘面有若干磁道,磁道间有“间隙”Gap。
- 柱面:所有盘面的相同位置磁道构成的一个住面。
- 扇区:每条磁道又被从逻辑上划分成若干扇区,一个扇区称为一个盘块或数据块。
4.2,磁盘访问时间:
①寻道时间:将磁头移到指定磁道所花费的时间。
②旋转延迟时间:将指定扇区移动到磁头下面的时间,不同磁盘旋转速度不一样。
③传输时间:指把数据从磁盘读出或向磁盘写入所经历的时间,--和磁盘旋转速度有关。
- 其中①和②占了绝大多时间。
4.3,磁盘调度算法:
- 为了减少对文件的访问时间,由于磁盘访问时间主要花在寻道上,即调度算法目的是使磁盘平均寻道时间最短。
①先来先服务FCFS:
②最短寻道时间优先SSTF:保证每次寻道时间是当前队列中最短的,但无法保证平均寻道时间最短。
- 贪心,只选择眼前最优的,可能导致饥饿。
③扫描算法SCAN:最短寻道时间优先实际上是一种优先级算法,优先级低的进程易饥饿。
- 扫描算法不仅考虑下一个访问磁道与当前磁道的距离,还考虑磁头当前的移动方向。如:当前磁头正由里向外移动
应当是再本磁道外,且距离最近的优先。扫描到最外再向里扫描。
- 电梯调度算法。
-:对各个部分磁道响应频率不同,边缘部分,折返时又会遍历一遍,而中部的遍历时间相对较久。
④Lock算法:扫描算法中,磁头每次要遍历所有磁道,当像一个方向遍历时,队列中已经没有该方向上磁道的访问了,这时磁头就可以转向另一个方向遍历了。
Lock算法(观望)就是解决这个问题的。
⑤循环扫描算法C-SCAN:解决SCAN算法中对各个磁道响应频率不同。规定磁道只沿一个方向移动,到达最端后直接返回起点遍历。
⑥ C-Look算法:只有磁头移动的方向上没有请求了,直接返回起点。
4.4,磁盘存储器(外存)管理:
4.4.1,外存分配方式(外存的组织/管理方式):
①连续分配方式:将每一个文件分配一组相邻的盘块,通常是同一个磁道上。读写时不必移动磁头。
- 顺序文件结构--顺序文件
+:易访问,顺序访问速度快
-:<1>内存碎片化,<2>需要预知文件大小, <3>删除文件不灵活 <4>不能动态增长文件。
②连接分配:将文件装入多个离散的盘块,再通过连接指针连接成链表。
- 隐式连接:文件控制块 FCB中包含指向第一个和最后一个盘块的指针。每个盘块有指向下一盘块的指针。
--只适合用于顺序访问,即链表的随机访问问题。
- 显示连接:建立一张连接表,将各物理块的指针都放入,整个磁盘只设置一张。每个文件的第一个
盘块地址作为文件地址放入FCB中。找第i块时,在FAT中遍历找到其物理块号,再去访问。
<1>FAT技术(文件分配表),引入卷(CDEF盘,每个)
<2>MFT
③索引分配:显示连接虽然解决了,离散分配随机访问的问题,但也带来了新问题:<1>不支持高效直接存取。<2>FAT占用较大空间
- 单级索引:为每个文件分配一个索引块,顺序存放该文件用到的的盘块号,FCB中存放文件索引块的地址,不用将FAT调入内存,文件较大时适合。
+:<1>支持直接访问,如某文件第i块,在索引块中找到盘块号得到物理地址即可。<2>无内存碎片。
-:小文件(只占10几个块以内)采用索引分配(一个块可以存放数百个块号)
- 多级索引:每一个索引盘块,容纳的盘块号数量有限,大文件可能需要很多盘块号。---多级索引。
+:大大加快文件查找速度。
-:<1>所需启动磁盘的次数随索引级数的增加而增多,<2>实际情况:小文件居多,大文件较少,采用多级索引分配效果不理想。
- 增量式索引分配:对小,中,大,特大文件,采用不同分配方式。若盘块大小为1~4KB。
- 对于小文件(少于10个盘块1~10K,4~40K):将所有盘块地址都放入FCB--直接寻址。
- 中等文件(11~256K,5~4MB):可采用单级索引分配--一次间址。
- 大型文件:采用多级索引,--二次/多次间址。
4.5,文件管理:
4.5.1,文件分类
①系统文件。用户文件。库文件。
②源文件(ASCII或汉字)。目标文件(由源文件编译生成)。可执行文件.exe
③只执行文件。只读文件。读文件。
④普通文件。目标文件。特殊文件(指系统中各类IO设备,为统一管理,系统将所有IO设备视为文件。
4.5.2,磁盘分区:文件区+目录区。
①文件目录:一种数据结构,
- 功能:<1>按名存取<2>提高检索速度<3>文件共享<4>允许文件重名(不同路径下)
- 为构建目录,需要对文件设置用于描述和控制的文件的数据结构。FCB
②FCB文件控制块:包含文件基本信息:<1>文件名<2>物理位置<3>类型,大小<4>文件结构
③索引节点:改进FCB,提高索引搜索效率。
- 存储除文件名外的所有的信息。
- 索引时用到的信息较少,不用将目录加载如内存
- 目录中只含有文件名和指向文件索引节点的指针。
4.5.3,文件的逻辑结构:
- 无结构文件:由一系列二进制流或者字符流组成的“流文件”。.txt
- 有结构文件:由记录组成。如excel,sql。记录又可分为定长记录,变长记录。
<1>顺序文件。<2>索引文件。<3>索引顺序文件。
①顺序文件:
- 链式存储:可变长/定长记录都不能实现随机存取。
- 顺序存储:
可变长记录:无法实现随机存取
定长记录:可实现随机存取
串结构:无法快速找到某关键字对应的记录。
顺序结构:可以快速找到某关键字对应的记录。
②索引文件:解决可变长记录文件查找慢的问题。
- 每个文件建立一张索引表,索引表表项为文件中的记录。
- 适用于对信息的及时处理要求比较高的场合。
- 可以对不同数据项建立不同索引表。
③索引顺序文件:
- 让每一个记录对应一个索引表表项太过浪费。
- 让一组记录对应一个索引表项。
- 多级索引。
4.5.4,文件的物理结构:外存中分配/组织方式
①连续分配:每个文件在磁盘上占用一组连续的块。
+:<1>读写速度快,磁头移动距离短。<2>可随机访问
-:<1>文件扩展不方便,(如文件后无足够大连续空间只能移动位置)<2>外存碎片。
②连接分配:
- 隐式连接:FCB中有记录起始块号和结束块号。
- 每个块有指向下一块的指针。(链表不支持随机访问问题)
+:方便拓展,不产生碎片
- 显式连接:维护文件分配表FAT,表项把块号和下一块块号记录下来。
- 一个磁盘维护一张FAT,开机后,FAT读入内存并常驻内存。
+:支持随机访问。不产生碎片
-:维护FAT需要空间。
③索引分配:允许文件离散的分配在磁盘中,为每个文件建立一张索引表,记录文件的各个逻辑块对应的物理块号。记录索引表的盘块叫索引块
- FCB中存放索引块的地址。
+:支持随机访问,拓展方便,
-:索引需要一定空间
- 若文件太大一个所有块存不下:
<1>连接方案:每个索引块有指向下一个索引块的地址
<2>多级索引
<3>混合索引:避免小文件情况下浪费空间。
4.6,文件存储空间管理:磁盘空闲区管理:
4.6.1:存储空间的划分:
①文件卷:(逻辑卷概念)CDEF盘,
- 一个文件卷可以由多个物理磁盘组成。
- 一个物理磁盘可以划分为多个卷。
②每个卷可分为
目录区:存放:FCB,索引节点,空闲表,超级块等
文件区:存放文件。
4.6.2,空闲分区管理方法:
①空闲表法:记录每一个连续空闲分区的起始块号和块数,
- 适用于文件文件物理结构为连续分配方式
- 分配与回收时要合并分区,与内存分配类似。
②空闲链表法:
- 空闲盘块链:以盘块为单位链起来。一个链表。
+:分配回收简单
-:链很长
- 空闲盘区链:将空闲区链成一个链,盘区是相邻的空闲盘块链(标明盘区大小)
- 分配与回收时要合并分区,与内存分配类似
③位示图法:用一位二进制,表示一个盘块的使用情况0-空闲,1-已分配
- 用一个二位数组表示磁盘区的盘块分配情况。
④成组连接法:linux系统采用。
- 文件卷的目录区中设置一个超级块(链表头,类似索引块),系统启动会将超级块读入内存。
- 超级块中记录了下一组空闲盘块的个数和盘块号。
- 类似空闲盘区链,只是规定每个链的长度,如100 个,每个链中的盘块是离散的
- 盘块的分配与回收采用头插法。
第五章 IO管理
5.1,IO系统功能:
①方便用户使用IO设备
②提高CPU和IO设备的利用率
③用户在共享设备时提高方便
5.2,IO设备分类
①按使用特性:
- 存储设备:也称外存/辅存
- IO设备,键盘,鼠标,扫描仪,视频摄像,打印机,绘图仪
- 网络通信设备
②按传输速率:
- 低速:键盘
- 中速:打印机
- 高速:磁带机,光盘机
5.3,IO控制器
- 接收识别CPU发出的命令
- 向CPU报告识别状态
- 数据交换
- 地址识别
5.4,IO控制方式:控制IO设备的读和写
①程序直接控制方式:
- CPU向控制器发出指令,启动设备,状态:未就绪
- (启动完成之前)轮询其他控制器状态,就绪了就可以传送数据,将数据读入CPU寄存器
- 启动完成,报告自己状态。(已就绪)
- 发现设备已就绪,将数据读入CPU寄存器
+:实现简单
-:CPU干预频繁,CPU与IO设备串行工作,利用率低
②中断驱动方式
- 由于IO设备速度慢,CPU发出读写命令后,将等待IO进程阻塞,先切换其他进程执行。当IO完成后,控制器发出一个中断信号,CPU检测中断信号
进行进程调度,处理等待IO进程。
- CPU执行完每个指令都会检查中断
- 中断处理耗时,太频繁降低利用率。
+:CPU可以与IO并行,降低CPU干预
-:频繁中断会消耗CPU时间
③DMA方式:直接存储器方式
- 数据传送以块为单位
- 数据的流向从设备直接放入内存,或内存到设备
- CPU干预少,只在开始和结束时干预
+:以块为单位传输数据,CPU干预进一步降低
-:CPU每发出一条指令,只能读/写一个或多个连续的块。离散的数据块要多条指令
④通道方式:--一种硬件,“低配CPU”专门处理IO的处理器,能识别通道指令
- CPU干预低,一次给通道一组读写任务,完成后才中断,请求CPU干预
- 数据传输单位:一组数据块
+:CPU通道,IO设备可并行工作,资源利用率高。
-:实现复杂,需要专门的硬件支撑
5.5,IO系统的层次结构:
①用户层IO软件 实现与用户交互的接口,用户可直接调用该层提供与IO相关的库函数,对设备进行操作
②设备独立性软件 用于实现用户程序与设备驱动器的统一接口
③设备驱动程序 与硬件直接相关,用于具体实现系统对设备发出的操作指令
④中断处理程序 用于保存被中断进程的CPU环境
⑤硬件
5.6,IO核心子系统功能:
①假脱机技术:SPOOling
- 脱机技术:用外围控制机和磁带缓解纸带与CPU之间的速度差
- 假脱机:用软件的方式模拟外围控制机模拟假脱机技术
- 实现共享独占设备
②设备分配与回收
<1>设备:
- 独占设备:打印机
- 共享设备:磁盘
- 虚拟设备:SPOOLing技术的共享打印机
<2>分配方式:
- 安全分配方式:一个进程一次只能使用一个设备,破坏“请求保持条件”,不死锁。
分配IO的进程将阻塞,CPU与IO设备只能串行工作
- 不安全分配方式:一个进程可以使用多个设备
效率高,但可能会引发死锁
- 静态分配:进程运行前为其分配所需的全部资源,不满足则阻塞,满足则运行结束释放所有资源
不发生死锁
- 动态分配:动态申请设备资源。
③通道技术
- 一个通道可以控制多个控制器
- 一个控制器可控制多个设备
5.7,缓冲区管理:
- 缓冲区:一个内存区域,可有专门的硬件组成,也可利用内存作为缓冲区。
- 缓冲区作用:
<1>缓和CPU与IO设备之间速度不匹配的矛盾
<2>减少CPU的中断频率,放宽CPU中断响应时间限制
<3>解决数据粒度不匹配问题
<4>提高CPU与IO设备之间的并行性
- 单缓冲:在内存中分配一个缓冲区
- 双缓冲:交替使用,(防止出现内存或CPU等待缓冲区写满)
- 循环缓冲区:将多个大小相等的缓冲区连接起来
- 缓冲池:由系统中的公用缓冲区组成