Linux系统编程之虚拟内存

概述

计算机内存是临时存储数据的地方,它比硬盘快得多,但容量有限。现代操作系统通过虚拟内存技术,使得每个进程都感觉自己独占整个地址空间,这不仅提高了安全性,也简化了内存管理。

物理内存:实际安装在计算机上的RAM,它是计算机直接使用的高速存储器,所有正在运行的进程和操作系统内核共享同一块物理内存。相比硬盘等其他存储设备,物理内存提供了极高的读写速度。但受制于硬件限制,物理内存的大小通常是固定的,比如:4GB、8GB或更大。

虚拟内存:是一种抽象层,允许操作系统为每个进程提供独立的、连续的地址空间,即使实际的物理内存可能被分割成不连续的部分。

地址转换

虚拟内存的一个重要特性是:地址转换,即把虚拟地址转换为物理地址。这个过程,是由操作系统和硬件共同完成的。操作系统维护着一个映射表,用于记录虚拟地址和物理地址之间的对应关系。MMU是CPU中的一个硬件组件,负责执行地址转换操作。

当进程试图访问某个虚拟地址时,MMU会查找对应的页表条目,找到相应的物理地址后进行访问。如果所需页面不在物理内存中,则会发生缺页中断(Page Fault)。此时,操作系统会将该页面从磁盘加载到内存中。

缺页中断

缺页中断是一个关键的内存管理机制,发生在当程序试图访问一个尚未加载到物理内存中的虚拟地址时。这种机制使得操作系统能够在内存不足的情况下继续运行多个进程,并有效地管理内存资源。

缺页中断的处理步骤主要有五步,下面详细进行介绍。

1、触发缺页中断。CPU尝试访问一个虚拟地址,但该地址对应的页面不在物理内存中。

2、查找页表。操作系统检查页表,确认该虚拟地址是否已经映射到了某个物理地址。如果没有找到有效的映射,则确定这是一个合法的缺页。如果找到了无效的映射(试图访问未分配或保护的内存),则会产生段错误。

3、页面调度。对于合法的缺页,操作系统需要将所需的页面从磁盘加载到物理内存中。这可能涉及以下几种情况。

(1)页面在交换分区中。操作系统将页面从交换分区加载回物理内存。

(2)页面在文件系统中。对于内存映射文件,操作系统会从文件系统读取数据并加载到内存中。

(3)新分配的页面。如果是首次访问的新分配页面,操作系统会为其分配新的物理内存页。

4、更新页表。一旦页面被加载到物理内存中,操作系统更新页表以反映新的映射关系。

5、恢复执行。操作系统返回控制权给引发缺页中断的进程,使其继续执行原来的指令。

总结

虚拟内存是操作系统提供的一个抽象层,它为每个进程提供了一个独立且连续的地址空间。这种设计带来了以下几个好处。

隔离性。不同进程之间的内存空间是相互隔离的,一个进程无法直接访问另一个进程的内存,从而提高了系统的安全性和稳定性。

灵活性。即使物理内存不足,虚拟内存也可以通过交换分区来扩展,即将部分内存数据暂时存储到硬盘上。

效率提升。虚拟内存管理系统可以优化内存页面的分配和回收,减少内存碎片化问题。

相关推荐
即将头秃的程序媛2 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin2 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧4 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天4 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º5 小时前
【Linux网络编程】网络基础
linux·服务器·网络
笑衬人心。5 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
chanalbert7 小时前
CentOS系统新手指导手册
linux·运维·centos
星宸追风7 小时前
Ubuntu更换Home目录所在硬盘的过程
linux·运维·ubuntu
热爱生活的猴子8 小时前
Poetry 在 Linux 和 Windows 系统中的安装步骤
linux·运维·windows
myloveasuka8 小时前
[Linux]内核如何对信号进行捕捉
linux·运维·服务器