Linux和windows虚拟内存介绍
Tags: LinuxOSswapWindows虚拟内存页面文件
虚拟内存简介
参考:https://www.xmmup.com/cpu-shiruheyuneicunjiaohude.html#xu_ni_nei_cun
在我们日常使用的 Linux 或者 Windows 操作系统下,程序并不能直接访问物理内存。程序都是通过虚拟地址 VA(virtual address)用地址转换翻译成 PA 物理地址(physical address)才能获取到数据。也就是说 CPU 操作的实际上是一个虚拟地址 VA。
想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表。这个映射表在计算机中叫页表(Page Table)。
Linux虚拟内存
详情请参考:https://www.xmmup.com/linuxzhongdejiaohuanfenquswap.html
Linux中的虚拟内存包括物理内存和Swap空间。在Linux系统中,进程使用的内存被划分成固定大小的页面,这些页面可以存储在物理内存中,也可以存储在Swap空间中。当物理内存不足时,操作系统会将一部分不常用的页面移动到Swap空间中,以释放物理内存,这个过程被称为分页交换(Paging)。因此,虚拟内存实际上是物理内存和Swap空间的总和,它为进程提供了比物理内存更大的内存空间。虚拟内存机制使得操作系统和应用程序可以使用比物理内存更多的内存,从而提高了系统的性能和可靠性。
Linux系统的Swap分区,即交换分区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
1. 达到交换的比例配置
1 | # cat /proc/sys/vm/swappiness |
- swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间。
- swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
- linux的基本默认设置为60。
2. 修改交换的比例配置
1 2 3 4 | # vim /etc/sysctl.conf vm.swappiness = 10 # 最后一行新增 # sysctl -p # 加载生效 Bash |
Windows虚拟内存
在 Windows中,虚拟内存(狭义虚拟内存)其实是一个容量很大的文件 pagefile. sys,称之为页面文件。
1. Windows虚拟内存大小
Windows虚拟内存(广义虚拟内存) = 物理内存 + 分页文件(狭义虚拟内存)
2. Windows申请内存机制
Windows申请内存会向整个虚拟内存池中进行申请,具体是分配物理内存还是虚拟内存,看当时内存池中的资源,由于申请≠使用,windows这种分配内存方式让物理内存的利用最大化。
- 提交大小——给当前进程使用而保留的私有虚拟内存的数量,不一定完全被使用。
- 工作集——专用工作集 + 共享工作集。
- 专用工作集——进程独占物理内存。
- 共享工作集——可以和别的进程共享的物理内存值。
3. Windows程序崩溃情况
如果出现内存使用(虚拟内存)使用率接近100%时,当时提交的进程会超出限制,则这个进程会崩溃无响应。观察历史的问题windows主机出现问题的不是最大使用内存的进程,往往是最后一个触发底线的进程。
类似如下图这种情况,可以进行页面文件扩容 观察情况。