0

免责声明:这个问题与我的操作系统类有关。但是,它不适用于任何特定的家庭作业问题。我只是想理解。

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

当一个页面被访问时,如果有效/无效位被设置为有效,那么该页面只是通过表中的逻辑地址条目在主存储器中访问。如果页面不包含在物理内存中,则会产生页面错误。这会导致程序尝试将页面加载到内存中。

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

如果不存在空闲帧,则系统必须换出当前使用的帧并将请求的数据放入帧中。系统采用LRU、MRU等算法来确定换出哪一页。系统换出旧页面,加载新页面,然后将控制权返回给进程。

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

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

进程A虚拟内存:

Address  Contents
0        'A'
1        'B'

进程B虚拟内存:

Address  Contents
0        'C'
1        'D'

处理一个分页表:

Logical  Physical  Valid/Invalid
0        0         Valid
1        0         Invalid

进程B分页表:

Logical  Physical  Valid/Invalid
0        1         Valid
1        0         Invalid

主内存:

Address  Contents
0        'A'
1        'C'

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

4

1 回答 1

1

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

操作系统知道物理内存的页面在哪里使用。它要么扫描页表以找出答案,要么查阅它自己维护的数据结构。如果操作系统需要从进程中窃取页面,它会保存它(如果它已被修改),它会更改映射,以便进程在没有操作系统干预的情况下无法再直接访问该页面,然后在其他地方重用该页面,例如在通过用正确的数据填充它并适当地映射它,以便进程可以访问数据,从而实现不同的进程。

于 2012-04-15T08:47:02.180 回答