Linux系统编程之虚拟内存

概述

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

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

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

地址转换

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

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

缺页中断

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

相关推荐
一介草民丶28 分钟前
Jenkins | Linux环境部署Jenkins与部署java项目
java·linux·jenkins
字节高级特工29 分钟前
【Linux篇】0基础之学习操作系统进程
linux·运维·服务器·数据结构·windows·学习·list
s_little_monster1 小时前
【Linux】网络--数据链路层--以太网
linux·运维·网络·经验分享·笔记·学习·计算机网络
belldeep4 小时前
WSL 安装 Debian 12 后,Linux 如何安装 curl , quickjs ?
linux·运维·debian·curl·quickjs
%#RulER#%6 小时前
哈工大计算机系统2024大作业——Hello的程序人生
linux·笔记·程序人生
y1x2y36 小时前
【HITCSAPP 哈工大计算机系统期末大作业】 程序人生-Hello’s P2P
linux·程序人生·ubuntu
God_archer6 小时前
程序人生-hello’s P2P
linux·c语言·汇编·程序人生
西域曼波王6 小时前
哈尔滨工业大学计算机系统大作业程序人生-Hello’s P2P
linux·c语言·编辑器·vim
无效的名字7 小时前
如何安装并使用RustDesk
linux·运维·服务器
Amo Xiang9 小时前
Python 解释器安装全攻略(适用于 Linux / Windows / macOS)
linux·windows·python·环境安装