本文的内容可从以下博客和书籍中引用:
#comments
《操作系统概念》第六版中文版,高等教育出版社,第9章,由郑Koogen翻译。
“操作系统概念”,第7版,高等教育出版社。
本文的许多部分都是根据我自己的理解编写的。如果有错误,请指出并进行讨论。
1.物理地址和逻辑地址
物理地址:加载到内存地址寄存器中的地址,即内存单元的实际地址。在前端总线上传输的内存地址都是物理内存地址,并且编号从0开始到可用物理内存的最高端。这些数字由北桥(Norbridge芯片)映射到实际的记忆棒。物理地址是最终在总线上使用的确定数字,无需转换,没有分页并且没有特权检查(没有转换,没有分页,没有特权检查)。
逻辑地址:CPU生成的地址。逻辑地址在内部和通过编程使用,并且不是唯一的。例如,在进行C语言指针编程时,您可以读取指针变量本身的值(&操作)。实际上,此值是逻辑地址,相对于当前进程的数据段的地址(偏移地址)。绝对物理地址是相关的。
为什么会有这两种地址?
就个人而言,原因是逻辑地址分配更加灵活,可以被允许为非唯一的,并且看起来更加直观。例如,在一段代码中分配了一个数组,并且逻辑地址是连续的,但是在物理地址上,该数组已被占用。页面可能分散,并且物理地址不连续,这对程序的可理解性。此内,然后使用哈希函数来完成从逻辑地址到虚拟地址的映射。由于虚拟地址较少,因此哈希函数将溢出,因此此处使用了链接。解决溢出。
通过哈希函数计算逻辑地址中的页码(下图中的p),并计算虚拟地址中的页码。根据虚拟页码,可以在O(1)提供了一个寄存器GDTR来存储GDT入口地址。在程序员将GDT设置到存储器中的某个位置之后,可以通过LGDT指令将GDT入口地址加载到该寄存器中。从那时起,CPU将根据该寄存器的内容作为GDT条目访问GDT。
除了GDT之外,还存在LDT(Local Descriptor Table),但与GDT不同的是,系统中可以有多个LDT,每个进程可以有自己的LDT。 LDT的内存地址在LDTR寄存器中。
上图中的TI位用于指示此索引指向的段描述符是存储在全局描述表中还是本地描述表中。 = 0表示使用GDT,= 1表示使用LDT。
RPL位(占2位)是保护信息位。我还没有仔细了解这一点,所以我不会写。
查找线性地址,并将偏移量添加到段描述符之后。转换过程如下:
在Intel 386环境中,将线性地址转换为物理地址的过程类似于在第二个分页内存管理中的分层分页中将逻辑地址转换为物理地址的方法。如下所示。
Intel 80386地址转换的如下:
内存管理部分是操作系统的核心功能之一。这次整理出理论部分,一个是进行回顾,另一个是概述并为深入学习操作系统做准备。
本文中的图片不是我的原创作品,主要来自文章开头引用的博客文章和参考书中的图片。如果有侵权行为,请指出,博客作者将尽快将其删除。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-364143-1.html
)
有利于彻底根治