读书笔记-现代操作系统-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将频繁使用的页面记录下来。
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- 使用 Libki 来管理公共用户访问计算机
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- 微型计算机的始祖:Altair 8800
- 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制
- IE7降低内存和降低CPU的几个技巧
- 如何高效的使用内存
- DOS下内存的配置
- XP/win2003下发现1G的内存比512M还慢的解决方法
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- SQL语句实现查询SQL Server内存使用状况
- C#实现判断操作系统是否为Win8以上版本
- C语言内存对齐实例详解
- 深入学习C语言中memset()函数的用法
- 全局变量与局部变量在内存中的区别详细解析
- php实现用手机关闭计算机(电脑)的方法