这里写目录标题操作系统--虚拟内存管理知识详解 下
内存映射文件
通过将磁盘块映射到内存中的一页,内存映射文件输入/
输出允许将文件输入/输出视为例行内存访问9.73
9.74
文件最初是使用请求分页读取的。文件的页面大小部分从文件系统读入物
理页面。对文件的后续读/写被视为普通的内存访问。
通过内存而不是读(),写()系统调用来处理文件输入/输
出,从而简化文件访问
还允许多个进程映射同一个文件,从而共享内存中的页
面9.75
Memory Mapped Files9.76
Memory-Mapped Shared Memory in Windows9.77
分配内核内存
与用户模式内存不同(空闲列表…)。
通常从空闲内存池中分配
内核为不同大小的结构请求内存,其中一些结构的大
小小于一页。
内核必须谨慎使用内存,尽量减少碎片造成的浪费。
许多操作系统不会将内核代码或数据提交给分页系
统。9.78
9.79
一些内核内存需要是连续的,因为某些硬件设备直接与物理内存交互,而没有虚拟内存接口的好处。
Two strategies: Buddy System and Slab Allocation9.80
伙伴制
从由物理上连续的页面组成的固定大小的段中分配内存
使用 2 的幂分配器从该段分配内存
以 2 的幂为单位满足要求
请求向上舍入到次高的 2 的幂,对于 11kB,它满足 11kB
的段
当需要的分配比可用的少时,当前的块分成两个伙伴,
下一个是 2 的低次方
,直到有合适大小的块可用9.81
伙伴系统分配器
假设内存段的大小最初为 256 千字节,内核请求 21 千字节的内存。CL 是分配给此请求的段。9.829.83
伙伴系统分配器
好友系统的一个优点是,使用一种称为合并的技术,可以
多快地将相邻的好友组合成更大的片段。
当内核发布 CL 时,
CL+CR | BL,
BL+BRα1,
A1+AR 256 千字节段。
缺点:在分配的段内造成碎片。
下一个是内存分配方案,其中没有因碎片而丢失的空间Slab Allocation
9.84
Slab 是一个或多个物理上连续的页面
缓存由一个或多个板组成
每个唯一的内核数据结构都有一个缓存
代表过程描述符的数据结构的独立缓存文件对象的独立缓存
信号量的独立缓存
每个缓存都填充了对象——缓存所代表的内核数
据结构的实例。Slab Allocation
9.85Slab Allocation
9.86
片分配算法使用缓存来存储内核对象
创建缓存时,会将许多对象分配给缓存(最初标记为空闲)。
缓存中的对象数量取决于相关板的大小。一个
12kb 的板可以存储 6 个 2kb 的对象。
当需要内核数据结构的新对象时,分配器可以从缓存中
分配任何空闲对象来满足请求。
从缓存分配的对象被标记为已使用
如果板充满使用过的对象,则从空板分配下一个对象
如果没有空板,则分配新板
两个主要好处Slab Allocation
9.87
没有因碎片而浪费的内存。
可以快速满足内存请求。(对象是预先创建的,因此
可以从缓存中快速分配)9.88
其他问题-准备
准备
为了减少进程启动时出现的大量页面错误
在引用之前,准备流程需要的全部或部分页面
但是,如果预先准备的页面未被使用,输入/输出和
内存就会被浪费
假设预先准备了 s 个页面,并且使用了 α 个页面
保存页面错误的成本还是比准备
不必要的页面的成本?
接近零,准备输了
其他问题–页面大小
页面尺寸选择必须考虑
分裂
表大小
输入输出开销
地区
其他问题–TLB 力奇
TLB Reach -可从 TLB 访问的内存量(翻译后备缓冲器,第
8 章)9.90
TLB Reach = (TLB 尺寸)X(页面尺寸)
理想情况下,每个进程的工作集都存储在
TLB,否则页面错误率很高.增加页面尺寸9.91
9.92
这可能会导致碎片增加,因为并非所有应用程序都需要大的页面尺寸提供多种页面尺寸
这使得需要更大页面大小的应用程序有机会使用它
们,而不会增加碎片9.93
Other Issues – Program Structure
Program structure
Int[128,128] data;
Each row is stored in one page (need 128 pages to store)
Program 1
for (j = 0; j <128; j++)
for (i = 0; i < 128; i++)
data[i,j] = 0;
128 x 128 = 16,384 page faults
Program 2
for (i = 0; i < 128; i++)
for (j = 0; j < 128; j++)
data[i,j] = 0;
128 page faults9.94
Other Issues – I/O interlock
I/O Interlock – Pages
must sometimes be
locked into memory
Consider I/O - Pages
that are used for
copying a file from a
device must be locked
from being selected
for eviction by a page
replacement algorithm9.95
Operating System Examples
Windows XP
Solaris 9.96
Windows XP
使用按需分页和集群。聚类带来了错误页面周围的页面
进程被分配最小工作集和最大工作集
最小工作集是进程在内存中保证的最小页数
一个进程可以被分配多达其最大工作集的页面
当系统中的空闲内存量低于阈值时,会执行自动工作集调
整以恢复空闲内存量
工作集修剪从页面超过其最小工作集的进程中移除页面
操作系统
维护一个空闲页面列表,用于分配出错进程(线程)9.97
lotsfree–开始分页的阈值参数(可用内存量,通常为物理内
存的 1/64)
desfree–增加分页的阈值参数(从 4 次/秒到 100 次/秒)
min free–开始交换进程的阈值参数,从而释放分配给交换
进程的所有页面。
分页由分页过程执行
页面输出使用改进的时钟算法(两只手)扫描页面(每秒四
次)
操作系统
前端扫描页面并将参考位设为 09.98
秒针检查并向空闲列表追加 ref 位仍然等于 0 的每一
页。
手伸距离:两只手之间的距离(以页为单位)
Scanrate 是扫描页面的速率。范围从慢速扫描(100 页/秒)到快速扫描(高达
8192 页/秒)
两只手之间的时间取决于扫描速度和手的伸展。对于扫描
速率= 100/秒,手伸= 1000 页,我们有 10 秒。
根据可用的空闲内存量,调用 Pageout 的频率会更高9.99
Solaris 2 Page Scanner
begin paging
begin swappingIncreasing paging