Linux 虚拟内存和物理内存

本文深入探讨了操作系统如何通过虚拟文件系统(VFS)、虚拟内存和进程来屏蔽硬件差异,详细解析了Linux和Windows系统中内核与用户进程虚拟内存的比例,以及虚拟内存空间的布局与管理方式。

         操作系统为了屏蔽I/O底层的差异,创建了VFS(虚拟文件系统),为了屏蔽I/O层与内存之间的差异,产生了虚拟内存。为了屏蔽cpu与内存之间的差异,创建了进程。每个程序运行起来都会拥有一个自己的虚拟地址空间,32位cpu的操作系统,它是一个4GB的内存地址块,其地址线也为32位,所以虚拟地址空间为2^32 -1= 4G。

        在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内核使用那么多物理内存,仅表示它可支配这部分地址空间,根据需要将其映射到物理内存。内核代码和数据总是可寻址,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化。

       Linux虚拟内存空间布局如下:

在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并在内存中为这些段分配空间。栈也由操作系统分配和管理;堆由程序员自己管理,即显式地申请和释放空间。  BSS段、数据段和代码段是可执行程序编译时的分段,运行时还需要栈和堆。

总结:

1、 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构;

2、每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址;

3、所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上;

4、可以认为虚拟空间都被映射到了磁盘空间中,(事实上也是按需要映射到磁盘空间上,通过mmap),并且由页表记录映射位置。

### 物理内存虚拟内存的概念 在 Linux 系统中,物理内存是系统硬件提供的真实内存空间,用于存储正在运行的程序数据。物理内存的大小由系统硬件决定,是有限的资源[^1]。与物理内存相对应的是虚拟内存,它是操作系统为了扩展内存容量而引入的一种机制。虚拟内存通过使用磁盘空间(交换空间)来模拟额外的内存,从而在物理内存不足时提供支持[^2]。 ### 物理内存虚拟内存的区别 物理内存虚拟内存的主要区别在于访问速度存储介质。物理内存直接由内存芯片提供,访问速度快,而虚拟内存依赖于磁盘存储,访问速度相对较慢。当物理内存不足时,Linux 内核会将一些暂时不使用的内存块写入交换空间,从而释放物理内存以供其他用途。当这些数据再次被需要时,它们会从交换空间重新加载到物理内存中[^1]。 ### 虚拟内存的工作原理 Linux 的内存管理采用分页存取机制,将内存划分为固定大小的页。为了充分利用物理内存,内核会在适当的时候将不经常使用的内存页交换到虚拟内存中,而将经常使用的数据保留在物理内存中[^1]。这种机制确保了物理内存的高效利用,同时通过虚拟内存的扩展能力,缓解了内存不足的问题。 Linux 的内存管理策略与 Windows 不同,它倾向于尽可能多地使用物理内存,将硬盘数据缓存到内存中,以提高系统的访问性能。这种机制使得每增加一些物理内存Linux 都能充分利用,发挥硬件投资的效益[^3]。 ### 虚拟内存的优化与监控 在实际使用中,可以通过调整 `swappiness` 参数来控制内核使用交换空间的倾向。该参数的取值范围为 0 到 100,值越低表示内核越倾向于保留在物理内存中,值越高则更积极地使用交换空间。例如,可以通过以下命令查看当前的 `swappiness` 值: ```bash cat /proc/sys/vm/swappiness ``` 如果希望将 `swappiness` 设置为 10,可以使用以下命令: ```bash sysctl vm.swappiness=10 ``` 为了使设置在系统重启后仍然有效,还需要将其写入配置文件 `/etc/sysctl.conf`: ```bash echo "vm.swappiness=10" >> /etc/sysctl.conf ``` 通过合理配置虚拟内存使用策略,可以优化系统的性能,尤其是在物理内存有限的情况下。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值