计算机组成原理(2)-虚拟存储器

虚拟存储器的含义

问题:随着计算机系统软件和应用软件的功能不断增强,某些程序却需要很大的内存才能运行,但是计算机本身的物理内存容量比较小。而且在多用户多任务系统中,多用户或多个任务共享全部主存,要求同时执行多道程序。这些同时运行的程序到底占用实际内存中的哪一部分,在编制程序时是无法确定的,必须等到程序运行时才动态分配。

解决问题:在程序运行时,则分配给每个程序一定的运行空间,由地址转换部件(硬件或软件)将编程时的地址转换成实际内存的物理地址。如果分配的内存不够,则只调入当前正在运行的或将要运行的程序块(或数据块),其余部分暂时驻留在辅存中。一个大作业在执行时,其一部分地址空间在主存,另一部分在辅存,当所访问的信息不在主存时,则由操作系统而不是程序员来安排I/O指令,把信息从辅存调入主存。从效果上来看,好像为用户提供了一个存储容量比实际主存大得多的存储器,用户无需考虑所编程序在主存中是否放得下或放在什么位置等问题。称这种存储器为虚拟存储器.

虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。虚拟存储器指的是主存-外存层次,它以透明的方式为用户提供了一个比实际主存空间大得多的程序地址空间。

实地址和虚地址

用户编制程序时使用的地址(虚拟地址由编译程序生成)称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。程序进行虚地址到实地址转换的过程称为程序的再定位。

特点:

(1)每个程序的虚地址空间可以远大于实地址空间,也可以远小于实地址空间。

(2)有了虚拟机制后,应用程序就可以透明地使用整个虚存空间。

(3)每个程序就可以拥有一个虚拟的存储器,它具有辅存的容量和接近主存的访问速度。

cache与虚存的异同

相同点:
(1)两者都是为了提高存储系统的性能价格比,即使存储系统的性能接近高速存储器。

(2)都是基于程序局部性原理。一个程序运行时,只会用到程序和数据的一小部分,仅把这部分放到比较快速的存储器中即可,其他大部分放在速度低、价格便宜、容量大的存储器中,这样可以以较低的价格实现较高速的运算。

不同点:

(1)在虚拟存储器中未命中的性能损失要远大于Cache系统中未命中的损失。因为主存和Cache的速度相差5~10倍,而外存和主存的速度相差上千倍。

(2)cache主要解决主存与CPU的速度差异问题,而虚存主要解决存储容量问题。

(3)CPU与cache和主存之间均有直接访问通路,cache不命中时可直接访问主存。而虚存所依赖的辅存与CPU之间不存在直接的数据通路,当主存不命中时只能通过调页解决,CPU最终还是要访问主存。

(4)cache的管理完全由硬件完成,对系统程序员和应用程序员均透明。而虚存管理由软件(操作系统)和硬件共同完成,虚存对实现存储管理的程序员是不透明的(段式和段页式管理对应用程序员”半透明“)。

页式虚拟存储器

-页式虚拟存储器的地址映射过程

其他:

(1)为了节省页表本身占用的主存空间,一些系统把页表存储在虚存中,因而页表本身也要进行分页。当一个进程运行时,其页表中一部分在主存中,另一部分则在辅存中保存。

(2)另一些系统采用二级页表结构。每个进程有一个页目录表,其中的每个表项指向一个页表。因此,若页目录表的长度(表项数)是m,每个页表的最大长度(表项数)为n,则一个进程最多可以有mXn个页。

(3)在页表长度较大的系统中,还可以采用反向页表实现物理页号到逻辑页号的反向映射。页表中对应每一个物理页号有一个表项,表项的内容包含该物理页所对应的逻辑页号。访存时,通过逻辑页号在反向页表中逐一查找。如果找到匹配的页,则用表项中的物理页取代逻辑页号;如果没有匹配表项,则说明该页不在主存中。这种方式的优点时页表所占空间大大缩小,但代价是需要对反向页表进行检索,查表得时间很长。有些系统通过散列(哈希)表加以改进。

转换后援缓冲器(TLB)

问题:由于页表通常在主存中,因而即使逻辑页已经在主存中,也至少要访问两次物理存储器才能实现一次访存,这将使虚拟存储器的存取时间加倍。

解决问题:为了避免对主存访问次数的增多,可以对页表本身实行二级缓存,把页表中的最活跃的部分存放在高速存储器中。这个专用于页表缓存的高速存储器部件通常称为转换后援缓冲器(TLB),又称为快表。而保存在主存中的完整页表则称为慢表快表的作用是加快地址变换。

内页表和外页表

内页表:虚地址到主存物理地址的变换表

外页表:虚地址与辅存地址之间的变换表,常常放在辅存中。需要时可调入主存。当主存不命中时,由存储管理部件向CPU发出”缺页中断“,进行调页操作。

虚拟存储器、TLB和Cache的协同操作

在最好额情况下,虚拟地址由TLB进行转换,然后被送到Cache,找到正确的数据并取回处理器。在最坏的情况下,一次访问会在存储器层次结构的三个组成部分都产生缺失:TLB、页表和Cache。

页式虚拟存储器的优缺点:

优点:页面的起点和终点地址是固定的,方便编造页表,新页调入主存也很容易掌握,比段式空间浪费小,易于管理,不存在外碎片。

缺点:页长与程序的逻辑大小不相关,处理、保护和共享都没有段式方便。

段式虚拟存储器

段:按照程序的自然分界划分的长度可以动态改变的区域。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。

段表的每一个表项对应一个段。每个表项至少包含下面三个字段:
(1)有效位:该段是否已经调入实存

(2)段起位:在该段已经调入实存的情况下,该段在实存中的首地址

(3)段长:记录该段的实际长度。(目的是为了保证访问某段的地址空间时,段内地址不会超出该段长度导致地址越界而破坏其他段)

段表本身也是段,一般驻留在主存中。

特点:分段通常对程序员是可见的,因而分段为组织程序和数据提供了方便。段的长度是不固定的。

段式虚拟存储器优缺点:
优点:

(1)段的逻辑独立性使其易于编译、管理、修改和保护,也便于多道程序共享。

(2)段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。

缺点:

(1)主存空间分配比较麻烦。

(2)容易在段间留下许多外碎片,造成存储空间利用率降低。

(3)由于段长不一定是2的整数次幂,因而不能简单地像分页方式那样用虚地址和实地址的最低若干二进制位作为段内偏移量,并与段号进行直接拼接,必须用加法操作通过段地址与段内偏移量的求和运算求得物理地址。因此,段式存储管理比页式存储管理方式需要更多的硬件支持。

段页式虚拟存储器

含义:段式虚拟存储器和页式虚拟存储器的结合。

第一步:实存被等分成页。

第二步,先段后页:每个程序则先按逻辑结构分段,每段再按照实存的页大小分页,程序按页进行调入和调出操作,但可按段进行编程、保护和共享。

每道程序均通过一个段表和多个页表进行两级再定位。段表中的每一个表项对应一个段,每个表项有一个指针指向该段的页表。页表则指明该段各页再主存中的位置,以及是否已装入、是否已修改等状态信息。

 

段页式的优缺点

优点:结合了段式和页式的优点。

缺点:在由虚地址向主存地址的映射过程中需要多次查表,需要花费时间,因而实现复杂度较高。

虚存的替换算法与cache的替换算法区别:

(1)cache的替换全部靠硬件实现,而虚拟存储器的替换算法是有操作系统的支持。

(2)虚存缺页对系统性能的影响比cache未命中要大得多。(因为调页需要访问辅存,并且要进行任务切换)

(3)虚存页面替换的选择余地很大,属于一个进程的页面都可替换。

对于将被替换出去的页面,假如该页面调入主存后没有被修改,就不必进行处理。否则,则就把该页重新写入外存,以保证外存中数据的正确性。为此,在页表的每一行应设置修改位。

 

  • 70
    点赞
  • 278
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值