操作系统概念总结笔记——第九章 虚拟内存

本章目标:

1、介绍虚拟内存系统的优点;

2、掌握按需调页概念、页替换算法和帧分配算法;


9.1 背景

虚拟内存(virtual memory): 将用户逻辑内存与物理内存分开,使得程序不再受现有的物理内存空间限制,为用户提供一个巨大的虚拟地址空间;


虚拟内存允许文件和内存通过共享页而被两个或多个进程所共享,这些共享页按只读方式链接到每个进程的空间; 类似地,虚拟内存允许一个进程创建内存区域,这个共享内存可以用来实现进程间通信;



9.2 按需调页

按需调页:执行程序时,需要把代码从磁盘载入内存,一种做法是将整个程序载入到内存,而不考虑这些代码是否全部会被使用; 另一种做法是在需要时调入相应的页,这种技术被称为按需调页;


对于这种方案,需要区别哪些页在内存里,哪些页在磁盘上,可以通过有效-无效位来实现这一目的:当该位设置为有效时,表示相关页在内存中并且有效, 当该位设为无效时,表示相关页无效或者有效但在磁盘上;

操作系统概念总结笔记——第九章 虚拟内存_第1张图片

当进程访问标记位为无效的页,即尚未调入内存的页时,会产生页错误陷阱,陷入操作系统,由操作系统进行合法的地址访问,并找到一个空闲帧,调度一个磁盘操作,将所需要的页调入空闲帧中,重新开始陷入前的指令,现在进程就可以访问之前的无效页了;


按需调页的有效访问时间: 设内存访问时间为m,页错误时间为n,页错误率为p,有效访问时间=(1-p)*m+p*n;


页错误时间的三个主要步骤:1、处理页错误中断; 2、读入页; 3、重新启动进程



9.3 写时复制

写时复制:这种方法允许父进程和子进程开始时共享同一页面,这些页面标记为写时复制页,当其中任意一个进程需要对页进行写操作时,就创建一个共享页的副本,显然只有被进程修改的页才会复制,所有非修改页被父进程和子进程共享;

操作系统概念总结笔记——第九章 虚拟内存_第2张图片

空闲缓冲池: 当确定一个页要采用写时复制时,操作系统提供一个空闲缓冲池,用于分配空闲页,这些空闲页在进程栈或堆必须扩展时进行分配;


9.4 页面置换

基本页置换: 进程执行过程中需要调页时,如果没有空闲帧,那么就查找当前没有使用的帧,将其从内存里释放,再将所需要的页读入新的空闲帧,并改变页表和帧表,重新启动用户进程;


FIFO置换(First in first out): 最简单的页置换算法,当必须置换一页时,选择最旧的一页进行置换,可以创建一个队列进行管理;

OPT置换(Optimal page-replacement algorithm): 考虑之后的页的调用,置换最长时间内不会使用的页,这个算法确保了最低可能的页错误率;

LRU置换(Least-recently-used algorithm):    使用最近的过去作为不远将来的近似,置换最长时间内没有被使用的页;

LFU/MFU(least frequently used/ most frequently):     使用计数器保存每个页的引用次数,替换最不经常使用/最近常使用的页,这两种算法比较近似,且都费时;



9.5  帧分配

帧分配的策略受到多方面的影响,首先,所分配帧的数量不能超过可用帧的数量(除非有页共享),其次,分配给进程的帧数量过少会导致页错误的增加,从而减慢进程的执行;


分配算法包括平均分配和比例分配;

平均分配:在n个进程之间分配m个帧,最容易的做法是给一个平均值,即m/n帧,把余下的帧放入空闲帧缓存池;

比例分配:根据进程大小,将内存分配给每个进程;


页置换算法包括全局置换和局部置换;

全局置换:进程从所有帧集合中选择一个置换帧,而不管该帧是否分配给其他进程,即从另一个进程里拿到帧;

局部置换:进程从自己的分配帧中进行选择;

采用局部置换,分配给每个进程的帧的数量不变; 采用全局置换,进程的帧的数量可能会增加;



9.6 系统颠簸

颠簸(thrashing):如果进程没有它所需要的活跃使用的帧,那么它会一直产生页错误,频繁地进行页调度,若一个进程的换页时间多于执行时间,那么这个进程就在颠簸;

颠簸的原因: 操作系统监测CPU的使用率,如果CPU使用率过低,那么系统就会引入新的进程,以增加多道程序的程度; 采用全局置换算法,执行进程会从其他进程中取出帧,然而这些进程也需要帧,所以它们会出现页错误,随着它们使用调页设备换出页和换入页,就绪队列就会变空,而进程等待调页设备,CPU使用率就会下降;

操作系统概念总结笔记——第九章 虚拟内存_第3张图片

通过局部置换算法可以限制颠簸,如果一个进程开始颠簸,它并不能从其他进程拿到帧,使得后者也不会因此产生颠簸;

为了防止颠簸,需要为进程提供更多的帧;

















你可能感兴趣的:(操作系统概念总结笔记——第九章 虚拟内存)