第4章 存储器管理
存储部件的层次
**********************
* Cpu寄存器 *
* 高速缓存 *
* 主 存 *
* 磁盘缓存 *
* 磁 盘 *
* 可移动存储介质 *
**********************
1、程序的装入和链接
程序进内存的一般过程:
1)编译compiler
2)链接link
3)装入load
地址的概念
逻辑地址(相对地址,虚地址):用户的程序经过汇编或编译后形成目标代码,目标代码中的指令地址是相对地址。
物理地址(绝对地址,实地址):内存中存储单元的地址;物理地址可直接寻址被执行。
程序装入中的地址处理
1)绝对装入方式(absolute loading):
逻辑地址 ====== 物理地址
逻辑地址——重定位——物理地址:
2)静态可重定位装入方式(relocatable loading mode)
3)动态运行时(重定位)装入方式(dynamic run-time loading)
不同的程序链接装入方式(使用内存的时机)
静态链接:
装入运行前将多个目标模块及所需库函数链接成一个整体,以后不再拆开。
装入时链接:
装入内存时,边装入边链接的链接方式。
运行时链接:
对某些目标模块的链接,在执行中需要该目标模块时,才对它进行链接。
连续分配方式
(1)单一连续分配
系统区:仅提供给OS使用,通常放在内存低址部分
用户区:除系统区以外的全部内存空间,提供给用户使用。
(2)固定分区分配
把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个分区。操作系统占用其中一个分区。
(3)动态分区分配
分区的大小不固定:在装入程序时根据进程实际需要,动态分配内存空间,即——需要多少划分多少。
分区分配算法
1)首次适应算法FF
2)循环首次适应算法
3)最佳适应算法
4)最差适应算法
5)快速适应算法
(4)动态重定位分区分配
地址变换过程是在程序执行过程期间(相对地址与重定位寄存器中的地址相加),随着对每条指令的访问自动进行,称为动态重定位。
动态重定位分区分配算法与动态分区分配算法基本相同,差别在于增加了紧凑的功能。
(5)内存空间管理之对换
把内存中暂时不能运行、或暂时不用的程序和数据调到外存上,以腾出足够的内存;把已具备运行条件的进程和进程所需要的程序和数据,调入内存。
基本分页存储管理方式
记录每个作业各页映射到哪个物理块,形成的页面映射表,简称【页表】。
每个作业有自己的页表:页号到物理块号的地址映射
作业相对地址在分页下不同位置的数有一定的意义结构:
页号+页内地址(即页内偏移)
根据系统页面大小找到不同意义二进制位的分界线。
从地址中分析出页号后,地址映射只需要把页号改为对应物理块号,偏移不变,即可找到内存中实际位置。
计算相关:
页面大小决定偏移量(页内地址)的位数 ;
作业大小-》页面数量
内存容量决定块数,块数决定编址位数,即页表项位数 。
地址变换机构
进程发出逻辑地址的访问请求,经过地址变换,到内存中找到对应的实际物理地址单元并取出数据,所需花费的总时间,称为内存的有效访问时间EAT
设访问一次内存时间为t,则基本分页机制下EAT=2t
引入快表后
快表的寄存器单元数量是有限的,不能装下一个进程的所有页表项。虽不能完全避免两次访问内存,但如果命中率a高还是能大幅度提高速度。
设一次查找访问快表时间为t' ,则
EAT= a*t' + (1-a)(t'+t) + t
= 2t +t' -t*a
两级页表
将页表分页,并离散地将页表的各个页面分别存放在不同的物理块中
为离散分配的页表再建立一张页表,称为“外层页表”,其每个表项记录了页表页面所在的物理块号。
基本分段存储管理方式
基本原理:程序通过分段(segmentation)划分为多个模块,每个段定义一组逻辑信息。
特点:
1)每段有自己的名字(一般用段号做名),都从0编址,可分别编写和编译。装入内存时,每段赋予各段一个段号。
2)每段占据一块连续的内存。(即有离散的分段,又有连续的内存使用)
3)各段大小不等。
【地址结构:段号 + 段内地址】
段表与地址变换机构
分页和分段的主要区别
1)需求:分页是出于系统管理的需要,是一种信息的物理划分单位,分段是出于用户应用的需要,是一种逻辑单位,通常包含一组意义相对完整的信息。
2)大小:页大小是系统固定的,而段大小则通常不固定。分段没有内碎片,但连续存放段产生外碎片,可以通过内存紧缩来消除。相对而言分页空间利用率高。
3)逻辑地址:
分页是一维的,各个模块在链接时必须组织成同一个地址空间;
分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。
4)其他:通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。分段模式下,还可针对不同类型采取不同的保护;按段为单位来进行共享
优点:
易于实现共享
易于实现保护
段页式存储管理方式
基本原理:
将用户程序分成若干段,并为每个段赋予一个段名。
把每个段分成若干页
地址结构包括段号、段内页号和页内地址三部分
地址变换过程