虚拟存储器的基本概念
虚拟存储器就是基于主存和辅存(类似于cache在CPU和主存一样),在通过系统软件和硬件实现了主存的速度和辅存的容量。主要是为了解决主存容量不足的问题。
虚拟存储器会将主存或辅存的地址空间统一编址,这些地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。实际的主存单元地址称为实地址或物理地址。
虚地址=虚存页号+页内字地址
实地址=主存页号+页内字地址
辅存地址=磁盘号+盘面号+磁道号+扇区号
虚拟存储器的地址空间如下图所示。
CPU使用虚地址时会通过辅助硬件来找出虚地址和实地址之间的对应关系。
若虚地址对应存储单元内容已经在主存中,可以通过地址变换使CPU能直接访问主存指示的实际单元;
若虚地址对应存储单元内容不在主存中,则要把包含的字一页或一段调入主存后再由CPU访问。
若主存已满,则采用替换算法置换主存中的交换块(即页面)。
虚拟存储机制采用的使全相联映射,每个虚页面可以存放到对应主存区域的任何一个空闲页位置。此外,当进行写操作时,不能每次写操作都同时写回磁盘,因而,在处理一致性问题采用回写法。
页式虚拟存储器
页式虚拟存储器以页为单位,将主存空间和虚拟空间都划分成同样大小的页,主存的页称为实页、页框,虚存的页称为虚页。
虚拟地址分为两个字段:虚页号和页内地址。
页表来实现虚拟地址到物理地址的转换。(页表回长久地保存在内存中)。
页表
有效位也称装入位,用来表示对应页面是否在主存,
若为1,则表示虚拟页已从外存调入主存,此时页表存放该页的物理页号;
若为0,则表示未调入主存,此时页表可以存放该页的磁盘地址。
脏位也称修改位,用来表示页面是否被修改过,虚存机制中采用回写策略,利用脏位可判断替换时是否需要写回磁盘。
引用位也称使用位,用来配合替换策略进行设置,用来配合替换策略进行设置,例如是否实现最先调入(FIFO位)或最近最少用(LRU位)策略等。
页式虚拟存储器的优点: 页面的长度固定,页表简单,调入方便。
页式虚拟存储器的缺点: 由于程序不可能正好式页面的整数倍,因此可能会导致空间无法充分使用而浪费,并且页不是逻辑上独立的实体,所以处理、保护和共享都不及段式存储器方便。
快表(TLB)
依据程序局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器组成的快表中,可以明显提高效率。相应放在主存中的页表称为慢表。
地址转换时,首先会查找快表,若命中,则无需访问主存中的页表。
快表通常采用全相联或组相联实现。每个LTB项由页表表项内容加上一个TLB标记字段组成,TLB标记用来表示该表项取自页表哪个虚拟号对应的页表项。
段式虚拟存储器
段式虚拟存储器中的段是按逻辑结构划分的,各个段的长度因程序而异。
段表的每行记录与某个段对应的段号、装入位、段起点和段长等信息。
CPU根据虚拟地址访存时候,首先格局段号与段表基地址拼接成对应的段表行,然后根据该段表行的装入位判断是否已经调入主存(”1“表示调入)。已调入则从段表读出该段在主存中的起始地址,与段内地址(偏移量)相加,则得到对应主存的实际地址。
段式存储的优点是:段的分界与程序的自然分界相对应,因而具有逻辑独立性,使它容易编译、管理修改和维护;缺点是因为段长度可变,分配空间不方便,容易在段间留下碎片。