好吧,这似乎是一个常见的或已经被问到的问题,但是在搜索了各种书籍、在线教程甚至 SU 之后,我仍然对这四个野兽如何在 x86 保护模式系统上协同工作感到困惑。
讨论这些事情时可以使用的正确术语是什么?
据我了解,这 4 个概念完全不同,但在我们谈论保护内存时却是相关的。这就是我搞砸的地方!
我先从交换开始。
交换:
进程必须在物理内存中才能执行。进程可以暂时从物理内存交换到后备存储,然后再带回内存继续执行。
这特别适用于同时执行多个进程的多任务环境,因此实现了 cpu 调度程序来决定将哪个进程交换到后备存储。
分页:又名简单分页:
假设一个进程拥有它使用/访问的所有地址在 0 到 16MB 的范围内,比如说。我们可以称之为进程的逻辑地址空间,因为地址是由进程生成的。
请注意,根据此定义,一个进程的逻辑地址空间可以与另一个进程的逻辑地址空间不同,因为该进程可能更大或更小。
现在我们将进程的这个逻辑地址空间划分为相同大小的块,称为pages。还将物理内存划分为称为frame 的固定大小的块。
由定义。逻辑地址 = 页#:该页的偏移量
当一个进程被 cpu 调度程序选择执行时,它的页面从后备存储加载到任何可用的内存帧中。
请注意,在将控制权从调度程序转移到该进程之前,属于该进程的所有页面都已加载到内存中。当这个进程被交换到后备存储时,它的所有页面都存储在后备存储上。
后备存储被分成与物理内存帧大小相同的固定大小的块。
这简化了交换过程,因为我们交换的是页面而不是字节。这减少了后备存储的碎片,因为我们不需要为某些字节找到空间,而是查看空间是否可用于页面。
分页技术还减少了物理内存的碎片化,因为我们将页面保留在内存中。
主内存必须为属于进程的所有页面提供空间,以便将该进程加载到内存中以供执行。如果只有这个进程的几页空间,那么一些其他进程(即属于进程的所有页面)必须交换到后备存储,然后只有要执行的进程的所有页面必须加载到内存中。
因此分页技术比简单的交换提供更好的性能。
因此,交换允许我们在不购买太多内存的情况下运行多个进程,相反,我们可以使用少量内存(这个数量必须使得要在 PC 上运行的最大程序/进程的所有页面可以加载到内存中——即你必须知道你的程序在运行之前需要多少内存。)加上一个额外的后备存储,通常是磁盘,对于比主内存大得多的容量,它的成本非常低。
所以交换+分页可以有效地管理内存,以便多个进程可以在一个系统上运行。
需求分页:
但是安装在系统中的物理内存不必与进程的要求相同。还需要运行多个进程。
解决方案是只将进程的部分页面加载到内存中,当进程访问不在内存中的页面中的地址时,就会产生页面错误,操作系统按需加载该页面, 以便进程可以继续执行. 这节省了在将控制转移到该进程之前加载该进程的所有页面的时间 - 就像分页 + 交换的情况一样。
这种仅将进程的一部分保留在内存中,并保留在后备存储(例如磁盘)上的技术称为需求分页。 …
operating-systems virtual-memory memory-management paging protected-mode