假设你要运行一个4MB的游戏,为了方便易懂,不妨把这个游戏叫做扫雷。
现在是2021年,早已是大内存时代,16GB的内存已经司空见惯。
但是现在我们假设我们的内存并不大,只有16MB。
你的游戏本来存储在硬盘中, *** 作系统划分了一部分硬盘中的区域,假设是16MB,和内存构成了一个看起来比较大的存储器,总共32MB。
但其实你没这么大的空间。
*** 作系统按照事先定好的页面大小(这里假设是1MB)把你的游戏分割成了4MB/1MB=4页。
未调入内存中运行,在虚拟存储系统中,你总共有4页,这4页,就叫页号。
*** 作系统把真正的内存空间,16MB,也按页划分,总共有16页,现在可以分给你的扫雷用的,有2页。
你的扫雷运行时,并不是时时刻刻都需要4MB的完整数据,假如你正在玩第一关,你就只需要前面的数据。
按照这样的思想,就可以先调入你刚刚分好的4页中的前2页,进入内存,这样你的扫雷就可以跑了,也不需要占据太多空间,导致别的程序用不了。
而被调入的2页,占了真正内存中的2页,内存中的页,就叫页框。
当你需要用到本来4页中的第2页中的某个数据时,他已经在内存中了,你可以随时用。
但如果你要用第3页的里的某个数据,他不在内存,只能先从硬盘中调入第3页到内存中分配给你的2个页框中的某一个,再访问这个数据。
这个就叫缺页。
为了区分说的页是内存中的页,还是虚拟存储系统中的页,就有了两个叫法。
那为什么要这么干呢?因为你需要同时做很多事情。
你需要玩扫雷,还要挂着迅雷,同时上着QQ聊天,可能还用着网易云听歌。
如果扫雷、迅雷、QQ、网易云全部调入主存,很多数据是用不着的。
比如你在玩扫雷第三关,你并不需要第一关的数据。
那全都调入,就很浪费内存。需要调入,不需要调出,这样,你的程序能跑,而且还能跑很多个。
你的存储器看起来比原来大了,因为你本来的内存是无法同时跑这4个程序,现在靠着这个假的存储器就可以了,这个所谓假的存储器就叫虚拟存储器。
常看见中文介绍内存页和页框的概念:
页: page , 是虚拟地址的概念
页框: page frame, 是物理地址的概念
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)