操作系统概念阅读笔记9

虚拟内存

Posted by Xiaoxi on January 14, 2016

操作系统概念阅读笔记9

##虚拟内存 虚拟内存技术允许执行进程不必完全在内存中


背景

  1. 需求:在大多数程序执行时,会有部分代码是几乎不会被运行的。因此,我们需要能够执行只有部分在内存中的程序
  2. 好处:
    1. 程序不再受现有的物理内存空间限制
    2. 更多的程序可以同时执行,CPU使用率也相应增加,而响应时间或周转时间不增加(理由 每个用户程序使用了更少的物理内存)
    3. 程序可以运行的更快,因为载入或交换每个用户程序到内存内所需的I/O会更少
  3. 虚拟内存将用户逻辑内存与物理内存分开。虚拟内存使编程更加容易,因为程序员不再需要担心可用的有限物理内存空间。

image


按需调页

image

页错误处理

image image


写时复制

该技术允许父进程与子进程开始共享同一页面。这些页面标记为写时复制页,即如果任何一个进程需要对页进行写操作,那么就创建一个共享页的副本(即写的时候才会真正复制)


页面置换

主要用于处理需要某页时,页并不在内存上,且内存上也不存在空闲帧时,如何选择一个“牺牲”帧的策略

FIFO页置换

最先进来的,最先替换出

image

存在Belady异常:对有的页面置换算法,页错误率可能会随着分配的帧数增加而增加,而原期望为进程增加内存会改善其性能

最优页面置换(OPT)

所有算法中产生页错误率最低的,且无Belady异常

它会置换未来最长时间不会使用的页,难点就是如何预测未来。。 image

LRU页置换

最近最少使用算法,无Belady异常

image

实现:

  1. 计数器:为每个页表项关联一个使用时间域,并为CPU增加一个逻辑时钟或计数器。
  2. 利用栈结构:栈顶部总是最近使用的页,栈底部总是LRU页

其它

  1. 近似LRU页置换
  2. 基于计数的页置换:最不经常使用页置换算法(LFU) 最常使用页置换算法(MFU)

典型例题

####9.1 问。举一个例子,IBM360/370 的资源和目的地区重叠时说明,(MVC)重新启动移动块的问题。

答:假设页面边缘为 1024,移动空间从资源区 800:1200 到目标区 700:1100,假设当页 表在 1024 边缘发生故障访问错误,这时候的位置 800:923 已覆盖新的值,因此,重新启动区块移动指令会导致在 800:923 到 700:823 之间复制新的值,而这是不正确的

9.4

问:某个计算机给它的用户提供了 2^32 的虚拟内存空间,计算机有 2^14B 的物理内存,虚拟内存使用页面大小为 4094B 的分页机制实现。一个用户进程产生虚拟地址 11123456,现在说明一下系统怎么样建立相应的物理地址,区分一下软件操作和硬件操作。

答:该虚拟地址的二进制形式是 0001 0001 0001 0010 0011 0100 0101 0110。由于页面大小为 2^12,页表大小为 2^20,因此,低 12 位的“0100 0101 0110 ”被用来替换页(page),而前 20 位“0001 0001 0001 0010 0011”被用来替换页表(page table)。