第四章 存储器管理
summary:In recent years,with the development of computer technology,system software and application software have expanded rapidly in terms of types and functions.Although the storage capacity has been expanding continuously,it still cannot meet the needs of modern software development.Thus,memory remains a valuable and scarce resource.How to manage it effectively not only directly affects the utilization rate of memory,but also has a significant impact on the system performance.The main object of memory management is memory.
*存储器的层次结构
存储器的三层结构,CPU寄存器(寄存器),主存(高速缓存,主存储器,磁盘缓存),辅存(固定磁盘,可移动存储介质);
处理机都是从主存储器中取得指令和数据,将取得指令放入指令寄存器中,数据放入数据寄存器中;寄存器存放操作数,作地址寄存器加快地址转换速度;高速缓存用以缓和内存与处理机之间的矛盾;磁盘缓存用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数
*程序的装入和衔接
编译程序产生的目标模块->链接程序->装入模块->装入程序->内存
程序的装入
绝对装入方式,程序经编译后,要知道程序将驻留在内存的什么位置;可重定位装入方式,装入时根据所定位的内存地址去修改每个重定位地址项,添加相应偏移量;动态运行时的装入方式,把地址转换推迟到程序真正要执行时才将相对地址转换为绝对地址
程序的链接
静态链接方式,在生成可执行文件时进行,在目标模块中记录符号地址,而在可执行文件中改写为指令直接使用的数;装入时动态链接,将用户源程序编译后,在装入内存时,边装入边衔接;运行时动态链接,凡在执行过程中未被用到的目标模块都不会被调入内存和被链接到装入模块上,这样不仅可加快程序的装入过程,而且可节省大量的内存空间
*连续分配存储管理方式
单一连续分配,只能用于单用户,单任务的操作系统;固定分区分配,把内存分为一些大小相等或不等的分区,每个应用进程占用一个或几个分区,操作系统占用一个区;动态分区分配,可变式分区中的分区的大小和分区的个数都是可变的,根据作业的大小和多少动态地划分
固定分区 存在内碎片,分区总数固定,限制并发执行程序数,分区表---记录分区的大小和使用情况
动态分区 存在外碎片,空闲分区表---为尚未分配的分区设置表项(分区号,分区大小,分区地址,状态),空闲分区链---实现空闲分区的分配和链接
基于顺序搜素的动态分区分配算法
首次适应算法FF,空闲分区表(空闲区链)中的空闲分区要按地址由低到高排序,保留了大分区,保留了高址部分的大空闲区,但低地址区间留下难于使用的空闲分区且每次从低址开始查找;玄幻首次适应算法NF,从上次找到的空闲区的下一个空闲区开始查找,空闲分区分布得更均匀,查找开销小,但缺乏大空闲分区;最佳适应算法BF,空闲分区按从小到大排序,外碎片变得尽量小,使得剩余空闲最小;最坏适应算法WF,从所有未分配的分区中挑选最大的且大于和等于作业大小的分区分给要求的组员;空闲分区按大小由大到小排序,剩余的空闲区最大,缺乏大空闲分区
基于索引搜素的动态分区分配算法
快速适应(quick fit)算法 根据所需内存长度,在管理索引表中找到最适合的空闲链表;伙伴系统(buddy system) 已分配分区或空闲分区大小均为2的k此幂,1024表划分申请与回收;哈希算法 建立哈希函数,构造一张以空闲分区大小未关键字的哈希表。表中每一项对应一个空闲分区链表的头指针
动态可重定位分区分配
紧凑,用户程序在内存中发生了改变需重定位;动态重定位,动态运行时装入,地址转化在指令执行时进行,需获得硬件地址变换机制的支持,处理机提供相对地址,存储器提供重定位寄存器;动态重定位分区分配算法,在动态分区分配算法的基础上增加了紧凑
*对换
系统把所有的用户作业存放在磁盘(外存)上,每次只能调入一个作业进入内存,当该作业的一个时间片用完时,将它调至内存的后备队列山等待,再从后备队列调入另一个作业进入内存运行
对换的类型 整体对换,处理机中级调度实际上就是存储器的对换功能,解决内存紧张问题;页面对换,是实现请求分页和请求分段存储管理的基础
进程的换出(挂起)与换入(激活) 1.选择被换出的进程,选择阻塞状态或睡眠状态的进程,若有多个,则选择优先级最低的换出进程;2.进程换出过程,只能换出非共享的程序和数据段,申请对换空间,申请成功后启动磁盘,将进程的程序和数据传送到磁盘的对换区上
查看PCB集合中所有进程状态,找出就绪状态但已换出的进程,若有多个,则选择其中已换出到磁盘上时间最久的进程作为换入进程,并申请内存
*分页存储管理方式
无须紧凑,便可充分地利用内存空间,三种离散分配:分页存储管理方式,分段存储管理方式,段页式存储管理方式
页面:分页存储管理将进程的逻辑地址空间分成若干个页,为各页加以编号从0开始;地址结构:页号P+位移量W;页表:实现从页号到物理块号的地址映射
两级和多级页表 两级页表对页表施行离散分配的方法,虽然解决了对于大页表无需大片连续存储空间的问题,但并未解决较少的内存空间去存放大页表的问题;
对于64位的机器,不适合用二级页表
反置页表 减少页表占用内存空间,每一个物理块(页框)设置一个页表项,并按物理块排序;根据进程的标识和页号,检索反置页表。若匹配,则该页表项中的序号i标识该页所在的物理块号
*分段存储管理方式
分段系统的基本原理 每个段都从0开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因此各段的长度并不相等。在系统中,类似于分页系统,需为每个进程建立一张段映射表,即段表,村芳在一组寄存器中,以利于提高转换速度;
分页和分段的区别 1.页是信息的物理单位;2.页的大小固定且由系统决定;3.分页用户程序地址空间是一维的;分段则段是信息的逻辑单位,包含一组意义相对完整的信息,段的长度不固定,分段系统中,用户程序的地址空间是二维的,既要段名,又要段地址
信息共享 段是信息的逻辑单位,因此分段系统的一个突出的优点是易于实现段的共享。即允许若干个进程共享一个或多个段,而且对段的保护也十分简单。在分页系统中,虽然也能实现程序和数据共享
本章习题小结
4.1 为什么要配置层次式存储器?
设置多个存储器可以使存储器两端的硬件能并行工作;采用多级存储结构,特别是Cache技术,是减轻存储器带宽对系统性能影响的最佳结构方案;在微处理机内部设置各种缓冲存储器,减轻对存储器存取的压力。增加CPU中寄存器数量大大缓解对存储器压力。
4.7 为什么要引入动态重定位?如何实现?
在程序执行过程中,每当访问指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址,引入了动态重定位;具体实现方法实在系统中增加一个重定位寄存器,用来装入程序在内存中的启示地址,程序执行时,真正访问的内存地址时相对地址与重定位寄存器中的地址相加之和,从而实现动态重定位。
4.9 在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况?
回收内存的时候,我们把将要回收的内存区的首址拿到空闲分区链表中比对找出插入点(按照空闲分区链的构建算法),如果将要回收的内存和插入点的左、右或者两者都相邻,那就把相邻的区合并成一个区,去过不相邻那就单独作为一个区插入进去,并修改相关的数据结构中的值。
4.21 在分页系统中时如何实现地址变换的?