操作系统中的内存管理



我是一名大学生,所以我不确定我写的是100%准确的。这主要是基于我从几周前的在线讲座和我在网上阅读和观看的资源中所理解的。

在我们关于操作系统中的内存管理的在线课程中我们谈到MMU的使用(它是每个CPU包附带的专用硬件),它用于虚拟地址到物理地址的地址转换。

现在,我从像youtube和维基百科这样的在线资源中了解到的。

当一个程序被编译时,编译器或链接器会为程序生成虚拟地址空间(所以有可能两个进程可以有相同的虚拟地址,它也帮助它的程序获得连续的内存,而它可能是页面在RAM中排列不同),我不完全确定这是如何与解释器语言一起工作的。

操作系统还为每个进程维护一个页表(位于DRAM中),这是DRAM中虚拟地址到物理地址的数据结构(如哈希映射)。

CPU也有一个专用的缓存称为TLB,以帮助CPU在这项工作,以避免浪费它的周期从页表中获取DRAM的物理地址位置,因为缓存更接近CPU,它可能更快。

实际物理内存可能小于虚拟地址空间,这将要求操作系统交换页(也称为页出)到磁盘(并且引用是在磁盘上存储它的位置的页表中维护),如果没有空间。(即虚拟内存)

当进程运行时,如果CPU得到一个虚拟地址,它查找TLB,如果没有,它在进程页表上执行查找,访问页的地址和它所在的位置,并执行转换,如hashMap[virtual address] + offset = DRAM address

如果该页存在于DRAM中,则所有工作正常。但是如果该页在DRAM中不存在,则会产生硬件故障操作系统将这些页从磁盘移到DRAM页,同时用新地址更新页表项。

在整个过程中我不理解或混淆

  • 哪里适合MMU它做什么,因为地址转换和页面入/出是由CPU和操作系统完成的?

  • 如何在解释语言中分配虚拟地址空间?

MMU适合哪里,它做什么,因为地址转换和页面入/出是由CPU和操作系统完成的?

MMU是现代CPU的一部分。虚拟地址到物理地址的转换由MMU/CPU硬件完成。

操作系统内核(软件)负责确保MMU被正确配置(以便将正确的页面映射到用户空间进程地址空间),并负责处理由MMU产生的页面错误中断。它还处理更高级的函数,例如:

  • 交换页面输入和输出,
  • 跟踪哪些页面是干净的,
  • 确保有一个干净的页面池,如果有页面错误可以被驱逐,
  • 处理调度问题,如杀死导致抖动的进程
  • 等等

如何在解释语言中分配虚拟地址空间?

与非解释型编程语言相同。在被解释的情况下,解释器是一个用户空间(非特权)程序。它所解释的代码是……解释器的数据。

最新更新