为什么页面错误通常由操作系统而不是硬件处理?

问题描述 投票:0回答:1

我发现在TLB丢失过程中,某些体系结构使用硬件来处理它,而另一些使用OS。但是,当涉及到页面错误时,大多数人都使用操作系统而不是硬件。

我试图找到答案,但没有找到任何文章解释原因。

有人可以帮忙吗?谢谢。

operating-system paging cpu-architecture virtual-memory page-fault
1个回答
0
投票

如果硬件可以自行处理,则无需进行故障处理。

整个问题是,操作系统尚未将页面连接到硬件页面表中,例如因为它实际上根本不在内存中,或者是因为OS需要捕获写入尝试才能使OS实现写时复制。

页面错误分为三类:

  • valid(该进程在逻辑上已映射了内存,但是操作系统是懒惰的或在玩花招):
    • 硬:该页面需要从磁盘,交换空间或磁盘文件(例如,内存映射文件,例如可执行文件或共享库的页面)中进入页面]
    • soft:不需要磁盘访问,例如,分配+调零新的物理页面以支持用户空间刚刚尝试写入的虚拟页面。或写有多个进程已映射的可写页面的写时复制,但是其中一个对象的更改对另一个对象不可见(例如mmap(MAP_PRIVATE))。这会将共享页面变成私有脏页面。
  • invalid:该页面甚至没有逻辑映射。像Linux这样的POSIX操作系统将SIGSEGV信号发送到有问题的进程/线程。

硬件不知道哪个是哪个,它所知道的只是页面遍历没有找到该虚拟地址的有效页表条目,因此现在是让操作系统决定下一步操作的时候了。 (即引发运行操作系统的页面错误处理程序的页面错误异常。)有效/无效纯粹是软件/操作系统的概念。

这些示例原因并不是详尽的清单。例如操作系统可能会删除页面的硬件映射而没有实际对其进行分页,只是为了查看进程是否很快再次触及该页面。 (在这种情况下,这只是廉价的软页面错误。但是,如果不是,那么它实际上可能会将其分页到磁盘上。如果干净,则将其丢弃。)

© www.soinside.com 2019 - 2024. All rights reserved.