目录

1.  概念理解

2. 页式虚拟存储器

3. 段式虚拟存储器

4. 段页式虚拟存储器

5. TLB 块表

6. 例题


 

1.  概念理解

组原_虚拟存储器

这样的一个存储器层次是通过硬件直接实现的,操作系统是感受不到的 (透明)。
对于操作系统来说,虽然这里是一个层次化的设计,但是只需要给这个存储系统一个地址,直接要求所要返回的数据。而并不需要了解这个数据是从 Cache 来的,还是从主存来的,以及 Cache 和主存如何协同工作。

 

 

组原_虚拟存储器

 

访问辅助存储器的时候不会以字节为单位,因为辅助存储器速度本身就慢,再以字节为单位就更慢了。
对于磁盘(地址结构如上图所示),定位的最小单位是扇区,传输的时候是以扇区为单位进行传输的。

不同的辅存提供的地址形式可能是不一样的,访问的数据块的大小也是不一样的。对于用户来讲,去掌握这些硬件上的细节就不合理。所以在采用大容量的辅助存储器来进行整个系统的容量扩增的时候,引入了虚拟存储器的概念。

 

虚拟存储器是逻辑上的概念,不是指扩容用的辅助存储器。
逻辑上的设计更关注功能是什么,并不关注这些功能由哪些细节来实现。

虚拟存储器功能:用户给出一个地址 (叫虚地址或逻辑地址) ,虚拟存储器要给出该地址对应的数据,将这个数据反馈给用户。
由于这个地址和实际的物理设备联系是由软件实时控制的,并没有一一对应的关系,所以这个地址叫虚地址或逻辑地址。

实现:由辅助硬件将虚地址映射到主存中的某个单元,主存单元地址称为实地址或物理地址。

 

在 Cache 和主存之间地址映射是以块为单位的,虚拟地址和物理地址之间的映射也需要有一定的单位,根据单位的不同将虚拟存储器分为了 3 类(页式、段式、段页式)。

 

 

 

 

2. 页式虚拟存储器

组原_虚拟存储器

页的大小是对应的,所以虚页 页内地址直接贴到主存的页内地址。需要处理的是 虚页号到实页号 的映射。
做法是:将映射关系存储在一张表(页表)中,页表中存储的内容是 实页号和装入位。

装入位用来表明虚拟地址所指向的数据是已经放在主存中还是在外部磁盘里。
如果是1表示已经放在主存中,直接将实页号和页内地址拼接一下得到主存地址,再到主存中去访问即可;
如果是0表示数据还在辅存中,需要操作系统控制辅存将这一页(包含要访问数据的页) 调入主存,再进行虚页号到实页号的映射,得到主存地址后,最后到主存中去访问数据。
 

 

根据虚页号如何找到它对应的实页号?
硬件提供一个 页表基址寄存器 ,里面存放的是页表起始地址,这个起始地址和虚页号进行拼接,得到一个完整的地址(页表项地址),该地址指向 虚页号所对应的实页号所在的那个表项,这样就找到了实页号所在的位置。然后将实页号取出来和页内地址进行拼接就得到了主存地址。 得到主存当中的地址后,访问数据需要访问 Cache -主存体系。

===>  在硬件上看起来复杂一点,但是实际操作的时候,很简单。就是一个把标记项替换(虚页号 --> 实页号)的过程。

 

补充: 页表是存放在主存中的,所以 页表起始地址拼接虚页号得到的页表项地址是一个主存地址;实页号和页内地址拼接得到的地址也是一个主存地址。虚拟地址在主存中是不存在的。

 

 

 

 

3. 段式虚拟存储器

组原_虚拟存储器

虚地址切分成了段号和段内地址,主存地址没有切分,因为段的长度不一致。
分析和页式类似。

 

 

 

 

4. 段页式虚拟存储器

组原_虚拟存储器

 

 

 

 

 

5. TLB 块表

组原_虚拟存储器

TLB 命中的时候,说明数据已经存在主存中, Cache 中未命中,则主存中必然有。
TLB 是 Page 的副本,如果 Page 中都没有命中,说明数据没有调入主存,这个时候操作系统会控制辅存将数据所在页调入主存,并更新 TLB、Page 表,然后再进行操作。

 

 

 

 

6. 例题

组原_虚拟存储器

标记是虚页号,页框是实页号。
 

 

 

相关文章:

猜你喜欢
  • 2021-07-14
  • 2021-07-17
相关资源
相似解决方案