Linux系统编程之虚拟内存

概述

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

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

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

地址转换

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

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

缺页中断

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

相关推荐
云计算练习生4 小时前
什么是缺页中断?页面不在内存时操作系统怎么办
操作系统·虚拟内存·缺页中断
别动我齐刘海4 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
玖石书6 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
xiaoqiMikko6 小时前
Linux 实战(七):useradd、sudoers、umask、SGID、软链 —— 三台真机实测
linux·centos
拂拉氏8 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Fcy6488 小时前
Linux下 五种IO模型的认识与⾮阻塞IO的实现
linux·服务器·io
Mikko79 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
书生执笔画浮沉9 小时前
分享一个开源小工具CAdapt
linux·c·gnu·glibc·kernel·升级·灵感
mounter6259 小时前
Linux 内核热升级(Live Update)技术详解:PCI、VFIO 与 IOMMU 子系统的演进与实战解析引言
linux·linux kernel·kernel·iommu·vfio
砚凝霜10 小时前
【软考信息安全】第十九章 Unix/Linux安全分析与防护
linux·安全·unix