一、虚拟存储的背景需求
1、起因
内存越来越不够用,理想中的存储器是更大,更快,更便宜的非易失存储器。
2、对系统内存不够用采取的措施:
(1) 早期,微软的DOS,内存仅640K,程序大—–手动覆盖(overlay),把需要的指令和数据保存在内存中
(2) 程序多,自动交换(swapping),暂时不能执行的程序送到外存,代价大
(3) 以页单位在有限的内存中自动装入更多更大的程序,采用自动的虚拟存储技术。
二、覆盖和交换
1、覆盖overlay
①目标:小内存中运行较大程序,常用于多道程序系统,与分区存储管理配合使用。
②原理:按自身逻辑把程序分成几个功能上相对独立的模块,不会同时执行的模块可以共享同一块内存区域,按时间先后运行(分时)。
Ⅰ、必要的代码和数据常驻内存;
Ⅱ、可选的不常用的在其余模块中实现,放外存,需要时装入内存;
Ⅲ、不存在调用关系的模块不必同时载入内存,可以相互覆盖,共用一个分区。
例子:A,B,C,D,E这5个函数占用空间及调用关系如左图,如B,C之间不会相互调用因此可以共用一个分区。
还可以A占一个分区20 k,B,E,F共用一个分区50k,C,D用一个:30k,总共只用100k
③缺点:
Ⅰ、 设计开销,程序员要划分模块和确定覆盖关系,编程复杂度增加了
Ⅱ、 覆盖模块从外存装入内存,实际是以时间来换空间。
2、交换swapping
①目标:多道程序在内存中时,让正在运行的程序或需要运行的程序有更多的内存。
②方法:可将暂时不能运行的程序送到外存以获得空闲内存空间,操作系统在内存管理单元MMU帮助下把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。其大小为整个程序的地址空间(比较大,几十几百个页)。
③何时交换?
硬盘操作很慢,一动系统就要等,所以要当内存空间确实不够或者有不够的危险时换出
④交换区的大小?
极端下是内存中只留一个程序,其余都在交换区。必须够大以存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像直接存取;
⑤swap in重定位:再次换入的内存地址一定要在原来位置上吗?
不一定,可能已被占用,要正确寻址,需要动态地址映射,虚拟地址一样,物理地址不一样。
3、覆盖与交换的比较
目的是一样的。
覆盖是发生在一个运行中的程序内部没有调用关系的模块之间,代价是程序员手动指定和划分逻辑覆盖结构;
交换是内存中程序与管理程序或OS之间发生的,以进程作为交换的单位,需要把进程的整个地址空间都换进换出,对程序员是透明的,开销相对较大。
三、局部性原理
1、虚拟存储技术目标:程序只有一小部分在内存上,大部分在硬盘上,os在MMU帮助下完成,无需程序员的干涉。实现进程在内存与外存之间的交换,从而获得更多的空间(只交换进程的部分内容)
2、局限性原理:程序在执行过程的一个较短时期,所执行的指令的地址,指令的操作数地址都局限于一定区域。
①时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都在较短时间内;
②空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。
③分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置。
3、局部性原理的意义:原理表明理论上虚存可以实现。程序只有一小部分在内存上,大部分在硬盘上,os在MMU帮助下完成。
四、虚拟存储概念
1、虚存原理: 在分页、分段内存管理的硬件支持下,在装入程序时,只把当前需要执行的部分页或段装入内存,就可以开始执行;
当执行到指令或数据不在内存上时(缺页、缺段异常),由处理器通知操作系统将对应的页面或段调入内存,若有空余空间则将相应的页面或段调入内存,继续执行;
另一方面,os将内存中暂时不用的页、段调出保存在外存上以腾出空间。
2、虚存技术基本特征
①大用户空间:内存可以小,硬盘必须足够。提供给用户的虚拟空间=物理内存+硬盘。
②部分交换:swap in /swap out 是对部分虚拟地址空间进行的
③不连续:物理内存分配的不连续,虚拟空间使用的不连续(内外存)
具体实现:多采用虚拟页式内存管理,增加了请求调页和页面置换功能;
硬件:页式或段式存储中的地址转换机制;
操作系统:管理内存和外存间页面或段的换入和换出
五、虚拟页式存储
1、页表项
驻留位:为1,该页在内存,0,在外存,访问会缺页中断;
保护位:是否允许某种访问,只读,可读写,可执行;
修改位:在内存中是否被修改过,回收物理页面时据此决定是不是把内容写回外存;
访问位:如果被访问(读、写)设1,用于页面置换算法。不常用的高可能被置换。
2、虚拟页式存储管理
①在页式存储管理的基础上,增加请求调页和页面置环
②思路:
Ⅰ、当用户程序装载到内存运行时,只装入部分页面。就启动程序运行;
Ⅱ、进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求;
Ⅲ、操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续进行
六、缺页异常
1、对缺页中断的处理
(1) 如果在内存中有空闲的物理空间,则分配一个物理页帧f,然后转5,否则2
(2) 采用某种页面置换算法,选择一个被替换的物理页帧,其对应逻辑页为q,没修改过可直接释放,如果修改位是1则要写回外存
(3)如q被修改过,则把它写回外存
(4)把q的对应页表项驻留位设为0
(5) 把需要访问的页面p装入到物理页面f中
(6) 修改p对应页表项,驻留位为1,物理页帧好置为f
(7) 重新执行产生缺页的指令
2、虚拟页式存储中的外存管理
①在何处保存未被映射的页? 应能方便地找到在外存中的页面内容;采用特殊格式存储未被映射的页面交换空间(磁盘或者文件)
②后备存储(backing store),二级存储
数据:一个虚拟地址空间的页面可以被映射到一个二级存储中文件的某个位置;
代码段:映射到可执行二进制文件;
动态加载的共享库程序段:映射到动态调用的库文件
其他段:可能被映射到交换文件(swap file)
3、虚拟内存性能
①有效存储器访问时间的概念 —–effective memory access time(EAT)
②EAT = 访存时间 * (1-p) + 缺页异常处理时间 * p * (1 + q)
p:缺页率;
q:页修改概率
开销决定于p,所以程序必须有局部性特点
例子:访存时间:10ns;磁盘访问时间:5ms;
EAT=10(1-P)+5,000,000p(1+q)