内存管理概念
3.1.1内存管理的概念
内存管理(Memory Management)
功能:
- 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率
- 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址
- 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存
- 储存保护:保证各道作业在各自的存储空间内运行,互不干扰
1.程序装入和链接
将用户源程序变为可在内存中执行的程序:
- 编译:由编译程序将用户代码编译成若干个目标模块
- 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
- 装入:由装入程序将装入模块装入内存运行
静态链接:在程序运行之前,先将各目标模块及他们所需的库函数链接成一个完整的可执行程序,以后不再拆开
装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的方式
运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。优点便于实现对目标模块的共享
- 绝对装入:适合单道程序环境,逻辑地址和实际地址相同
- 可重定位装入
- 动态运行时装入(动态重定位)
3.1.2覆盖与交换
1.覆盖
基本思想:由于程序运行时并非任何时候都要访问程序及数据的各个部分,因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。即将要访问的调入覆盖区
2.交换
基本思想:把处于等待状态的程序从内存移到辅存,把内存空间腾出来,这一过程叫换出
注意:
- 交换需要备份存储,通常是快速磁盘。必须足够大,并且提供对这些内存映像的直接访问
- 为了有效使用CPU,需要每个进程的执行时间比交换时间长,而影响交换时间的主要是转移时间。转移时间与所交换内存空间成正比
- 如果换出进程,必须确保该进程是完全处于空闲状态
- 交换空间通常作为磁盘的一整块,且独立于文件系统
- 交换通常在有许多进程运行且内存空间吃紧时开始启动,而系统负荷降低就暂停
- 普通的交换使用不多,但交换策略的某些变种在许多系统中仍发挥作用
3.1.3连续分配管理方式
连续分配方式,是指为一个用户程序分配一个连续的内存空间
1.单一连续分配
内存分为系统区和用户区;系统区仅提供给操作系统使用,通常在低地址部分,用户区为用户提供,除系统区之外的内存空间,这种方式无需进行内存保护。优点:简单,无外部碎片,可采用覆盖技术,缺点:只能用于单用户,单任务的操作系统,有内部碎片,存储器的利用率低。
2.固定分区分配
最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只能装入一道作业。
分区大小相等:缺乏灵活性
无外部碎片,不能实现多进程共享一个主存区,存储空间利用率低。
3.动态分区分配
可变分区分配,在进程装入内存时,根据进程的大小动态的建立分区
A逻辑地址 页面大小L 物理地址E
计算页号P(P=A/L)页内偏移量W (W=A%L)
P对应的页表项地址=页表起始地址F+页号P*页表长度
虚拟内存管理
基本概念
1.传统存储管理方式的特征
- 一次性:作业必须一次性全部装入内存后,才开始运行
- 驻留性:被装入内存中,不会被换出,直至运行结束
2.局部性原理
- 时间局部性:产生大量循环
- 空间局部性:程序在一段时间内所访问的地址,可能集中在一定范围之内。
3.虚拟存储器的定义和特征
基于局部性原理,在程序装入时,可以将程序的一部分装入内存,将其余部分留在外存,就可以启动程序执行。
特征:
- 多次性
- 对换性
- 虚拟性
4.虚拟内存技术的实现
需要建立在离散分配的内存管理方式的基础上。
三种方式实现:请求分页、分段、段页式存储管理
要有硬件的支持还要:
- 一定容量的内存和外存
- 页表机制(段表机制)作为主要的数据结构
- 中断机制,
- 地址变换机构,逻辑地址到物理地址的变换
请求分页管理方式
1.页表机制
页号 物理块号 状态位P 访问字段A 修改位M 外存地址
状态位P:用于指示该页是否已调入内存,供程序访问时参考
访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,供置换算法换出页面时参考
修改位M:标识该页在调入内存后是否被修改过
外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考
2.缺页中断机制
要访问的页面不在内存中,便产生缺页中断,请求操作系统将所缺页调入内存,
特点:在指令期间产生和处理中断信号,可能产生多次,属于内部中断。
3.地址变换机制
页面置换算法
1.最佳置换算法(OPT)
所选择的被淘汰的是以后永不使用的,或最长时间内不被访问的页面
2.先进先出(FIFO)
优先淘汰最早进入内存的页面,
3.最近最久未使用(LRU)
选择最近最长时间未被访问的页面予以淘汰。
4.时钟(CLOCK)
实现困难,开销大
给每一帧关联一个附加位,首次进入置1,随后被访问置1;需要替换一页时,查找使用位置为0的,每当遇到一个使用位为1的帧时,操作系统将该位重新置为0 ;
页面分配策略
1.驻留集大小
- 分配给一个进程的存储量越小,在任何时候驻留在主存中的进程数就越多,从而可以提高处理机的时间利用率。
- 如果一个进程在主存中的页数过少,尽管有局部性原理,页错误率仍然会相对较高
- 如果页数过多,由于局部性原理,给特定的进程分配更多的主存空间对该进程的错误率没有明显的影响
固定分配局部置换
可变分配全局置换
可变分配局部置换
2.调入页面的时机
预调页策略
请求调页策略