欢迎光临散文网 会员登陆 & 注册

计组—虚拟存储器

2023-09-02 17:21 作者:我说你这样做就慢了  | 我要投稿

虚拟存储器可谓是计组和操作糸统综合性非常强的知识点了。 首先是为什么要引入虚拟存储器,众所周知,我们在工作时,计算机需要访存数据,为了解决速度不匹配问题,引入了内存和cpu进行数据交流来处理。但是这就是在用硬件速度来解决问题,硬件造价很贵,不可能有很大的容量用来处理数据。因此我们平时在使用时为了扩大容量同时又能保持一定的速度,引入了虚拟存储器(稍显啰嗦) 虚拟存储器其实就是把主存和辅存统筹在一起,二者在硬件和糸统软件的共同管理下工作。虚拟存储器具有主存的速度和辅存的容量。 虚拟存储器将主存和辅存的地址空间统一编址,从而形成一个庞大的地址空间。用户编程所涉及地址为虚地址或逻辑地址。实际的主存单元地址为实地址或物理地址。虚地址比实地址要大很多。 cpu用虚地址,即是找出虚地址和实地址对应关系,并判断虚地址对应内容是否装入主存。若存在则直接访问主存实际单元,若不存在则需要把一页或一段调入主存,若主存已满还需要替换算法。 虚拟存储器和cache类似,将比较常用的数据副本放入主存,采用全相联映射,写操作用回写法。 一、页式虚拟存储器 1)虚拟地址:虚页号+页内地址 2)页表:虚拟地址到物理地址的转换,虚页号和实页号的对照表。一般长久地保存在内存中。 3)快表(TLB):因为页表在主存,因此访存时要先访问一次主存去查页表,再访问一次主存才能得到数据。访存次数太多。因此将经常访问的一些页表项放入高速缓冲器组成的快表(TLB)中。相应的把存在主存中的页表称为慢表(page这个不重要)。通常快表用全相联或组相联方式。 TLB由标记字段和页表项内容组成,标记内容就是全相联下页表项对应的虚页号。组相联下则是对应虚页号的高位部分。 4)具有TLB和cache的多级存储糸统: 如图所示,此处引用王道书p133,此图也是p139中2018年统考真题。

下面简要地从我的角度阐述一下流程,首先将起点定位cpu,cpu给出一个32位的虚拟地址用以查找,这里虚拟地址分为虚页号和页内地址。通过虚页号与TLB中的tag位进行对比,若相等且有效位为1,那么说明命中快表,可以直接通过快表查找虚拟地址对应物理地址的实页号和页内地址。 如果没有命中,按照TLB缺失进行处理。需要访问主存来找页表,这里用的是两级页表表示方法要先找页目录然后对应找到页表所在位置,再将页表中访问的对应表项更新调入到TLB中,满足程序局部性原理。若TLB更新调入前已经满了,还需要设置替换策略。 在地址转换后,需要将物理地址按照一定的映射方式映射到cache中,此图用的是二路组相联,可以看到一个组号对应两行。将标记位与物理地址高位进行对比,若对比成功且有效位为1,那么cache命中,可以取块内地址来查找到所求数据送入cpu。 查找的时候快表慢表可以同时查,这里就有三种缺失情况①TLB缺失②cache缺失③page缺失,不在主存中。

二、段式虚拟存储器 其实简单理解就是把页式虚拟存储器的页换成了段,页表变成了段表。而段相比于页是长度可变的,因此就需要记录某个段对应的断号、装入位、段起点和段长。

优点:具有逻辑独立性,易于编译,管理,共享等等。(总之方便操作) 缺点:很显而易见,分配空间是比较繁琐的,而且容易产生碎片,造成浪费。 三、段页式虚拟存储器 把程序按逻辑结构先分段,然后在段内再分成大小固定的页。主存调入单位仍是页。每个程序对应一个段表,每段对应一个页表。 由此得到,虚地址分为段号、段内页号、页内地址。cpu虚地址访存,段号得段表地址,段表取出页表起始地址,与虚地址段内页号合并成页表地址,页表地址取出实页号再与页内地址拼成主存实地址。 优点:兼具段和页的有点饿,按段实现共享和保护。 缺点:两次访存查表,糸统开销较大。 ps:这块打字累死人,但是没办法,平板买的二手的没配笔,不好画图,简单做点笔记凑合看看吧。

计组—虚拟存储器的评论 (共 条)

分享到微博请遵守国家法律