为什么要引入虚拟内存?
扩充逻辑上的内存,使得程序不需要全部,而是部分装入也能运行。
虚拟内存空间由什么因素决定,计算机的地址线数决定。
虚拟内存会解决什么问题,会带来什么问题
解决多道程序中可能存在内存不够的问题。利于多道程序的并发
掌握虚拟内存解决问题的思想,了解几种替换算法的优劣,熟练掌握虚实地址的转换
虚拟内存的基本概念
都是把多个进程同时装入内存,以便允许多道程序设计。它们都具有一下两个共同的特征:
一次性:
作业一次性装入内存后,才开始运行。
这样会导致两种情况:1作业很大不能全部装入内存,使得该作业无法运行。2大量作业要求运行,内存不够全部装入容纳所有作业,只能使得少量作业先运行,导致多道程序度的下降。
驻留性:作业被装入内存后,就一直驻留在内存里,其任何部分都不会被换出,直到作业运行结束。运行中的进程会因等待IO而被阻塞,可能处在长期等待的状态。
时间局部性,刚用过的页面可能不久再用
空间局部性:因为数组向量链表等形式导致集中在一个局部访问
叫这个名字部分因为
系统提供了 装入一部分,请求调入需要的那部分 和满的时候,置换功能 后(用户不可见),导致的结果就是
用户感觉全部的作业都装进了内存。好像有一个比实际的物理内存大得多的存储器。
存储器的大小也是由计算机的地址结构决定,不是内存外存简单相加。
如8根地址线。
决定装入一部分,是根据局部性原理,把常访问的装入内存。其余的留在外存,即可执行程序了。执行的时候访问的信息不在内存的时候,
由操作系统把所需要的部分调进来,接着执行。同时操作系统又把不用的部分调出去,调外存,腾出空间装将要调入内存的信息。
特征(与传统的存储方式对比):
多次:作业没必要一次性装入内存,允许被分成多次调入内存
对换:作业运行时没必要常驻内存,允许作业在运行过程中,进行换进和换出
虚拟:逻辑上扩充内存容量
技术的实现:
可以采用连续分配或者离散分配内存管理方式基础上,但是连续分配导致空间利用率不高,浪费空间。
1请求分页
2请求分段
3请求段页式存储管理
需要操作系统,也需要硬件支持:
1, 一定容量的内存和外存
2, 页表机制作为主要的数据结构
3, 中断机构,如果用户程序访问的部分没调入内存,该机构中断
4, 地址变换机构,逻辑地址到物理地址的变换
建立在基本分页系统基础上,为了支持虚拟存储器 而增加了请求调页和页面置换功能。请求分页是目前常用的实现虚拟存储器的方法。
具体操作:
页表机制:
和基本分页系统不同的是,
发现和处理 要访问的页面不在内存中这种情况是请求分页系统必须处理的问题
页表项为此增加了四个字段:
状态位:指示该页是否被调入内存,供程序访问时参考。
访问字段:记录本页在一段时间内被访问的次数,置换算法参考
修改位:标识该页调入内存后是否被修改过
外存地址,指出该页在外存的地址,物理块号,供调入该页时参考。
缺页中断机构:
访问的页不在内存时,产生一个缺页中断,请求操作系统把所缺的页调入内存。此时应将缺页的进程阻塞,如果内存里有空闲块,分配一个块把调入的页装入该块,并修改该页表项,若此时没有,需要淘汰某页。
缺页中断作为中断,同样要经历诸如保护cpu环境,分析中断原因,转入缺页中断处理程序,恢复cpu环境等几个步骤
它与一般的中断还有区别:
一条指令执行期间,可能产生多次缺页中断。
指令执行期间而不是执行后产生处理中断信号,属于内部中断。
这个地址变换机构是在基本分页基础上,为了实现虚拟内存,增加某些功能而形成的。
请求分页的:
地址变换时,先检索快表。
如果找到要访问的页,修改页表项中的访问位
页面置换算法(决定应该换入哪页,换出哪页)
好的页面置换算法应该是较低的页面更换频率,不要经常换进换出,导致更换的时间比程序执行的时间都长。
下面是几种页面置换算法:
1.最佳置换算法(理想的)
原文:https://www.cnblogs.com/yizhizhangBlog/p/14227148.html