免责声明:这个问题与我的操作系统类有关。但是,它不适用于任何特定的家庭作业问题。我只是想理解。
到目前为止,这是我认为我对需求分页的了解。每个进程都有自己的分页表。该表包含逻辑地址的索引、其对应的物理地址以及指示页面当前是否加载到主存储器中的有效/无效位。
当一个页面被访问时,如果有效/无效位被设置为有效,那么该页面只是通过表中的逻辑地址条目在主存储器中访问。如果页面不包含在物理内存中,则会产生页面错误。这会导致程序尝试将页面加载到内存中。
系统首先检查请求的地址是否有效。如果不是,则终止该过程。如果地址有效,则系统检查空闲帧。如果找到空闲帧,则系统从磁盘加载请求的数据并将其放置在空闲帧中。将分页表中的有效/无效位设置为有效,将逻辑地址设置为之前的空闲帧,程序可以继续执行。
如果不存在空闲帧,则系统必须换出当前使用的帧并将请求的数据放入帧中。系统采用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的有效/无效位设置为无效?