内存交换空间

内存交换空间

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

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

页错误和存在位

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

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

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

什么时候进行交换

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

相关推荐
小宇子2B7 小时前
四、从 write(1, "hello", 5) 到 ksys_write() —— sys_call_table 怎么路由的
操作系统
小宇子2B7 小时前
一、printf("hello") 怎么变成 write(1, "hello", 5) —— libc 的 stdout 缓冲机制
操作系统
小宇子2B5 天前
一个 pthread_mutex_lock() 到底锁了什么——从用户态 CAS 到内核调度
操作系统
小宇子2B7 天前
多线程 malloc 为什么会变慢——glibc 的 arena 到 bins 全景
操作系统
fakerth11 天前
【OpenHarmony】communication_ipc模块
操作系统·openharmony
Coisinier11 天前
RHCE中shell脚本基础(磁盘剩余空间监控,Web 服务状态检查,curl 访问 Web 服务并返回状态)
linux·运维·服务器·前端·nginx·操作系统
小宇子2B13 天前
free 完再 malloc 同样大小,为什么常拿回刚还回去的那块?
操作系统
触底反弹14 天前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
杊页15 天前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·操作系统
壮Sir不壮15 天前
GO语言——GMP调度模型
linux·开发语言·golang·go·操作系统·线程·协程