3、存储器管理
存储器管理
程序的装入和链接
程序的装入:
- 绝对装入方式:用户程序经编译后,将产生绝对地址(物理地址)的目标代码。
- 可重定位装入方式:对于用户程序编译所形成的若干个目标模块,它们的起始地址通常都是从0开始的,程序中的其他地址都是相对于起始地址计算的。在采用可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存后的物理地址不同。通常,把在装入时对目标程序中指令和数据地址的修改过程称为重定位。又因为地址变换通常是在进程装入时一次完成的,以后不再改变,故称为静态重定位。
- 动态运行时的装入方式:可重定位装入方式可将装入模块装入到内存中任何允许的位置,但不允许程序运行时在内存中移动位置。动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。
程序的链接:
- 静态链接方式
- 装入时动态链接
- 运行时动态链接
连续分配存储管理方式
1、单一连续分配
2、固定分区分配
3、动态分区分配
动态分区分配算法
1、基于顺序搜索的动态分区分配算法
- 首次适应算法:倾向于优先利用内存中低址部分的空闲分区;
- 循环首次适应算法:
- 最佳适应算法:避免"大材小用"
- 最坏适应算法:总是挑选一个最大的空闲区;
2、基于索引搜索的动态分区分配算法
- 快速适应算法
- 伙伴系统
- 哈希算法
分页存储管理方式
连续分配方式会形成很多碎片,虽然可通过"紧凑"方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。
如果允许将一个进程直接分散地装入到许多不相邻的分区中,便可充分利用内存空间,而无须再进行"紧凑",基于这一思想而产生了离散分配方式,根据在离散分配时所分配地址空间的基本单位的不同,又可将离散分配分为以下三种:
- 分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为页或页面。典型的页面大小是1KB,相应的,也将内存空间分为若干个物理块,页和块的大小相同,这样可将用户程序的任一页放入任一物理块中;
- 分段存储管理方式:把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息,在存储器分配时,以段为单位;
- 段页式存储管理方式
在为进程分配内存时,以块为单位,将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
地址变换机构
1、基本的地址变换机构
2、具有快表的地址变换机构
局部性原理:
- 时间局部性:如果执行了程序中的某条指令,那么不久后,这条指令会再次执行,如果某个数据被访问过,不久之后该数据会再次被访问;
- 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也会被访问。
快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换过程。与此对应,内存中的页表常称为慢表。
分段存储管理方式
段表
分段系统的地址变换过程
分页和分段的区别:
- 页是信息的物理单位,段是信息的逻辑单位;
- 页的大小固定且由系统决定,段的长度不固定,决定于用户所编写的程序;
- 分页的用户程序地址空间是一维的,分段系统中,用户程序的地址空间是二维的。
段页式存储管理方式
段页式系统的基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。
在段页式系统中,地址结构由段号、段内页号和页内地址三部分组成。
关键:从段表项中得到该段的页表始址。