我正在阅读《操作系统概念》,现在正在读第 8 章!不过,我可以做一些澄清,或者保证我的理解是正确的。
逻辑地址:根据书中所述,逻辑地址是由CPU生成的。这到底是什么意思? (在执行生成的地址系统中..)我假设当为程序编译代码时,该程序具有no知道代码将加载到内存中的位置。编译器所做的只是设置程序布局的总体草图以及图像的布局方式,但不会为其分配任何实际地址。当程序执行时,CPU 获取编译器生成的布局图像,并将一些地址(逻辑地址)分发给代码生成的地址。
物理地址:直到CPU生成一组逻辑地址(由基地址和偏移量组成)之后才会生成物理地址。逻辑地址通过 MMU 或其他设备,并且沿线的某个位置将逻辑地址映射到物理 RAM 地址。
那么实际的区别是什么呢?我可以看到一个好处。使用逻辑地址为应用程序提供了更多自由。如果物理地址是硬编码的,那么程序的成功将在很大程度上取决于物理计算机、可用的 RAM 地址等。
使用转换为物理地址的逻辑地址是否会强加两个步骤而不是一对一的步骤,因此会产生更多的开销?
那么生成后逻辑地址驻留在哪里呢?当 CPU 为进程提供服务时,它们可能存在于 CPU 的寄存器中,但是在此之前和之后,它们去了哪里?我知道这是依赖于实现的。我假设它们可能存储在 CPU 上的某些特殊寄存器空间或缓冲区中,例如 TLB,对吗?如果不是,那么该表可能存在于实际的 RAM 本身中,并且 CPU 仅保存指向 RAM 中表的基地址的指针/地址,对吗?
将地址保存在 RAM 中似乎与逻辑内存地址的目的适得其反。我只能假设我的理解是不正确的。
这个答案绝不是详尽无遗的,但它足以解释它,让事情变得顺利。
在虚拟内存系统中,逻辑地址和物理地址之间存在脱节。
可以为应用程序提供(比方说)4G 的虚拟地址空间。这是它的可用内存,它可以随意使用它。这是一个很好的连续内存块(从应用程序的角度来看)。
然而,这并不是only应用程序正在运行,操作系统必须在它们之间进行协调。在这个漂亮的连续模型下,需要进行大量映射来将逻辑地址转换为物理地址。
通过这种映射,操作系统和硬件(从这里开始我将这些称为较低层)可以自由地将应用程序页面放置在它想要的任何地方(无论是在物理内存中还是换出到辅助存储)。
当应用程序尝试访问逻辑地址 50 处的内存时,较低级别可以使用转换表将其转换为物理地址。而且,如果它尝试访问已换出到磁盘的逻辑内存,则会引发页面错误,并且较低级别可以将相关数据带回内存,无论怎样physical它想要的地址。
在过去的糟糕日子里,当你拥有物理地址时,代码必须是可重新定位的(或在加载时修复),因为它可以加载到任何地方。使用虚拟内存,该代码(和数据)可以同时位于十几个不同进程中的逻辑内存位置 50 - 这是实际的physical但地址会有所不同。
它甚至可以共享,以便一个人physical副本同时存在于许多进程的地址空间中。这是共享代码(因此我们不会使用超出需要的物理内存)和共享内存以允许轻松的进程间通信的关键。
当然,它的效率低于纯物理地址环境,但 CPU 制造商试图使其尽可能高效,因为它被大量使用。优点far胜过缺点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)