操作系统虚拟内存讲解

写在前面的话

      网上关于虚拟内存的讲解实在太多,看的眼花缭乱,还是不太明白虚拟内存到底是什么,为什么要使用虚拟内存,虚拟内存在程序运行期间起到什么作用,使用虚拟内存有什么好处,带着这些疑问,去查阅了《操作系统概念》这本书,这里总结一下自己的看法,希望日后重温这块内容的时候能很快理解。

      我认为如果想要理解操作系统虚拟内存,至少要有CPU调度和内存管理的知识储备,下面先来简单了解一下CPU调度

CPU调度

      为了便于理解,我们使用单核CPU来了解CPU调度。这样的前提下,CPU一次只允许一个进程运行,任何其他进程必须等待,直到CPU空闲能被调度为止,或者等待的其他进程可以抢占CPU,这样原本运行的进程就要进入等待状态【这里说的不准确,补充进程的五种状态,可以更好理解】暂时理解这些就可以了,CPU调度方面知识还是不少的,可以系统的学习一下。

内存管理

      CPU能够访问的存储器只有内置寄存器和内存,只能从这两种存储器中取指令,然后执行,所以,用户的应用程序想要执行,首要要加载到内存中去,我们应该知道每个进程都有独立的地址空间,但是内存是一整块的,就像是一个数组,为了确保A进程不会访问B进程的数据,需要一种机制可以保证进程的内存保护,确保用户可以访问合法地址范围,并且只访问其合法地址范围。同时要了解计算机的地址空间是从00000开始的,但是用户进程的地址空间的开始地址不必是00000,用户进程可以放到内存的任意位置,这样操作系统在执行进程的时候需要先定位到进程在物理内存中的位置,然后取指令执行指令,这就要求用户程序需要在进行编译加载甚至执行过程完成地址转换
      地址转换其实一个地址空间到另一个地址空间的映射,然后就能引出本文的重点虚拟内存了。
      如果能够理解交换(swap)操作对于理解后面的页面置换有一定的借鉴作用,交换就是内存空间不足的时候,把一些进程从内存中换出到备份存储上。
      然后了解几种内存分配方案,连续内存分配、分页、分段。本文不赘述,主要是理解分页。

虚拟内存

      先说两个概念,逻辑地址和物理地址,CPU所生成的地址称为逻辑地址,内存单元看到的地址,也就是要加载到内存地址寄存器中的地址通常称为物理地址。如果地址转换发生在编译和加载时,逻辑地址和物理地址是相同的,如果地址转换在执行时进行,逻辑地址和物理地址是不同的,需要一个MMU(内存管理单元)来完成逻辑地址到物理地址的映射。如下图,虚拟内存可以比物理内存大很多,物理内存和备用存储之间通过页面置换算法完成调页。

虚拟内存

      注意虚拟内存中页的概念以及物理内存相同大小帧的概念,这里要能够完全明白内存管理中分页方案。如果无法理解分页,是没法弄懂虚拟内存的。分页简单的说就是把物理内存分成相同大小的帧,进程在装入内存的时候也被分割成大小相同的一块一块被装入不同的帧,这样就不必连续,这里就需要内存管理单元完成虚拟内存到物理内存的映射。
同时一个进程也不需要全部一次都装入内存,可以只载入一部分,其他部分先放到备用存储中,当需要的时候再把需要的帧/页调入内存。

虚拟内存的好处

  1. 使得程序可以不受物理内存大小的限制,即使内存很小也可以编写很大的程序。
  2. 因为每个用户进程使用了更少的物理内存,这样物理内存可以装入更多的用户进程,使得多个用户进程可以同时执行(多核多处理器)CPU的使用率也增加了,但是不会影响相应时间。
  3. 由于可以不像swap那样交换整个进程,所以使用的IO更少,用户进程会运行的更快。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值