内存交换空间

内存交换空间

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

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

页错误和存在位

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

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

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

什么时候进行交换

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

相关推荐
香水5只用六神5 小时前
【RTOS快速入门】07_同步互斥与通信概述
单片机·嵌入式硬件·学习·操作系统·freertos·rtos·嵌入式软件
棉花糖超人11 小时前
【操作系统】一、操作系统简介
linux·服务器·操作系统
数据中穿行14 小时前
Linux内核内存管理:源码组成、设计原理与关键点
操作系统
程序员一点1 天前
第17章:SELinux 与系统安全机制
安全·操作系统·系统安全·openeuler·selinux
_OP_CHEN1 天前
【Linux系统编程】(四十五)线程池基础:日志系统设计与策略模式的优雅落地
linux·操作系统·线程池·进程·策略模式·c/c++·日志系统
_OP_CHEN1 天前
【Linux系统编程】(四十七)线程安全与线程锁深度解析:从概念到实战,避坑指南全掌握
linux·操作系统·线程池·进程·线程安全·c/c++·线程锁
♛识尔如昼♛2 天前
操作系统(4)第二章- 进程通信
操作系统·进程·ipc
fanged2 天前
RASPI裸机7(exceptions)
操作系统·嵌入式
_OP_CHEN2 天前
【Linux系统编程】(四十六)线程池原理与实现:从固定线程池到线程安全单例模式
linux·单例模式·操作系统·线程池·进程·线程安全·c/c++
F_Quant10 天前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统