操作系统中的内存管理

Memory management in Operating System

我是一名本科生,所以我不确定我的写作是否 100% 准确。它主要基于我从几周前发生的在线讲座中了解到的内容以及我在网上阅读和观看的资源。

因此,在 类 内存管理 OS 中,我们谈到了 MMU 的使用(这是每个 CPU包)用于虚拟地址到物理地址的地址转换。

现在,我从 youtube 和 wikipedia 等在线资源中了解到的内容。

当一个程序被编译时 compiler or the linker would generate the virtual address space for the program(所以两个进程可能有相同的虚拟地址,这也有助于它编程以获得连续的内存,而可能页面在 RAM 中的排列不同)不过,我不完全确定这如何与解释器 lang 一起工作。

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

CPU 也有一个名为 TLB 的专用缓存来协助 CPU 完成这项工作,以避免浪费其周期来从页面 [=60 获取 DRAM 上的物理地址位置=] 因为缓存更接近 CPU 它可能更快。

实际物理内存可能小于虚拟地址 space,这需要 OS 将页面(也称为页面调出)交换到磁盘(并且引用在页面 [=60 中维护) =] 在磁盘上的存储位置)如果没有空间。 (称为虚拟内存)

当进程运行时,如果CPU得到一个虚拟地址就去查找TLB,如果没找到,就去查找进程Pagetable来访问page的地址,它所在的位置并执行像 hashMap[virtual address] + offset = DRAM address

这样的翻译

如果页面存在于 DRAM 中,一切正常。但是,如果 DRAM 中不存在该页面,则会生成 硬件故障 ,OS 将这些页面从磁盘带到 DRAM 页面,同时更新页面 table 条目有新地址。

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

Where does the MMU fit what does it do since the address translation and page-in / page out is done by CPU and OS?

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

操作系统内核(软件)负责确保正确配置 MMU(以便将正确的页面映射到用户-space 进程地址 spaces),以及处理 MMU 产生的页面错误中断。它还处理更高级别的功能,例如:

  • 换页,
  • 跟踪哪些页面是干净的,
  • 确保有一个干净的页面池,如果出现页面错误,可以将其逐出,
  • 处理调度问题,例如终止导致抖动的进程
  • 等等。

How is the Virtual address space assign in interpreted lang?

这与非解释型编程语言相同。在解释的情况下,解释器是一个 user-space(非特权)程序。它正在解释的代码是...解释器的数据。