作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看过其他帖子,但没有一个有同样的问题,所以根据我的理解,倒排页表的条目取决于进程id和虚拟页号,在实际页表中如果进程id的信息和虚拟页码匹配然后索引是物理页码/帧号。我的问题是当超过 1 个进程需要该帧/物理内存时会发生什么。你不能将 id 或 vpn 存储在同一个索引中
最佳答案
有趣的问题!我猜这是倒排页表不太流行的原因之一。
一种解决方案是为每个条目附加一个“共享”位,并为每个 pid 创建一个哈希表。当遇到设置了“共享”位的页框时,MMU 应触发一个故障,该故障将导致操作系统使用请求进程的 pid 和虚拟地址索引到哈希表中。在这一点上,它的行为与全局哈希表相同,其中哈希条目包含对。
这样做的一个好处是我们仍然可以在页表条目中使用 pid 字段,因此 1 个共享 pid 将会命中。
一些缺点是每个 pid 的哈希表可能与全局哈希表的大小相同,因此我们有效地将全局哈希表的大小增加了 2^16(或者不管支持多少 pid)!当然,每个 pid 的哈希表可能不会那么大,所以我们可以根据正在使用的条目数动态更改大小。但是,这有其自身的副作用,每当我们想要增加大小时,我们可能不得不驱逐其他页面。
我确信有更好的解决方案,我很想听听他们的意见。
关于memory - 倒排页表如何处理多个进程访问同一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44159535/
我是一名优秀的程序员,十分优秀!