重定位
重定位定义
把在装入时对目标程序中的指令和数据地址的修改过程称为重定位
静态重定位
若地址变换是在进程装入时一次完成的,以后不再改变,故称为静态重定位。
动态重定位
装入程序在把装入模块装入内存后,并不立即进行地址变换,而是把地址变换推迟到程序真正要执行时才进行。这种方式需要重定位寄存器的支持。
如何实现动态重定位?
要在不影响指令执行速度的同时实现地址变换,必须有硬件地址变换机构的支持,即须在系统中增设一个重定位寄存器,用它来存放程序在内存中的起始地址。程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的。
动态分区分配算法思想
首次适应
将空闲分区按地址递增次序链成队列,分配时从链首开始查找第一个满足要求的空闲分区,从链中摘下分区,予以分配。
优点:在高地址空白区中保持较大空白区。
缺点:低址部分留下很多难以利用的,很小的空闲分区(碎片);而每次从低址查找,开销大。
循环首次适应
思想:不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找。
方法:设置一个查寻指针,指示下一次起始查寻的空闲分区,将空闲分区组成环状队列,按循环顺序寻找空闲分区。
优点:小空闲分区均匀分布。
缺点:缺乏大的空闲分区。
最佳适应
将空闲分区由小到大排成空闲分区链,寻找时总是从最小的空闲分区开始,找到第一个合适的分区。
优点:最佳地利用分区。
缺点:碎片过多。
最坏适应
将空闲分区由大到小排成链表,每次都从最大的空闲分区开始分配。
优点:避免最佳适应算法中的碎片问题,查找效率高。
缺点:缺少大的空闲分区。
快速适应
将空闲分区按容量组织成多个链表,相同大小空闲分区链成一个空闲链表,内存中设置一张索引表,记录每种链表头指针,根据进程的长度,寻找最小空闲分区链表予以分配(不分割分区)。
优点: 查找效率高。
缺点:分区归还主存,时间开销大。
紧凑技术
紧凑技术是指通过移动内存中的作业位置,把原来多个分散的小分区拼接成一个大分区的方法。
对换技术
是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。
对换是改善内存利用率的有效措施 ,也可以直接提高处理机的利用率和系统的吞吐量。
分页存储管理的基本方法
页面与物理块
将一个作业的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等
页面大小应是2的幂,通常为512 B~8 KB。
把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框(frame), 加以编号,如0#块、1#块等等。
在为进程分配内存时,以页为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
页表
系统为每个进程建立了一张页面映射表(页表),记录了进程每个页在内存中对应的物理块号。
段页式存储管理的基本方法
基本原理
作业空间:先将用户程序分为若干个段,并为每个段赋予一个段号,再把每个段分成若干页。
内存空间:以页大小划分为若干物理块。
关键思路:每个段按分页方式进行管理,每个段都需要一个页表。
优点:这样段页式系统既具有分段系统的便于实现,分段可共享,易于保护,可动态链接等一系列优点,又能像分页系统那样很好解决内存的外部碎片问题
地址变换过程
系统配置一个段表寄存器,存放段表始址和段长;
进行地址变换时,首先将段号与段长比较,检查是否段号越界;
利用段表始址和段号求出该段所对应的段表项在段表中的位置,从中得到该段页表始址;
利用逻辑地址中的段内页号来获得对应页表的页表项位置,从中读出该页所在的物理块号;
最后利用物理块号和页内地址来构成物理地址。
分页与分段的主要区别是什么?
页是信息的物理单位,引入分页是为了提高内存利用率。段则是信息的逻辑单位,引入分段是为了满足用户的需要。
页的大小固定且由系统决定,而段的长度却不固定, 决定于用户所编写的程序。
分页系统逻辑地址空间是一维(页号和页内地址是一种规律性),分段逻辑地址空间是二维(段号 段内地址)。
一维逻辑地址中的页号和页内地址