操作系统中的虚拟内存详解

https://blog.csdn.net/dan15188387481/article/details/49536317

操作系统中的内存管理技术是十分复杂的。现在的操作系统基本都使用逻辑地址和物理地址这两个概念。简单来说,逻辑地址就可以理解为虚拟地址,这个地址是让用户,也就是我们使用者看的,这个地址是虚拟的,并不真实存在,但是经过硬件和软件的配合,将逻辑地址映射到硬件中实实在在的物理地址上,实现了逻辑地址和物理地址的分离。

    当系统执行一个程序或者说开启一个进程并执行它的时候,一般都需要将进程的所有信息都加载到内存中,然后才能让CPU执行,因为内存是直接与CPU交互的,在通常的计算机中,内存就像我们所说的1G、2G、4G、8G等,目前大家使用的多数都是4G左右的内存,这样的内存看起来并不是很小,但是与我们的计算机上的硬盘相比较就十分渺小了,现在我们使用的硬盘一般都在512G以上,很多都使用1T的硬盘,所以这样看来,我们的计算机的内存是十分重要的,也需要谨慎使用。通常大家在使用电脑的时候,都会开启很多程序, 比如说:挂着QQ、听着歌、看着网页等等,这些程序的执行都可以看做一个个进程,这些进程的执行在原始情况下都需要将所有的进程数据和代码等信息都放到内存中才能执行,而这么多程序同时放到内存中,有时候会使得内存满载,导致内存不够用,更甚至于,大家平常玩的大型游戏,例如使命召唤等,可能一个程序所需要的内存容量就大于计算机本身的内存容量,那么这个程序就肯定不能执行了。

    鉴于上述的很多原因,现在的计算机系统基本上都使用了虚拟内存技术,但是需要注意的是,虚拟内存技术确实带来了很多好处,但是这一技术实现起来需要硬件和软件的协调,所以难度比较大。那么什么是虚拟内存呢?刚刚提到过,很多内存管理策略都需要同时将多个进程放在内存中,以便执行这些进程,这些策略都需要在进程执行之前将整个进程放在内存中。而虚拟内存技术允许执行进程不必完全放在内存中,这样我们就可以运行比物理内存大的程序,使得程序员不受内存存储的限制。

    写过完善的程序的程序员都会有一个感触,就是一个项目的程序虽然非常多,但是其实有一部分程序并不经常执行,或者基本上没有执行过,比如说异常处理、错误处理等,那么这些程序使得我们可以只需要加载需要执行的部分,从而减少了内存使用。

    从而,我们可以构造一个大的虚拟内存空间,然后将其映射到较小的物理内存。这个大的虚拟内存空间存储我们进程的所有信息,而当执行进程时,我们只加载需要执行的部分,需要什么再加载什么。这里就需要采用一定的技术,比如按需调页、页面置换、帧分配等,使得进程的执行可以在虚拟内存和物理内存之间进行协调,完成整个程序的执行。

    总的来说,虚拟内存技术主要有以下优点:虚拟内存可以大于物理内存,一般为物理内存的1.5倍到3倍,从而可以运行比物理内存大的程序,进而使得更多的程序可以同时执行,提高了多道程序的程度,增加了CPU的使用率,并且使得进程之间的独立性得到了更好的体现。

    下面简单说下内存的基本管理,通常将逻辑内存进行分页,类似于切蛋糕,将一块大的蛋糕切成很多小块,分页是同样的道理,将逻辑内存分成很多小的页面,然后通过页表,映射到物理内存,而物理内存则划分为很多成为帧的块,从而和页对应起来,页面和帧的对应关系主要是通过页表来保存的,页表中有很多条目,较为详细地保存了这些信息。一般进程都有自己的内存空间,这里可以说有自己的虚拟内存空间,上面所说的虚拟内存技术就是指进程的虚拟内存空间存储了所有的进程信息,然后虚拟内存空间分成很多页,这些页并不是在进程执行时全部换入到物理内存,而是按照需要进行换入,需要哪一页就换入哪一页,这需要一定的算法管理,这里就不再详述。至于十分具体的虚拟内存管理方式和算法大家可以阅读《操作系统概念》一书,上面讲解的十分清楚。

    最后,摘录一些“百度百科”关于虚拟内存的解释,从而全面完善虚拟内存的讲解。

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

    虚拟内存别称虚拟存储器。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。

    虚拟内存是Windows 为作为内存使用的一部分硬盘空间。虚拟内存在硬盘上其实就是为一个硕大无比的文件,文件名是PageFile.Sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件。虚拟内存有时候也被称为是“页面文件”就是从这个文件的文件名中来的。

    内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。

    虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤:

  (1)中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。

  (2)如该组号已在主存内,则转而执行④;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。

  (3)从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。

  (4)从地址变换表读出与逻辑组号a对应的物理组号a。

  (5)从物理组号a和组内字节地址b得到物理地址。

  (6)根据物理地址从主存中存取必要的信息。

    调度方式有分页式、段式、段页式3种。页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点是页内零头小,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点是各页不是程序的独立模块,不便于实现程序和数据的保护。段式调度是按程序的逻辑结构划分地址空间,段的长度是随意的,并且允许伸长,它的优点是消除了内存零头,易于实现存储保护,便于程序动态装配;缺点是调入操作复杂。将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页,程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。

    关于虚拟内存的讲解就到这里,希望大家多多提出意见,有新的看法的读者欢迎留言,谢谢。
--------------------- 
作者:君临丶天下 
来源:CSDN 
原文:https://blog.csdn.net/dan15188387481/article/details/49536317 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值