我想我错过了操作系统管理内存的基本概念。
这对进程如何访问内存有意义。但是,我不了解操作系统本身如何访问内存。
假设它使用相同的指令,硬件仍然会从虚拟地址转换为物理地址?例如,是否存在操作系统本身的页表的已知物理位置?我知道这个问题很模糊,甚至无法理解要问什么。
答案 0 :(得分:1)
在某些时候,物理位置必须有一个页表。用于此的方法取决于处理器。
让我举一个基于VAX处理器的简单示例。假设您将逻辑地址空间划分为所有进程共享的系统范围以及每个进程唯一的用户范围。然后为每个范围提供自己的页表。
现在,您可以将用户页面表放在逻辑地址空间的系统地址范围内。
如果访问用户空间中的内存,则转到系统在系统空间中的逻辑地址找到的页表,然后处理器必须使用系统空间的页表转换为物理地址;两级翻译。
如果您使用系统空间页表的逻辑地址,那么您无法将这些地址转换为物理地址。而是使用物理地址定义系统页表的本地。
另一种方法是使用物理地址定义所有页表。
答案 1 :(得分:0)
我不明白操作系统本身如何访问内存。
将操作系统视为一个过程。操作系统基本上是一个进程,就像其他进程一样,具有提升的权限。每当操作系统想要使用eome内存位置时,它就会使用页表进行虚拟到物理地址转换,就像其他进程一样。
以这种方式思考:每个进程都有自己的页表,操作系统也是如此。操作系统会记住这些页表在与每个进程(例如PCB)相关的控制结构中的位置,对于当前运行的进程,页表的地址(物理指针)保存在硬件中(对于x86体系结构,这是在控制寄存器4(CR4)中。在x86上,每当操作系统切换正在运行的进程时,它都会更改CR4中的值,以便地址指向正确的页表(如果它切换到自身,则为自己的页表)。
然而,在现代操作系统中大大简化了这一点,其中内核(OS)被映射到所有进程的内存空间,因此内核可以随时运行而无需切换页表(这是昂贵的) )。一个过程中的页面'属于内核的页表仅限于进程,只有在内核控制完成一些管理任务后才能访问。