折叠 编辑本段 概述
"逻辑地址" 英文对照
logical address; logic address;
折叠 苏药修破专读衣故春假"逻辑地址"在工具书中的解释
1、在有地址变换功能的计来自算机中,访问指令给出的地址 (操作数) 叫逻辑地址善子初径果八上,也叫相对地址。要经过寻址方式的计算或变换才得到内存储器中的物理地址。
2、把用户程序中使用的地址称为相对地址即逻辑地址。
3、逻辑地址由两个1红右安酸样知6位的地址分量构成,一个为段基值,另一个为偏移量。两个分量均为无符号数编码。
折叠 "逻辑地址"在学术点己包最青预受文献中的解释
1、这样该存储单360百科元的地址就可以用段基拿识仅孔众把汽歌映址(段地址)和段内偏移量(偏移地址)来表示,段基址确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址,通常表示为段地址:偏移地址的形式。
2、所谓逻辑地址是指妒过翻口明简农角按数据的逻辑块号给出的磁盘的位角建号煤京试尽跳另置(l块=512字l字=64位)而物理地址则是由磁盘的柱面、头、段等物理位置所确定的地址。
折叠 编辑本段 产生背景
追根求源常商模策次书着雨统话防,Intel的8位机8080CPU,数据总线(DB)为8位,会帮下地址总线(AB)为16位。那么升斯这个16位地址信息也是要通过8位数据总线来传送,也是要在数据通道中的暂存器,以及在CPU中的寄存器和内存中存放的,但由于AB正好是DB的风转整数倍,故不会产生矛盾半有面育况!
但当上升到16位机后,Intel8086/8088CPU的设计由于当年IC集成技术和外封装及引脚技术的限制,不能超过40个引脚。但又感觉到8位机原来的地址寻址能力2^16=64KB太少了,但直接增加到16的整数倍即令AB=亮班读32位又是达不到明起展吧了海观行完适的。故而只能把AB暂时增加色想特啊缩4条成为20条。则2^20=1MB的寻址能力已经增加了16倍。但此举却造成了AB的20位和DB的16位之间的矛盾,20位地址信息既无法在DB上传送,又无法在16位的CPU寄存器和停交计化村外负果配内存单元中存放。于是应运而生就产生了CPU段结构的原理。
折叠 编辑本段 逻辑与线性
一个逻辑地址由两部份组成,段标识符和段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。后面3位包含一些硬件细节,如图:
逻辑地址索引号,可以理解为数组的下标--而它将会对应一个数组,它又是什么的索引呢?这就是"段描述符(segment descriptor)",段描述符具体地址益扩善犯企光含套得限诗描述了一个段(对于"段"这个字眼的理解:我们可以理解为把虚拟内存分为一个一个的段。比如一个存储器有1024个字节,可以把它分成4段,每段有256个字节)。这样,很多个段描述符,就组了一个数组,叫"段描述符表",这样,可以通过段标识符的前13位,直接在段描述符表中找到一个具体的段描述符,这个描述符就描述了一个段,我刚才对住未进女然跳程革友火地段的抽像不太准确,因为看看描述符里面究竟有什么东东--也就是它究竟是如何描述的,就理解段究竟有什么东东了,每跑乐万值一个段描述符由8个字罪走件持核教按良垂节组成,如下图:
逻辑地址这些东东很复杂,虽然可以利用一个数据结构来言率记定义它,不过,我这里只关心一样,就是Base字段,它描述了一个段的开始位置的线性地址。
Intel设计的本意是,一些全局的段描述符,就放在"全局段究销描述符表(GDT)"中某厂令杂脸春,一些局部的,例如每个进程自己的,就放在所谓的"局部段描述符表(LDT)"中。那究竟什么时候该用GDT,什么时候该用LDT呢?这是由段选择符初零衡来中的T1字段表示的,=0,表战马统格示用GDT,=1表示用LDT。
GDT在内存中的地址和药答季温才至名到大小存放在CPU的gdtr控制寄存器中,而LDT找轻交章象则在ldtr寄存器中。
好多概念,像绕口令一样。这张图看起来要直观些:
逻辑地址首先,给定一个完整的逻辑地址[段选择符:段内偏移地址],
1、看段选择符的T1=0还专流选而师临少是1,知道当前要转换是GDT中的段,还是LDT中的段,再根据相应寄存器,得到其地址和大小。我们就有了一个数组了。
2、拿出段选择符输考协海沿假唱中前13位,可以在这巴讲势个数组中,查找到对应的段描述符,这样,它了Base,即基地址就知道了。
3、把Base 朝谁三让由准断美乡+ offset,就是色标识少映货青附福要转换的线性地址了。