内存管理,外存(文件/磁盘)管理,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等待缓冲区写满)
  • 循环缓冲区:将多个大小相等的缓冲区连接起来
  • 缓冲池:由系统中的公用缓冲区组成

 

 

 

 

 

posted on 2020-11-12 23:03  呵呵哒9876  阅读(1234)  评论(0编辑  收藏  举报