您的位置:首页 > 理论基础

读书笔记-现代操作系统-3储存管理-3.3虚拟内存

2016-07-09 23:17 267 查看

3.3 虚拟内存

虚拟内存的基本思想:

每个程序拥有自己的地址空间,这个空间被分割成多个块。每一块 称作一页或页面(page)。每一页有连续的地址空间。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行。当程序引用到一部分在物理内存中地址空间时,由硬件立刻执行必要的映射,当程序引用一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。

3.3.1 分页

由程序产生的地址称为虚拟地址(virtual address)。他们构成了一个虚拟地址空间(virtual address space)

在没有虚拟地址的计算机上,进系统直接将虚拟地址送到内存总线上,读写操作使用具有相同地址的物理内存字,

在有虚拟地址的计算机上,而是被送到内存管理单元(Memory management Unit),MMU把虚拟地址映射到为物理内存地址。

虚拟地址空间按照固定大小划分称为页面的若干单元。在物理内存中对应的单元称为页框(page frame)。页面和页框的大小通常一样。RAM和硬盘之间的交互总是以整个页面为单位进行的。

缺页中断如果

MMU注意到该页面没有被映射,于是CPU陷入到操作系统,这个陷阱称为缺页中断。操作系统找到一个很少使用的页框将其内容写入到磁盘上,随后需要访问的页面读到刚才回收的页框中,修改映射关系,然后重新启动陷阱中的指令。

页表

可用页号作为页表(page table) 的索引号,以得出对应于该虚拟页面的页框号, 如果该为为0则不再内存中。

3.3.2 页表

虚拟地址被分成虚拟页号(高位)和偏移量(低位部分)两部分。虚拟页号也可用页表的索引,已找到该虚拟页面对应的页表项

页表项

页框号——用来寻找虚拟地址对应的页表页框

在不在位——用来确定是否是字内存中还是在硬盘中

保护位——是只读还是可以写可读

修改位——是否已经修改该位,如果已经修改则需要写会内存,如果未修改则不需要修改内存

访问位——用来判断是否是淘汰页面,当有硬盘中的虚拟地址需要换到内存时,这个标志位用来判断哪些页面可以淘汰掉。

高速缓存禁止位——对哪些映射到设备寄存而不是常规内存的页面而言的,具有独立IO空间而不是映射到内存的设备不需要这一位。

3.3.3 加速分页过程

两个主要的问题:

虚拟地址到物理地址的映射必须非常快

如果虚拟地址空很大,页表也会很大

如果全部用寄存器实现虽然速度很快,但是成本太高,而且每次上下问切换需要重新载入副本到寄存器。

如果全部用内存实现,每次执行指令都需要访问内存多次效率很低。

基于大多数程序总是对少数页面进行多次的访问的原理。

通常采用折中的转换检测缓冲区(Translation Lookaside Buffer ,TLB)或者相联储存器(associate momery),小型的硬件设备将虚拟地址直接映射到物理地址。而不必再访问页表。

在现代的操作系统中,对TLB的管理通常都是在软件中实现的。这些机器上,TLB表项被显示地装载。当发生TLB访问失效的时候不再是MMU到页表中查找并取出数据,而是生成一个TLB失效并将问题提交给操作系统解决。TLB失效比缺页中断更频繁。

如果TLB大则可有效的减少失效情况。

软失效/硬失效,软失效是TLB失效去内存找,硬失效是内存也没有需要去硬盘找。

3.3.4 针对大内存的页表

多级页表

比如32位的地址,分为10+10+12,三级地址。

倒排页表

对于64如果还用多级页表,需要的页表空间太大。实际中内存每个页框有一个表项,而不是每个虚拟页表有一个表项。

不过这样从虚拟地址到物理地址的转换会变的困难,需要遍历查找,所以需要TLB将频繁使用的页面记录下来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息