当出现页面错误时,您是否将页面读入 TLB 以及 PT?
When there's a page fault, do you read the page into the TLB as well as PT?
我目前正在学习虚拟内存,我遇到了一些关于 TLB 未命中和页面错误的问题。我的理解是:
When you have a TLB miss, you go to PT. If PT has a hit, then great, you copy the PT entry from memory to TLB.
When you have a TLB miss, and you also miss when you go to PT, then you go to the disk and copy the page to PT.
至此,您已经将页面复制到PT,但是您是否更新了TLB?例如,您是否也将页面复制到 TLB?还是只更新PT?
谢谢!
您遗漏了一些步骤。首先,您要检查页面 table 条目是否存在。很可能不会。在那种情况下,你有一个内存访问陷阱(某种取决于系统调用它的类型)。其次(条目存在),您将对页面的访问和处理器模式与页面 table 条目允许的进行了比较。如果不允许,您将遇到内存访问陷阱。第四,检查页面是否已经映射到内存。如果是这样,一切都很好。如果不是,则生成页面错误异常。 OS 必须以某种方式处理它。
第五,OS需要重新启动导致错误的指令。
那时,您可能可以将页面添加到 TLB。
我目前正在学习虚拟内存,我遇到了一些关于 TLB 未命中和页面错误的问题。我的理解是:
When you have a TLB miss, you go to PT. If PT has a hit, then great, you copy the PT entry from memory to TLB.
When you have a TLB miss, and you also miss when you go to PT, then you go to the disk and copy the page to PT.
至此,您已经将页面复制到PT,但是您是否更新了TLB?例如,您是否也将页面复制到 TLB?还是只更新PT?
谢谢!
您遗漏了一些步骤。首先,您要检查页面 table 条目是否存在。很可能不会。在那种情况下,你有一个内存访问陷阱(某种取决于系统调用它的类型)。其次(条目存在),您将对页面的访问和处理器模式与页面 table 条目允许的进行了比较。如果不允许,您将遇到内存访问陷阱。第四,检查页面是否已经映射到内存。如果是这样,一切都很好。如果不是,则生成页面错误异常。 OS 必须以某种方式处理它。
第五,OS需要重新启动导致错误的指令。
那时,您可能可以将页面添加到 TLB。