gpt4 book ai didi

linux - 内存管理单元(MMU)如何通知操作系统页表更新了?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:55 26 4
gpt4 key购买 nike

我正在探索 Linux 操作系统中的内存管理。

据我所知,MMU是集成在现代CPU中处理地址转换的硬件。如果虚拟地址不在 TLB 中,则MMU会先通过页表基址寄存器(PTBR)获取进程的页表地址,然后从位于物理内存的页表中获取物理地址。

我的问题是:由于操作系统负责页面替换,MMU 如何通知操作系统物理页面已被访问或修改?我在 Linux/mm/swap.c 中看到一个函数。但是我不确定是否每次更新页表时都会调用这个函数。

void mark_page_accessed(struct page *page)
{
if (!PageActive(page) && !PageUnevictable(page) && PageReferenced(page)) {
/*
* If the page is on the LRU, queue it for activation via
* activate_page_pvecs. Otherwise, assume the page is on a
* pagevec, mark it active and it'll be moved to the active
* LRU on the next drain.
*/
if (PageLRU(page))
activate_page(page);
else
__lru_cache_activate_page(page);
ClearPageReferenced(page);
if (page_is_file_cache(page))
workingset_activation(page);
} else if (!PageReferenced(page)) {
SetPageReferenced(page);
}
}

我认为 MMU 可能会修改页表的 PTE 标志。但是操作系统不会只知道操作系统是否进行页表遍历,对吗?而页面替换是在物理页面上进行的,物理页面上是否也有一些标志?我一定错过了一些非常重要的东西..

谢谢

最佳答案

看了一些Linux内存管理的相关书籍。我认为基本步骤包括:

  • 进程想访问一个虚拟地址;
  • 处理器检查 TLB 是否存在从虚拟地址到物理地址的缓存映射;如果找到缓存 map ,则跳转到第 4 步;
  • 使用进程的页表获取物理地址;
  • 如果页面不在物理内存中,触发页面错误并执行页面交换。访问物理页面;
  • 更新页面标志,例如页面->标志中的脏位或引用位。

操作系统保留一个 active_list 来包含最近引用的物理页面,以及一个 inactive_list 来包含回收候选者。页面替换策略在 swap.c 文件中实现。

对于active_list中的一个页面,如果它到达列表的底部,则检查引用的标志。如果设置,则页面移回列表顶部,检查下一页;否则,该页面将移至 inactive_list。

总之,我想,我的问题的答案

How does the memory management unit (MMU) notify the operating system that the page table is updated?

是那个

MMU doesn't notify the operating system that the page table is updated directly. It updates the flag of a physical page (flag in struct page). When the OS is performing page replacement, if a physical page reaches the tail of active_list or inactive_list, the page's flag is checked to determine whether the page needs replaced or moved to the head of the two lists.

关于linux - 内存管理单元(MMU)如何通知操作系统页表更新了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com