学习日期:2024.6.28
内容摘要:页面分配策略和内存映射文件,内存映射文件
页面分配置换策略
基本概念
驻留集,指请求分页存储管理中给进程分配的物理块的集合,在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
若驻留集太小,会导致缺页频繁,系统要花大量时间来处理缺页,实际用于进程推进的时间很少;若驻留集太大,又会导致多道程序并发度下降,资源利用率降低。
固定分配:操作系统为每个进程分配固定数目的物理块,在进程运行期间不再改变。
可变分配:先为每个进程分配一定数目的物理块,在进程运行期间根据情况适当的增加或减少。
局部置换:发生缺页时只能选进程自己的物理块进行置换。
全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。
两两组合有三种策略,不存在固定分配全局置换策略,原因如图。
具体的页面分配置换策略
固定分配局部置换:
操作系统为每个进程分配固定数目的物理块,在进程运行期间不再改变,若进程在运行中发生缺页, 则只能从该进程在内存中的页面选出一页换出,然后再调入需要的页面。
缺点:很难在刚开始就确定应该为某个进程分配多少个物理块才算合理
可变分配全局置换
先为每个进程分配一定数目的物理块。操作系统会保持一个空闲物理块队列,当某进程发生缺页时,从空闲物理块中取出一块分配给该进程;若已无空闲块,则选择一个未锁定的页面换出外存,再将该物理块分配给缺页的进程。采用这种策略时,只要某进程缺页,就会获得新的物理块,仅当空闲物理块用完时,系统才选择一个未锁定的页面调出。被选择调出的页都可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。
可变分配局部置换
先为每个进程分配一定数目的物理块。当某进程发生缺页时,只允许从该进程自己的物理块中选出一个进行换出外存。如果进程在运行中频繁的缺页,系统会为该进程多分配几个物理块,直到该进程缺页率趋于适当程度。反之,如果该进程在运行中缺页率非常低,则可适当减少分配给该进程的物理块。
区别!
可变分配全局置换:只要缺页就分配新的物理块。
可变分配局部置换:根据发生缺页的频率来动态的增加或减少进程的物理块。
调入页面的策略
预调页策略:根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更高效,但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能需要访问的页面并预先调入内存。但目前预测的成功率只有50%左右,故这种策略主要用于进程的首次调入,由程序员指出应该先调入哪些部分。(运行前调入)
请求调页策略:进程在运行期间发生缺页时才将所缺页面调入内存。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,每次都要进行磁盘的I/O操作,开销较大。
若系统拥有足够的对换区空间,页面的调入调出都是在内存和对换区之间进行的,这样可以保证页面的调入、调出速度很快。在进程运行前,需将进程相关的数据从文件区复制到对换区。
若空间不足,凡是不会被修改的数据都直接从文件区调入,因为这些页面不会被修改,因此换出时不必写回磁盘,下次需要时再从文件区调入即可。对于可能被修改的部分,换出时需要写回磁盘对换区。
抖动(颠簸)现象
刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,页面在内外存之间来回“反复横跳”,这种情况称为抖动(或颠簸)。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数。
显然我们是不希望这种行为发生的,分配给进程的物理块太少会发生抖动现象,太多又会降低系统整体的并发度,降低某些资源的利用率,为了研究应该为每个进程分配多少个物理块,提出了“工作集”的概念。
工作集:进程在某段时间间隔内,实际访问的页面的集合。
驻留集:请求分页存储管理中给进程分配的内存块的集合。
一般来说,驻留集的大小不能小于工作集的大小,否则进程运行过程中会频繁缺页。
内存映射文件
操作系统向上层程序员提供的
传统的文件访问方式
①open系统调用——打开文件
②seek系统调用——将读写指针移到某个位置
③read系统调用——从读写指针的位置读入若干数据(磁盘读入内存)
④write系统调用——将内存中的指定数据写回磁盘(根据读写指针确定要写回什么位置)
内存映射文件的访问方式
①open系统调用——打开文件
②mmap系统调用——将文件映射到进程的虚拟地址空间
接下来,可以以访问内存的方式访问文件数据,文件数据的读入、写出由操作系统自动完成。
比如说当读到2时,发生缺页异常,操作系统会自动把2部分的数据读入主存,其它同理。在进程关闭文件后,操作系统会自动将文件中被修改的数据写回磁盘。
多个进程映射同一个文件,可以共享一个物理内存,用页表实现映射。
优点:①程序员编程更简单,已经建立映射的文件,只需按访问内存的方式读写即可。
②文件数据的读入/写出完全由操作系统负责,I/O效率可以由操作系统负责优化。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》