内存交换空间

内存交换空间

在现代操作系统中,会把一些当前没有用的内存空间中的内容保存到硬盘中。这使得操作系统可以提供虚拟内存空间的高度抽象,简化了上层程序员的工作。

我们在硬盘上开辟一部分空间用于物理页的移入和移出,这样的空间称之为交换空间。

页错误和存在位

在将一个虚拟地址转为物理地址时,在查找到的PTE中有一个存在位,这标志着当前物理页是否在内存中(有可能在交换空间中)。访问不在物理内存中的页,这种情况称为页错误。

发生页错误时,硬件会触发一个异常,这个异常由操作系统负责处理,它会调用一个页错误处理程序。该程序会查找需要访问的物理页所在的交换空间,并将硬盘中的页加载到内存中。当该页加载到内存中后,操作系统会更新页表,将该页的PTE的存在位标记为存在,并重试指令。

请注意,当 I/O 在运行时,进程将处于阻塞(blocked)状态。因此,当页错误正常处理时,操作系统可以自由地运行其他可执行的进程。因为 I/O 操作是昂贵的,一个进程进行I/O(页错误)时会执行另一个进程,这种交叠(overlap)是多道程序系统充分利用硬件的一种方式。

什么时候进行交换

操作系统不会等到物理内存满时才利用交换空间:

相关推荐
OpenAnolis小助手7 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
硅基手札16 小时前
操作系统设计思想系列 13 · NuttX 深度 — POSIX 飞控底座 + RTOS 群像
架构·操作系统·嵌入式开发·ecos·sel4·nuttx
2CM_Embed2 天前
μC/OS-II 任务管理详解(三):任务创建、任务栈、删除、优先级修改与挂起恢复
操作系统
硅基手札2 天前
操作系统设计思想系列 11 · ThreadX 深度 — 预抢占阈值·认证型设计
操作系统·开源项目·嵌入式开发·嵌入式操作系统·设计思想·threadx
云计算练习生2 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
硅基手札3 天前
操作系统设计思想系列 10 · VxWorks 深度 — 硬实时旗舰·完全抢占内核
操作系统·实时操作系统·嵌入式开发·vxworks·设计思想
m0_547486663 天前
《Ubuntu Linux操作系统与实验教程》全套PPT课件2026
linux·ubuntu·操作系统
kyle~3 天前
C++ 原子操作、内存模型与无锁并发编程
linux·开发语言·c++·操作系统
硅基手札3 天前
Android 系统全景专栏 00 · 总目录
android·操作系统·嵌入式开发
m0_547486663 天前
《Linux操作系统应用项目教程》全套PPT课件2026
linux·运维·操作系统