计算机操作系统(八)---虚拟存储器

分页存储管理的基本概念

       

早期分页的概念

图一

分页实现

图二

       在开始学习的时候一直困惑在虚拟存储器到底作用是什么,为什么要这样子设计,后来看到了后面的工作流程才明白了为什么需要这样子设计.


      

       可以这样子理解虚拟存储器作用,就以电脑启动为例,我的win7 安装在C盘,准确点时位于硬盘,当我开机的时候,CPU 肯定是调用我硬盘里的程序去执行(系统安装在硬盘),那么但是有个问题,就是我的主存相对于硬盘,存储的空间很小,这意味着有两个问题(当然还有其他问题) :

  • 我很冗长的程序加载一部分在主存中执行完后,再一次加载一点点.
  • 同时由于传输给CPU的是硬盘上的逻辑地址,我要是把程序放到了主存,意味着地址空间肯定不一样了.

       第一个问题可以很明显对程序管理的问题,就出现了分页管理,又操作系统去完成,不再交由程序员完成.自由映射接下来的程序,加载进去的单位称为一页.第二问题,可以由页表实现解决,操作系统为每个进程分配一个页表,进程执行的程序可以来自不同的页,也就意味着页表中对应的的页可以是不连续的.页表可以映射逻辑地址空间到物理地址空间.

       每个进程的数据都来自于主存,那么每次的调用会花费时间,有没有像cache 一样的东西,不用每次都访问内存呢?

       有,TLB(Translation Lookaside Buffer).将进程中需要常用到的表记录在TLB中,下次要去主存访问某个的数据时就像从TLB中找.我们在看看我们要执行的程序到底是怎么样的(即虚拟地址空间)?见图五,我们形成页时候,是不管这一层放什么,那一层放什么,直接把整个程序大小除以一个页大小就可以得到一共多少页了,得到的页再全部加载到主存中.有没有按照虚拟地址空间各层次放的东西,分层就行加载的呢?

       有,就是另外一种虚拟存储器的实现方式 : 分段式, 即是安装虚拟空间内程序的类型进行加载,当然分层加载同样会有一个像页表一样的映射表,这个映射叫段表.但是分段式也有缺点:

  • 产生碎片
  • 储存空间不好管理

       虚拟存储器的另外一种实现方式 : 段页式, 就是把分页式 和分段式结合起来,先按各层次分段在分页,由于分两次就细化,就会那么映射表应该就会有两个,即是说段页式需要两级定位处理.详细的细节见下.

 


猜你喜欢

转载自www.cnblogs.com/Benjious/p/10048776.html