Memory management 操作系统使用的内存

Memory management 操作系统使用的内存,memory-management,operating-system,virtual-memory,Memory Management,Operating System,Virtual Memory,我想我缺少了操作系统如何管理内存的一个基本概念 操作系统负责跟踪物理内存的哪些部分是空闲的。 操作系统创建和管理页表,页表具有虚拟地址到物理地址之间的映射。 对于每个指定虚拟地址的指令,硬件读取页表以获得相应的物理地址。硬件可能知道当前页表位置的一种方法是通过操作系统更新的寄存器。 这对于进程如何访问内存是有意义的。然而,我不明白操作系统本身是如何访问内存的 假设它使用相同的指令,硬件仍将从虚拟地址转换为物理地址?例如,操作系统本身的页表是否有一个已知的物理位置?我知道这个问题很模糊,甚至不知道

我想我缺少了操作系统如何管理内存的一个基本概念

操作系统负责跟踪物理内存的哪些部分是空闲的。 操作系统创建和管理页表,页表具有虚拟地址到物理地址之间的映射。 对于每个指定虚拟地址的指令,硬件读取页表以获得相应的物理地址。硬件可能知道当前页表位置的一种方法是通过操作系统更新的寄存器。 这对于进程如何访问内存是有意义的。然而,我不明白操作系统本身是如何访问内存的


假设它使用相同的指令,硬件仍将从虚拟地址转换为物理地址?例如,操作系统本身的页表是否有一个已知的物理位置?我知道这个问题很模糊,甚至不知道该问什么

我不明白操作系统本身是如何访问内存的

将操作系统视为一个过程。操作系统基本上是一个进程,就像其他进程一样,具有提升的权限。每当操作系统想要使用eome内存位置时,它都会使用页表进行虚拟到物理地址的转换,就像其他进程一样

可以这样想:每个进程都有自己的页表,操作系统也是如此。操作系统记住这些页表在与每个进程(如PCB)相关的控制结构中的位置,对于当前运行的进程,页表的地址物理指针保存在x86体系结构的硬件中,这在控制寄存器4 CR4中。在x86上,每当操作系统切换正在运行的进程时,它都会更改CR4中的值,以便地址在切换到自身时指向正确的页表


然而,这在现代操作系统中得到了极大的简化,操作系统的内核映射到所有进程的内存空间中,这样内核就可以在任何时候运行,而不必切换页面表,这是非常昂贵的。属于内核的进程页表中的页仅限于进程,只有在内核控制执行某些管理任务时才可访问。

在某些情况下,物理位置中必须有页表。用于此操作的方法取决于处理器

让我给出一个基于VAX处理器的简单示例。假设将逻辑地址空间划分为所有进程共享的系统范围和每个进程唯一的用户范围。然后为每个范围指定自己的页面表

现在,您可以将用户页表放置在逻辑地址空间的系统地址范围中

如果访问用户空间中的内存,则转到系统在系统空间中的逻辑地址处找到的页表,然后处理器必须使用系统空间的页表将其转换为物理地址;两级翻译

如果对系统空间页表使用逻辑地址,则无法将其转换为物理地址。相反,系统页表的本地地址是使用物理地址定义的


另一种方法是使用物理地址定义所有页表。

假设使用相同的指令,硬件仍将从虚拟地址转换为物理地址?对例如,操作系统本身的页表是否有一个已知的物理位置?是的。我可以看到操作系统需要额外的内存,它可以分配给自己,并在与其他进程相同的页面表中跟踪。但是在内核加载的初始时间,它需要一个相应的页表。因此,引导过程可能包括一个位于已知位置的内核页表?这取决于特定的CPU以及固件或BIOS如何切换到内核。在操作系统上,我已经为早期内核组装所做的第一件事编写了引导代码,那就是设置一个临时静态页表。这样,您就不必担心在固件切换到内核之前固件离开MMU的状态。在另一个问题中询问它是如何完成的可能更好。