内存分布 之 虚拟内存与物理内存的区别

物理内存

物理内存实际上是 CPU中能直接寻址的地址线条数。由于物理内存是有限的,例如32位平台下,寻址的大小是4G,并且是固定的。内存很快就会被分配完,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等待的进程装入内存。这种频繁的装入内存的操作是很没效率的。

这就需要用到虚拟内存了。

虚拟内存

在那个进程创建的时候,系统都会给每个进程分配4G的内存空间,这其实是虚拟内存空间。

进程得到的这4G虚拟内存,进程自身以为是一段连续的空间,而实际上,通常被分隔成多个物理内存碎片,还有一部分存储在外部磁盘存储器上,需要的时候进行数据交换

进程要访问地址的过程

  1. 每次要访问地址空间上的一个地址,都需要把地址翻译成物理地址。
  2. 所有进程共享这一物理地址,每个进程只需要把自己的虚拟地址映射到物理地址上。
  3. 进程需要直到哪些空间地址上的数据在物理内存上,哪些没在(可能在外部磁盘),并在在物理内存的哪里,这就需要页表来记录。
  4. 页表的内容有两部分,第一部分表示此页是否在物理内存上,第二部分记录物理内存页的地址。
  5. 当进程访问某个虚拟地址的时候,就要先去查页表,如果发现对应的数据不在物理内村上,则返回缺页异常。
  6. 缺页异常的处理过程是,操作系统立即阻塞该过程,并将磁盘里的数据换到对应页,然后使该进程就绪,如果内存已经满了,没有空地方了,那就找一个页覆盖,至于具体覆盖的哪个页,就需要看操作系统的页面置换算法是怎么设计的了

参考:https://blog.csdn.net/lvyibin890/article/details/82217193

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页