物理内存,虚拟内存,磁盘swap分区的关系

目录

一、图形简介

二、详解

1、物理内存

2、虚拟内存

3、磁盘swap分区

 4、为了节省内存

4.1、实际用了多少,物理内存就给分配多少

4.2、物理内存什么时候用什么时候分配


一、图形简介

物理内存,虚拟内存,磁盘swap分区的关系_第1张图片

二、详解

1、物理内存

        硬件上,就是内存条。我们知道一个程序运行,必要开一片内存来存储其相关指令和需要用到的堆栈段空间等。

2、虚拟内存

        物理内存总共4G或16G的大小,若每个进程都开4G物理内存,那物理内存就会被很快用完,系统多进程运行也必将受限。

        为了节省物理内存,从逻辑的角度上,我们为每个进程虚拟出4G虚拟内存,每个进程都以为自己拿到了4G内存

        好处是不再为每个进程分配4G物理内存,而是实际用了多少,物理内存就给分配多少

3、磁盘swap分区

        对物理内存扩展,若4G物理内存分配完了,那程序的数据就会存到磁盘swap分区上。

 4、为了节省内存

4.1、实际用了多少,物理内存就给分配多少

        如:一个进程实际用了400M内存,那4G虚拟内存理论上就对应400M的物理内存。因不是一下就分配的(因虚拟内存和swap分区存在,允许程序什么时候用就什么时候分配物理内存),所以某个时间点上,对应的物理内存<400M

4.2、物理内存什么时候用什么时候分配

  • 因cpu只与物理内存交互,所以什么时候用到了swap分区上的数据,什么时候就把数据拷贝或做页面置换到物理内存。
  • 实际上一开始虚拟空间都被映射到了磁盘空间当中(像代码段,常量数据等),只有当访问到此地址时,也就是真正用到的时候,才会将磁盘上的数据拷贝到物理内存中。
  • 像malloc动态分配内存时也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应的设置,当进程真正访问到此数据时,才引发页面异常。

物理内存,虚拟内存,磁盘swap分区的关系_第2张图片

  • 先建立好虚拟内存和磁盘swap分区、虚拟内存和物理内存的映射关系;进程创建时,程序的代码段和数据其实还在磁盘上,并未放到物理内存上
  • 运行到对应的程序时,进程查找页表,根据映射关系,发现其真正的地址(存储的真正位置)并不在物理内存上而是在磁盘上。
  • 此时发生缺页异常 -> 进程阻塞 -> 页面置换或拷贝,将磁盘数据放到物理内存中 -> 进程就绪
  • 进程运行 -> 访问其对应的物理内存

你可能感兴趣的:(Linux,linux,运维,服务器)