存储管理
- 程序的装入以及链接
- 编译:用户源程序经过编译生成目标模块,目标模块以0作为开始地址
- 链接:将编译后形成的多个目标模块以及他们需要的库函数链接在一起。装入模块虽然有统一地址,但任然以0作为参考地址。
- 装入:将装入模块装入实际物理地址空间,并修改程序中与地址有关的代码----这一过程称为地址重定位
- 地址重定位:相对地址转换为内存的绝对地址的工作,地址重定位又称为地址映射。
- 静态重定位:程序执行前进行重定位。
- 程序重定位后不能在内存中移动
- 要求存储空间是连续的
- 动态重定位:程序在执行时进行重定位
- 目标模块装入内存时无需任何修改,因而装入后可以在变迁(进程挂起)
- 一个程序由若干个相对独立的目标模块组成
- 链接
- 静态链接:程序运行之前事先进行的链接称为静态链接
- 装入时动态链接:程序装入内存时,边装入边链接。
- 便于软件更新
- 便于模块共享
- 程序在运行时装入模块不可变
- 每次的装入模块是一样的
- 运行时动态链接:将目标模块的链接推迟到程序执行时再进行
- 连续分配存储管理方式
- 固定分区:由操作系统或者操作员将内存划分为若干个大小不等的分区。一旦划分好,程序运行期间不能重新划分。
- 实现简单,但是内存的利用率不高。适用于进程的大小以及事先能够预知进程大小的系统中。
- 可变分区:在程序装入内存时,把可用的分区切割成连续的区域,以适应进程大小的需要
- 首次适应法:优先使用内存中低地址部分的空闲空间,高地址部分有较大的空闲分区。低地址部分碎片过多,影响查找空间的速率。
- 下次适应法:内存查询从上一次的位置开始查询,而不是重新查询。使内存得到均衡使用,但是内存缺乏大的空闲分区。导致比较大的进程无法运行。
- 最佳适应法:把进程大小与内存空闲区最匹配的空闲区域分配给进程。缺点是链表头部会留下难以利用的小空闲区,影响分配的速度
- 最坏适应法:把与进程大小最不匹配的空闲区切割出分配给进程,缺点是大空闲区存在少,难以满足大进程运行
- 动态重定位分区
- 页式存储管理
- 动态重定位虽然可以解决碎片的问题,但是内存信息的移动,处理机付出的代价很大。一个进程必须放在一个连续的内存空间中.由此,产生了离散分配方式.页式存储管理技术就是离散分配的方式的一种页式存储管理方式就是离散分配的一种。
- 页式存储管理:将内存空间划分为大小相同的若干个存储块,并为其进行编号。同时,将进程的逻辑地址空间划分为与内存块大小相等的页。进程的最后一页经常填不满,形成不可利用碎片,称为页内碎片。
- 页表:进程的若干个页被离散的分配在内存的多个存储块中,为了能找到每个页所对应的存储块,系统为每一个进程建立了一个页表。页表实质上就是页号到存储块号的映射。
- 页的大小通常为512B-4M;
- 页式存储变换机构
- 实现逻辑地址到物理地址的动态重定位,需要硬件支持
- 逻辑地址结构由页号+页类位移组成
- 页表的硬件实现
- 每次CPU读取数据需要访问两次进程,第一次拿到页号,第二次拿到物理地址。
- 为了提高系统的地址变换速度,在地址变换中设置了高速寄存器,称为快表
- 段式存储管理
- 方便编程
- 段的共享
- 段的保护
- 动态链接
- 动态增加(按需分配,不会产生碎片)
- 分段跟分页的区别
- 页是信息的物理单位,段是逻辑单位。段是一组有意义的相对完整的信息。页的逻辑地址只给出一个地址,而段的逻辑地址,既要给出段号也要给出段的逻辑地址。