operating-system - 操作系统中的内存管理
问题描述
我是本科生,所以我不确定我的写作是否 100% 准确。它主要基于我从几周前发生的在线讲座中了解到的内容以及我在网上阅读和观看的资源。
因此,在我们关于OS 内存管理的在线课程中,我们谈到了 MMU(每个 CPU 包附带的专用硬件)的使用,它用于将虚拟地址转换为物理地址。
现在在这里,我从 youtube 和 wikipedia 等在线资源中了解到。
编译程序时,编译器或链接器将为程序生成虚拟地址空间(因此两个进程可能具有相同的虚拟地址,并且它还有助于它程序获得连续的内存,而页面可能排列不同在 RAM 中)我不完全确定这如何与解释器 lang 一起工作。
操作系统还为每个进程维护一个页表(位于 DRAM 中),它是 DRAM 中虚拟地址到物理地址的数据结构(如哈希映射)。
CPU 也有一个名为TLB的专用高速缓存来协助 CPU 完成这项工作,以避免浪费它的周期来从页表中获取 DRAM 上的物理地址位置,因为高速缓存更靠近 CPU,它可能更快。
如果没有空间,实际物理内存可能小于虚拟地址空间,这将需要操作系统将页面(也称为页出)交换到磁盘(并且引用维护在磁盘上存储它的位置的页表中)它。(称为虚拟内存)
进程运行时,如果 CPU 得到一个虚拟地址,则查找 TLB,如果未命中,则查找进程页表以访问页的地址及其所在位置,并执行类似的转换hashMap[virtual address] + offset = DRAM address
如果页面存在于 DRAM 中,则一切正常。但是,如果 DRAM 中不存在该页面,则会产生硬件故障,操作系统将这些页面从磁盘带到 DRAM 页面,同时使用新地址更新页面表条目。
在这整个过程中,我不理解或混淆
由于地址转换和页入/页出由 CPU 和操作系统完成,MMU 适合做什么?
解释语言中的虚拟地址空间如何分配?
解决方案
由于地址转换和页入/页出由 CPU 和操作系统完成,MMU 适合做什么?
MMU 是现代 CPU 的一部分。虚拟地址到物理地址的转换由 MMU / CPU 硬件完成。
操作系统内核(软件)负责确保正确配置 MMU(以便将正确的页面映射到用户空间进程地址空间),并负责处理由 MMU 生成的页面错误中断。它还处理更高级别的功能,例如:
- 交换页面进出,
- 跟踪哪些页面是干净的,
- 确保有一个干净的页面池可以在出现页面错误时被驱逐,
- 处理调度问题,例如杀死导致抖动的进程
- 等等。
解释语言中的虚拟地址空间如何分配?
It is the same as for a non-interpreted programming language. In the interpreted case, the interpreter is a user-space (non-privileged) program. The code that it is interpreting is ... data for the interpreter.
推荐阅读
- twitter - Zapier 查找 Twitter URL 提及
- makefile - 为什么 arm-poky-linux-gnueabi-ar 说“invalid option -- 'g'”,而这个选项没有出现在命令行的 args 列表中?
- python - 在python Elasticsearch中滚动不起作用
- azure - 使用 Entity Framework Core 的 Azure Cosmos Db 429 重试策略
- excel - VBA - 将星期几的名称从任何语言更改为英文
- templates - HTML 标记未出现在 Gmail 和 Outlook 中(可能是其他标记)
- javascript - SAPPER - MikroORM:循环依赖,初始化前无法访问“人员”
- awk - 搜索带有字母数字的模式并打印行
- php - 记录更新不正确
- python - 从文本文档中的用户名检索电子邮件时遇到问题