Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 如果MMU已经有页表,为什么操作系统需要页表?_Operating System_Mmu - Fatal编程技术网

Operating system 如果MMU已经有页表,为什么操作系统需要页表?

Operating system 如果MMU已经有页表,为什么操作系统需要页表?,operating-system,mmu,Operating System,Mmu,我对虚拟内存管理的操作系统和MMU之间的界限感到困惑 如果MMU负责将虚拟地址转换为物理地址,并且有一个内部页表,那么为什么操作系统还需要一个页表呢?需要告诉MMU操作系统希望它如何将虚拟地址转换为物理地址(通常,当根本不进行翻译时——例如,如果需要从磁盘获取虚拟地址处的页面,或者如果对页面的访问应被视为程序员错误——例如,取消引用空指针) 为此,操作系统提供页表,MMU使用页表将虚拟地址转换为操作系统的物理地址 本质上,操作系统和MMU共享页面表(MMU没有自己的页面表) 请注意,MMU可以缓

我对虚拟内存管理的操作系统和MMU之间的界限感到困惑


如果MMU负责将虚拟地址转换为物理地址,并且有一个内部页表,那么为什么操作系统还需要一个页表呢?

需要告诉MMU操作系统希望它如何将虚拟地址转换为物理地址(通常,当根本不进行翻译时——例如,如果需要从磁盘获取虚拟地址处的页面,或者如果对页面的访问应被视为程序员错误——例如,取消引用空指针)

为此,操作系统提供页表,MMU使用页表将虚拟地址转换为操作系统的物理地址

本质上,操作系统和MMU共享页面表(MMU没有自己的页面表)


请注意,MMU可以缓存转换(例如TLB条目)以提高性能,但(有限大小)缓存与完整的原始表不同。也有一些(不太常见的)体系结构,其中MMU只有一个缓存,根本不使用页表(以及出现“TLB未命中”时)CPU/MMU要求操作系统确定翻译应该是什么),这更灵活(操作系统可以对页表使用它喜欢的任何东西,因为它不必符合MMU的期望),但速度较慢(TLB未命中成本较高).

所以MMU基本上只是为了加快转换过程?而且操作系统已经知道每个虚拟页到物理页的映射?是的,MMU使其足够快以实用(例如,软件无法为每个指令转换“指令指针的虚拟地址”);操作系统知道操作系统想要什么(并知道何时更改所需内容-例如,进程启动或停止,或调用
mmap()
brk()
,或将数据传输到交换空间或从交换空间传输数据,或将数据传输到内存映射文件或…)。您提到的MMU(具有比缓存更多的存储)吗通常包含操作系统提供的完整页表?该存储称为什么?我提到了两个备选方案-一个是在操作系统和MMU之间共享页表(MMU也可能有缓存);另一个(不太常见),MMU只有缓存(没有其他)