物理地址、线性地址、虚拟地址(1)

原创 2016年06月03日 15:26:44

                                    物理地址、线性地址、虚拟地址

OS充分挖掘硬件潜能。

    OS开发者需要知道物理内存的地址也需要提供一套机制为应用程序员提供另一个内存空间,这个内存空间的大小可以和实际的物理内存大小之间没有关系。

 

物理地址:物理内存条所提供的内存空间,每个内存单元的实际地址就是物理地址。

线性地址:一段连续的、不分段的范围从0到4GB的地址空间,一个线性地址就是线性地址空间的一个绝对地址。

虚拟地址:应用程序员看到的内存空间,其中的地址就是虚拟地址,一般用段:偏移量的形式来描述。

 

mov ax,[1024];

        实模式下,把某一个寄存器左移四位然后与16位偏移量[1024]相加。相加后的结果就是物理地址而1024就是虚拟地址。

        在保护模式下就不是了,保护模式下需要一个MMU(内存管理单元)硬件,MMU的功能是将虚拟地址映射为物理地址。MMU是一个硬件电路包含两部分,分段部件和分页部件。分段机制把一个虚拟地址映射为线性地址,而分页部件将线性地址映射为物理地址。

分段机制

        程序中的虚拟地址表示为选择符:偏移量这样的形式。

        把一个虚拟地址转化为线性地址的步骤:

(1)在段寄存器中装入段选择符,同时把32位地址的偏移量装入某个寄存器。

(2)根据段选择符中的索引值,TI值RPL值,再根据相应描述符中的段地址和段界线,进行一系列合法性检查如果该段无问题就取出相应的描述符放入段描述符高速缓冲寄存器中。

(3)将段描述符中的32位段地址和放在寄存器中32位有效地址相加就形成32位线性地址。

对段进行保护从两个方面:

(1)如果偏移量大于段界线,虚拟地址将没有意义,系统产生保护异常。

(2)如果要对一个段进行访问,系统会根据段的保护属性检查访问者是否具有访问权限。如果没有则产生异常。

        为了实现虚拟地址到线性地址的映射需要一个数据结构来描述段,这个数据结构就是段描述赋,它里面包含三部分:1.短的基地值(在线性地址中间段的起始地址)2.短的界线(在虚拟地址空间中,段内可以使用的最大偏移量)3.段的保护属性(表示段的特性,比如段是否可被读出或者写入,或者该段是否最为一个程序来执行以及段的特权及等)

        段描述赋组成的表叫段表,其中的表项就是段描述符。段描述符就是描述段属性的一个8字节的存储单元。一个段描述符中有32位段基地值和20位段界线等等一些其他的段的属性。

        在保护模式下,有三种类型的描述符表。全局描述符表(GDT)/中断描述符表(IDT)/局部描述符表(LDT)。为了加快对描述符表的访问专门设计了专门的寄存器GDTR/LDTR/IDTR以存放表的基地值及表的长度界线。

        在保护模式下段寄存器中存放的是段描述符表的索引。索引表示的是段描述符在段描述符表中的位置,把段寄存器也叫选择符。选择符(即段寄存器)由三个域,第一个是索引域,第二个是TI为选择域,决定从全局描述符表还是局部描述符表中选择相应的段描述符。第三个域是RPL域决定请求者的特权及,一般是用户太和内核太两种。

 

 

 

 

逻辑地址、线性地址、物理地址和虚拟地址

一、概念 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 ——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以...

linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一)

虚拟地址 、物理地址 、线性地址 、逻辑地址

逻辑地址、虚拟地址、线性地址、物理地址

逻辑地址、虚拟地址、线性地址、物理地址的区别:虚拟地址:在保护模式下,虚拟地址由段选择子+段内偏移量组成。利用段选择子可以获取到段描述符,再从段描述符中取得段的基地址。也就是说虚拟地址就是xxxx:y...

物理地址,虚拟地址,线性地址及逻辑地址

本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/8271158 ---------------...

逻辑地址、线性地址、物理地址和虚拟地址

这个转换过程,应该说还是非常简单地。全部由硬件完成,虽然多了一道手续,但是节约了大量的内存,还是值得的。那么再简单地验证一下:   1、这样的二级模式是否仍能够表示4G的地址;   页目录...

关于虚拟地址,线性地址,逻辑地址还有物理地址的区分

本文主要是参考Linux0.11内核的32位地址区分,不过于现阶段的64位地址区分差别不太大,理解Linux0.11,有助于理解现阶段的64位体系下地址的概念。 (注意x86体系是小端存放数据) ...

我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)

本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连...

逻辑地址、线性地址、虚拟地址、物理地址

看了那么多 关于什么是逻辑地址、线性地址、虚拟地址、物理地址的文章,觉得这个讲的还是挺详细的 逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地...

[转]我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)

本文转自http://bbs.chinaunix.net/thread-2083672-1-1.html 写的太好了,推荐 要过年了,发个年终总结贴,只是个人理解,不包正确哈。 本贴...

虚拟地址 线性地址 物理地址

要过年了,发个年终总结贴,只是个人理解,不包正确哈。 本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。 一、概念 物理地址(p...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:物理地址、线性地址、虚拟地址(1)
举报原因:
原因补充:

(最多只允许输入30个字)