8.2操作系统软件
操作系统的内存管理设计取决于三个基本方面的选择:
(1)是否使用虚存技术
(2)使用分页还是分段,或者是两者的组合
(3)为各种存储管理特征采用的算法
前两项的选择取决于使用的硬件平台
最后一项的选择是属于操作系统软件领域的问题
读取策略
确定一页何时读入主存
(1)请求式分页:只有当访问到某页中的一个单元时才将该页取入主存
(2)预约式分页:对于预约式分页,读取的页并不是页错误请求的页,预约式分页利用了大多数辅存设备(如磁盘)的特性,这些设备有寻道时间和合理的延迟。
放置策略
决定一个进程块驻留在实存中的什么地方。
非一致存储访问(NUMA)多处理器。
在非一致存储访问多处理器中,机器中分布的共享内存可以被该机器的任何处理器访问,但是访问某一特定的物理单元所需要的时间随着处理器和内存模块之间距离的不同而变化。
因此,其性能很大程度上依赖于数据驻留的位置与使用数据的处理器间的距离。
对于NUMA而言,自动放置策略希望把页分配到能够提供最佳性能的内存。
替换策略
处理在必须读取一个新页时,应该替换主存中的哪一页。
困难如下:
(1)给每个活动进程分配多少页帧。
(2)考虑替换的页的集合是否局限在那些产生页错误或所有页帧都在主存中的进程。
(1)(2)驻留集管理
(3)在考虑的页集中,选择换出哪一个页。
替换策略专指第一个
替换策略设计的越精致,越复杂,实现它的软硬件开销就越大。
帧锁定
关于替换策略的一个约束:
主存中的某些帧可能是被锁定的,如果一个帧被锁定时,当前保存在该帧中的页就不能被替换。
常用的几种替换算法
(1)最佳OPT
(2)最近最少使用LRU
(3)先进先出FIFO
(4)时钟Clock
(5)最近次数最少LFU,要求在页置换时置换引用计数最小的
页缓冲
一种可以提高分页性能并且允许使用较简单的页替换策略的方法。
为提高性能,被替换出的页不是被丢弃,而是被分配到以下两个表之一。
如果未被修改:分配到空闲页表
如果被修改:分配到修改页表
特征:被替换的页仍然保留在主存中。
替换策略和高速缓存大小
随着主存越来越大,应用的局部性特性逐渐降低,作为补偿,高速缓存的大小也相应的增加了。
驻留集管理
给特定的进程分配多大的主存空间,需要考虑如下:
(1)分配给一个进程的存储量越小,在任何时候驻留在主存中的进程数就越多。
(2)如果一个进程在主存中的页数比较少,尽管有局部性原理,页错误率仍然相对较高。
(3)超过一定的大小后,由于局部性原理,给特定的进程分配更多的主存空间对该进程的也错误率没有明显的影响。
当代操作系统的两种策略:
(1)固定分配策略
(2)可变分配策略
替换范围
全局
局部
没有空闲页帧的时候由一个页错误激活的。
局部替换策略仅仅在产生这次页错误的进程的驻留页中选择
全局替换策略把主存中所有未被锁定的页都作为替换的候选页,而不管它们属于哪一个进程
组合:
(1)固定,局部
(2)可变,全局
(3)可变,酷不
工作集策略
可作为比较各种策略的一个基准
UNIX和Solaris内存管理
使用了分页式的虚存
有两个独立的内存管理方案
分页系统提供了一种虚拟存储能力以给进程分配主存中的页帧,并且给磁盘块缓冲分配页帧。这是针对用户进程和磁盘I/O来说的
内核内存分配器
分页式的续存
分页系统
数据结构
(1)页表:典型情况下,每个进程都有一个页表,该进程在虚存中的每一页在页表中都有一项。
(2)磁盘块描述符:与进程的每一页相关联的是表中的项,它描述了虚拟页的磁盘副本。
(3)页帧数据表:描述了实存中的每一帧,并且以帧号为索引。该表用于置换算法。
(4)可交换表:每个交换设备都有一个可交换表,该设备的每一页在表中都有一项。
磁盘块描述符中需要有存储域类型的原因如下:当一个可执行文件第一次用于创建一个新进程时,该文件只有一部分程序和数据可以装入实存。
只有第一次装入时,才创建虚存表,并给它分配某个设备中的单元用于交换。这时,操作系统被告知在首次加载程序或数据块之前是否需要清空清空该页帧中的单元。
页替换:
页帧数据表用于页替换。
UNIX使用多个是双表针时钟算法。
确定该算法的操作需要扫描速度和扫描窗口。
内核内存分配器
内核在执行期间频繁的产生和销毁一些小表和缓冲区,每一次产生和销毁操作都需要动态地分配内存。
Linux内存管理
两个主要特征
(1)进程虚拟内存
(2)内核内存分配
Linux虚拟内存
Linux使用三级页表结构,它由下面几种类型的表组成:
(1)页目录:页目录中的每一项指向页中间目录中的一页,每个活动进程的页目录都在都必须在主存中。
(2)页中间目录:可以跨越多个页,页中间目录中的每一项指向页表中的一页
(3)页表:可以跨越多个页。每个页表项指向该进程的一个虚拟页。
linux的虚拟地址可以看做是
全局目录,中间目录,页表,偏移量组成的
页分配:
使用了伙伴系统,内和维护一系列大小固定的连续页帧组,一组可以包含1,2,4,8,16或32个页帧
当一页在主存中被分配或被解除分配时,可用的组使用伙伴算法被分裂或合并。
页替换算法:
使用的是最少使用频率的策略。
内核内存分配: