操作系统--虚拟内存管理知识详解(下)

这里写目录标题操作系统--虚拟内存管理知识详解 下

内存映射文件

 通过将磁盘块映射到内存中的一页,内存映射文件输入/
输出允许将文件输入/输出视为例行内存访问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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑白极客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值