一、虚拟存储技术
背景
代码必须装入内存才能执行,但是并不是所有代码必须全部装入内存。
- 错误代码
- 不常用的函数
- 大的数据结构
程序部分装入优点
局部性原理
局部性原理:一个程序只要部分装入内存就可以运行
- 整个程序不是同一时间都要运行
1968年,Denning指出:程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域。
- 程序执行时,除了少部分的转移和过程调用外,在大多数情况下仍然顺序执行;
- 过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,过程调用的深度一般小于5。程序将会在一段时间内都局限在这些过程的范围内运行;
- 程序中存在许多循环结构,多次执行;
- 对数据结构的处理局限于很小的范围。
程序部分装入技术优点:
- 进程大小不再受到物理内存大小限制
- 每个进程需要的内存更小
- 更多进程可以并发运行
- I/O更少
虚拟存储技术
虚拟存储技术:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将它们从磁盘调入内存执行。
虚拟地址空间:分配给进程的虚拟内存。
虚拟地址:在虚拟内存中指令或数据的位置(可以被访问)。
虚拟内存:把内存和磁盘有机结合起来使用,得到一个容量很大的“内存”,即虚存。
虚拟内存主要作用——区分开物理内存和用户逻辑内存
只有部分运行的程序需要在内存中;
逻辑地址空间能够比物理地址空间大;
允许多个进程共享同一地址空间;
允许更有效的进程创建。
虚拟内存大于物理内存
虚拟存储器的大小由2个因素决定:
- 操作系统字长(计算机系统的寻址空间);如果是32位计算机,那么寻址空间为232,也就是4G,如果是64位计算机,那么寻址空间为264。
- 内存外存容量和
我们不能简单认为虚存大小就是内存和外存容量之和。
虚拟内存的共享库
虚拟内存也允许文件和内存通过共享页而为多个进程所共享。
- 通过将共享对象映射到虚拟地址空间,系统库可以被多个进程所共享;
- 虚拟内存允许进程共享内存
- 虚拟内存可允许在创建进程期间共享页,从而加快进程创建。
写时复制(Copy-on-write)
写时复制允许父进程和子进程在初始化时共享页面。
- 如果其中一个进程修改了一个共享页面,会产生副本;
- 更加高效;
- 应用在Windows XP,Linux等系统
vfork():fork()变形,不使用写时复制。
虚拟内存实现
虚拟内存能够通过以下手段来执行实现:
- 虚拟页式(虚拟存储技术+页式存储管理)居多
- 虚拟段式(虚拟存储技术+段式存储管理)
虚拟页式有两种方式:
- 请求分页;需要访问某个页面,如果该页面不在内存,操作系统就把这个页面调入内存。
- 预调页;使用某些算法预测将要用到的页面,预先把这些页面调入内存。
二、请求分页
虚拟页式存储管理基本思想
进程开始运行之前,不是装入全部页面,而是装入一个或零个页面;
运行之后,根据运行需要