gpt4 book ai didi

c - 为什么我们需要在操作系统中进行地址虚拟化?

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:13 25 4
gpt4 key购买 nike

我目前正在学习操作系统类(class),并且遇到了地址虚拟化。我将简要介绍一下我所知道的,然后再提出我的问题。

基本上,CPU(现代微处理器)生成虚拟地址,然后 MMU(内存管理单元)负责将这些虚拟地址转换为 RAM 中相应的物理地址。教授给出的例子是需要虚拟化,因为例如:你编译一个 C 程序。你运行它。然后你编译另一个 C 程序。您尝试运行它,但即使有可用空间,内存中常驻运行的程序也会阻止加载更新的程序。

根据我的理解,我认为没有虚拟化,如果编译器生成两个相同的物理地址,第二个将不会运行,因为它认为没有足够的空间。当我们虚拟化它时,因为在 CPU 中只生成虚拟地址,MMU 将处理这种“冲突”并在 RAM 中为另一个程序找到一个位置。(我们的教授举了 MMU 是一个映射表的例子,这需要虚拟地址并将其映射到物理地址)。我认为这个想法与解决哈希表中的冲突非常相似。

我能否就我的理解听取一些意见,如有任何进一步的说明,我们将不胜感激。

最佳答案

Could I please get some input on my understanding and any further clarification is appreciated.

你的理解大致正确。

说明:

  • 数据结构与哈希表完全不同。

  • 如果有的话,数据结构更接近 BTree,但即使两者也存在重要差异。它确实最接近稀疏分配的 (Java) N 维数组。

  • 它是映射页面而不是完整的虚拟/物理地址。 (一个完整的地址是页面地址+页面内的偏移量。)。

  • 没有碰撞问题。在任何时间点,所有用户/进程的虚拟 -> 物理映射提供从(进程 ID + 虚拟页面)到物理 RAM 页面或磁盘页面(或两者)的一对一映射。


我们使用虚拟内存的原因是:

  • 进程隔离;即一个进程不能看到或干扰另一个进程的内存

  • 简化应用程序编写;即每个进程都认为它有一个连续的内存地址,并且每次都相同。 (第一次近似...)

  • 简化编译、链接、加载;即编译器等,无需在编译时或运行时“重新定位”代码以考虑其他因素。

  • 允许系统容纳比物理 RAM 更多的进程......尽管这会带来潜在的风险和性能损失。

关于c - 为什么我们需要在操作系统中进行地址虚拟化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com