Memory 按需分页交换帧

Memory 按需分页交换帧,memory,operating-system,paging,virtual-memory,Memory,Operating System,Paging,Virtual Memory,免责声明:此问题与我的操作系统类有关。然而,这不是针对任何具体的家庭作业问题。我只是想理解 以下是到目前为止我对请求分页的了解。每个进程都有自己的分页表。此表包含逻辑地址的索引、其对应的物理地址以及指示页面当前是否加载到主存的有效/无效位 当访问页面时,如果有效/无效位设置为有效,则只需通过表中的逻辑地址条目在主存中访问页面。如果页面未包含在物理内存中,则会生成页面错误。这会导致程序尝试将页面加载到内存中 系统首先检查请求的地址是否有效。如果没有,则进程终止。如果地址有效,则系统会检查空闲帧。如

免责声明:此问题与我的操作系统类有关。然而,这不是针对任何具体的家庭作业问题。我只是想理解

以下是到目前为止我对请求分页的了解。每个进程都有自己的分页表。此表包含逻辑地址的索引、其对应的物理地址以及指示页面当前是否加载到主存的有效/无效位

当访问页面时,如果有效/无效位设置为有效,则只需通过表中的逻辑地址条目在主存中访问页面。如果页面未包含在物理内存中,则会生成页面错误。这会导致程序尝试将页面加载到内存中

系统首先检查请求的地址是否有效。如果没有,则进程终止。如果地址有效,则系统会检查空闲帧。如果找到空闲帧,则系统将从磁盘加载请求的数据并将其放置在空闲帧中。有效/无效位在分页表中设置为有效,逻辑地址设置为以前的空闲帧,程序可以继续执行

如果没有空闲帧,则系统必须交换当前使用的帧,并将请求的数据放入帧中。系统使用LRU、MRU等算法来确定要交换的页面。系统交换旧页面,加载新页面,然后将控制权返回给流程

这里是我的问题:当交换完整帧时,如何设置访问此帧的分页表的有效/无效位?也就是说,系统如何知道进程的分页表访问正在交换的帧

这里有一个例子。假设有两个进程,每个进程都有大小为2的分页表和大小为2的物理内存。让进程的分页表如下所示:

处理虚拟内存:

Address  Contents
0        'A'
1        'B'
Address  Contents
0        'C'
1        'D'
进程B虚拟内存:

Address  Contents
0        'A'
1        'B'
Address  Contents
0        'C'
1        'D'
处理分页表:

Logical  Physical  Valid/Invalid
0        0         Valid
1        0         Invalid
Logical  Physical  Valid/Invalid
0        1         Valid
1        0         Invalid
进程B分页表:

Logical  Physical  Valid/Invalid
0        0         Valid
1        0         Invalid
Logical  Physical  Valid/Invalid
0        1         Valid
1        0         Invalid
主存储器:

Address  Contents
0        'A'
1        'C'

现在假设进程A尝试访问其逻辑地址B。系统交换出主内存地址1的内容,并交换到“D”。系统如何知道将进程B分页表中0的逻辑地址的有效/无效位设置为无效?

页表本身或操作系统内核中的其他地方有更多的控制字段,用于区分完全没有映射的内存范围(从未分配/映射或已释放/未映射)一个内存范围,指向一个被调出的内存位置。在这两种情况下,该范围都无法访问,访问都会导致页面错误,但在这些情况下,操作系统处理该页面错误的方式不同。在前者中,它终止进程。在后者中,它尝试将数据带回内存并恢复映射o可访问数据的状态


操作系统知道物理内存页的使用位置。它要么扫描页表以找到该位置,要么查阅自己维护的数据结构。如果操作系统需要从进程中窃取页,它会将其保存(如果已修改),它改变了映射,使流程在没有操作系统干预的情况下无法直接访问此页面,然后在其他地方重新使用此页面,例如,在不同的流程中,使用正确的数据填充此页面,并对其进行适当映射,以便流程可以访问数据。

Awesome。这就是我需要知道的。感谢您的帮助。