首页 > 解决方案 > 术语“运行映射/未映射的操作系统”是什么意思?

问题描述

我目前正在学习操作系统课程。

笔记说:

在某些情况下,操作系统只是在未映射的情况下运行。然后它所要做的就是读取表格并在软件中翻译用户地址。但是,在虚拟地址空间中连续的地址在物理上可能不连续。因此,I/O 操作可能必须分成多个块。

假设操作系统也运行映射,那么它必须为用户区生成一个页表条目。请注意,在任何情况下都不应授予用户访问映射表的权限。

我有三个问题:

标签: operating-system

解决方案


没有足够的上下文来 100% 确定;但我怀疑:

a)当他们说“操作系统”时,实际上是指“内核”。请注意,操作系统是一个巨大的东西,由许多部分(帮助系统、国际化文件、GUI、各种库、用于管理系统的各种实用程序等)组成,其中几乎所有操作系统(除内核之外的所有内容)都是普通用户-空间的东西。

b)“操作系统只是在未映射的情况下运行”实际上意味着内核在禁用 MMU 的情况下运行(因此内核可以直接访问物理内存,而不涉及“将虚拟地址转换为物理地址”)。对于真正的硬件,这是可怕的(CPU 将“虚拟地址到物理地址”的转换缓存在称为 TLB/转换后备缓冲区的东西中,并且在进入内核时禁用 MMU 并在从内核返回时重新启用它会导致 TLB被刷新,由于“TLB未命中”而破坏性能)。

c)“操作系统也运行映射”实际上意味着内核在启用 MMU 的情况下运行(因此内核必须确保将内容映射到虚拟地址空间才能访问它,因为它不能直接访问物理内存)。请注意,内核可能只是将部分/大部分/全部物理内存映射到所有虚拟地址空间,以便它始终“几乎直接”访问物理内存。

当操作系统未映射运行时,为什么 I/O 操作可能必须拆分为多个块?

如果用户空间使用 MMU(将虚拟地址转换为物理地址)并且“在虚拟内存中连续”并不意味着“在物理内存中连续”;到/来自用户空间(例如read()write())的 IO 必须被拆分为设备的“物理上连续”的部分。在这种情况下,内核是否映射(或是否使用 MMU)没有区别——用户空间是否使用 MMU 才重要。

如果内核也使用 MMU 并且“在虚拟内存中连续”并不意味着内核空间的“在物理内存中连续”;到/从内核的 IO 也必须拆分为设备的“物理上连续”的部分。


推荐阅读