虚拟内存

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

2、 在三级存储体系中,cache-主存和主存-辅存这两个存储层次有许多相同点

(1)出发点相同:二者都是为了 提高存储系统的性能价格比而构造的分层存储体系,都力图使存储系统的性能接近高速存储器,而价格和容量接近低速存储器。
(2)原理相同:都是利用了程序运行时的 局部性原理把最近常用的信息块从相对慢速而大容量的存储器调入相对高速而小容量的存储器。

但cache-主存和主存-辅存这两个存储层次也有许多 不同之处

(1)侧重点不同:cache主要解决主存与CPU的速度差异问题;而就性能价格比的提高而言,虚存主要是解决存储容量问题,另外还包括 存储管理、主存分配和存储保护等方面。
(2)数据通路不同:CPU与cache和主存之间 均有直接访问通路,cache不命中时可直接访问主存;而虚存所依赖的辅存与CPU之间 不存在直接的数据通路,当主存不命中时只能通过调页解决,CPU最终还是要访问主存。
(3)透明性不同:cache的管理完全由 硬件完成,对系统程序员和应用程序员均透明;而虚存管理由 软件(操作系统)和硬件共同完成,由于软件的介入,虚存对实现存储管理的系统程序员不透明,而只对应用程序员透明(段式和段页式管理对应用程序员“半透明”)。
(4) 未命中时的损失不同:由于主存的存取时间是cache的 存取时间的5~10倍,而主存的存取速度通常比辅存的存取速度快上千倍,故主存未命中时系统的性能损失要远大于cache未命中时的损失。

2、内页表是虚地址到主存物理地址的变换表,通常称为内页表。与内页表对应的还有外页表,用于虚地址与辅存地址之间的变换。当主存缺页时,调页操作首先要定位辅存,而外页表的结构与辅存的寻址机制密切相关。例如对磁盘而言,辅存地址包括磁盘机号、磁头号、磁道号和扇区号等。

3、段式虚拟存储器有许多 优点
①段的逻辑独立性使其易于编译、管理、修改和保护,也便于多道程序共享。
②段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。
段式虚拟存储器也有一些 缺点
①因为段的长度不固定,主存空间分配比较麻烦。
②容易在段间留下许多外碎片,造成存储空间利用率降低。
③由于段长不一定是2的整数次幂,因而不能简单地像分页方式那样用虚地址和实地址的最低若干二进制位作为段内偏移量,并与段号进行直接拼接,必须用加法操作通过段起址与段内偏移量的求和运算求得物理地址。
因此, 段式存储管理比页式存储管理方式需要更多的硬件支持。

4、 虚拟内存设为0或者我们将虚拟内存关掉,那么缺页中断  还会产生吗?
    首先声明一点,这个问题是我在面百度的时候被提问的一道题目:到时脑中混乱,所以回答的也很悲催 ~.~!
    我想用第一点说明一下缺页中断,简单的说,缺页中断就是我们根据逻辑地址在内存中查找不到相应的位置。
    第二点,也是最重要的一点:那么发生缺页中断(又称“缺页异常”)的原因,目前来看有两点:
    [编程错误请求压根就不存在的内存空间]、    [引用属于该进程但还尚未分配物理内存页框](参考《深入理解LINUX内核》)
    第三点,也是公布答案的一点了,在上述产生缺页中断产生的两个原因里面,如若虚存里面没放东西或者压根没开虚存,那么合法的缺页中断肯定不会存在的,那么第一个原因引起的中断会产生吗,恭喜你,答案是肯定的。

5、虚存设置过大的后果:
设置过大的虚拟内存将导致关机过慢甚至几十分钟,例如2G电脑设置16G虚拟内存虽然增加了电脑性能但是关机可能需要几分钟。






你可能感兴趣的:(os)