A. 存储器的逻辑地址由哪几部分组成存储器的物理地址是怎样形成的
逻辑地址是指程序员编制的程序地址,由它构成逻辑地址空间。程序主存储器中的实际地址称为物理地址.
所以这里逻辑地址的组成得看你的存储器是段表的还是页表的,物理地址一般通过一个关系来对应逻辑地址.
当然楼上的回答也有正确的地方那就是在一般的寻址中,指令的地址可以是这样计算的,但是他的回答太不全面了.
B. 什么是逻辑地址和物理地址
有网友问到我:什么是逻辑地址和物理地址?怎么转换?针对此问题,我为大家分享了具体的操作 方法 ,希望对你有帮助!
什么是逻辑地址是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在 操作系统 给你分配的内存段操作。
什么是物理地址用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 ——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。 虚拟内存(virtual memory) 这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。 ——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。打住了,这个问题再说下去,就收不住了。逻辑地址(logical address) Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。 ——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些” 线性地址(linear address)或也叫虚拟地址(virtual address) 跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。
逻辑地址和物理地址拓展知识存储器中每一个单元的地址可以用两种方法表示:
1.逻辑地址:其表达形式为“段地址:段内偏移地址”。
2.物理地址:CPU与存储器进行数据交换时在地址总线上
提供的20位地址信息称为物理地址。
物理地址=段地址×10H+段内偏移量
CPU一次处理的数据是16位,地址总线实际上代表CPU的寻址能力,地址线为20条那么CPU实际的寻址能力就是2的20次方就是1M。实际的物理地址是这样形成的:
段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。
例如段地址是1234H,偏移地址是4321H
那么实际的物理地址怎么算呢:1234H*10H+4321H=12340H+4321H=16661H
实际上可以这么来理解,就是段地址左移一位后加上偏移地址就得出实际的物理地址。
这里逻辑地址和物理地址的关系又可以用一个比喻来说明:
比如你的学号是0102,这是你的真实地址亦即物理地址,那么又假如01表示你的班级名称,02表示你相对整个班级的位置,这就是逻辑地址,道理是一样的,只不过在实际由逻辑地址合成物理地址的时候需要将物理地址左移一位,再加上偏移地址。
逻辑地址到物理地址的转换方法以一个例子的形式讲解逻辑地址到物理地址的转换:
某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
则逻辑地址0A5C(H)所对应的物理地址是什么?要求:写出主要计算过程。
解题过程:
首先要知道页式存储管理的逻辑地址分为两部分:页号和页内地址。物理地址分为两部分:
关系为:逻辑地址=页号+页内地址d
物理地址=块号*块长度( 等于页面长度 L )+页内地址;
页号: p = lnt( 逻辑地址 A / 页面长度 L ); d = 逻辑地址 A % 页面长度 L (取余)
分析题:已知:用户编程空间共32个页面,2ˆ5=32得知页号部分占5位,由“每页为1KB”,1K=2^10,可知内页地址占10位。
由“内存为16KB”,2^4=16得知块号占4位。
逻辑地址0A5C(H)所对应的二进制表示形式是:0000101001011100,后十位1001011100是页内地址,
00010(本题特例,因为页面长度为1KB)为为页号,页号化为十进制是2,在对照表中找到2对应的物理块号是11,11转换二进制是1011,11* 2^10 + d即可求出物理地址为10111001011100,化成十六进制为2 E5C;
即则逻辑地址0A5C(H)所对应的物理地址是2E5C;
猜你喜欢:
1. IP地址和物理地址有什么区别
2. 物理地址和逻辑地址的区别
3. 虚拟地址与物理地址的概念
4. 物理地址什么意思
5. 逻辑地址如何转换成物理地址
6. 物理地址有什么用
7. 物理地址作用是什么
C. 什么叫物理地址,是磁头的一种古老的寻址方式
物理地址即磁盘的柱面地址、磁头地址、扇区地址,通过这三个地址来确定数据存储的位置。
CHS(Cylinder/Head/Sector)寻址模式也称为3D模式,是硬盘最早采用的寻址模式,它是在硬盘容量较小的前提下产生的。
硬盘的C/H/S 3D参数既可以计算出硬盘的容量,也可以确定数据所在的具体位置。这是因为扇区的三维物理地址与硬盘上的物理扇区一一对应,即三维物理地址可完全确定硬盘上的物理扇区。三维物理地址通常以C/H/S的次序来书写,如C/H/S为0/1/1,则第一个数字0指0柱面,第二个数字1指1磁头(盘面),第三个数字1指1扇区,表示该数据位于硬盘1盘面上的0磁道1扇区。现在定位已完成,硬盘内部的参数和主板BIOS之间进行协议,正确发出寻址信号,从而正确定位数据位置。
D. 什么是逻辑地址它有哪两部分组成8086cpu的物理地址是如何形成的
1、所谓逻辑地址是指按数据的逻辑块号给出的磁盘的位置(l块=512字l字=64位)而物理地址则是由磁盘的柱面、头、段等物理位置所确定的地址。
2、这样该存储单元的地址就可以用段基址(段地址)和段内偏移量(偏移地址)来表示,段基址确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址,通常表示为段地址:偏移地址的形式。
您也可以试试搭载了第六代智能英特尔酷睿处理器的产品,创新性的使用模式,如实感技术,姿势控制,语音识别,2D/3D影像,突破传统PC使用体验,无论办公学习、畅玩游戏或者观看超高清影像播放,均得心应手,引领产品创新。
E. 举例说明8086中20位物理地址生成过程
现代内存容量太大比如256M,而计算机的数据线往往只有16位、32位或者64位(目前应用很少),他们所能他寻找到的地址空间最大不过是2^16(64K)、2^32(4M)或者2^64(16T),所以内存通常使用段页式存储。也就是将内存空间分成若干段,或者若干页,每段大小是数据线所能访问到的最大空间。在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。
比如在8086系统中,8086对外连接使用一个20位的线性地址唯一确定一个存储单元,也就是说:对于每个存储器单元都有的一个唯一的20位地址,我们称为该单元的物理地址或绝对地址。
8086在内部结构中和程序设计时采用逻辑段管理内存,就形成了逻辑地址。它的表达形式为“段基地址 : 偏移地址”。
逻辑地址=段基地址 : 偏移地址
段基地址(Segment)——逻辑段在主存中的起始位置,简称段地址。由于8086规定段开始于模16地址,所以省略低4位0不显式表达,段基地址就可以用16位数据表示。
偏移地址(Offset)——主存单元距离段起始位置的偏移量(Displacement)。由于限定每段不超过64KB,所以偏移地址也可以用16位数据表示。
这样同一个存储单元就即有物理地址,又有逻辑地址。但是请注意,物理地址是外部连接使用的、唯一的;而逻辑地址是内部和编程使用的、并不唯一。
物理地址和逻辑地址可以互相转换。
将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址。这里左移的4位是二进制位;如果用十六进制表达地址就是左移一位(不知道为什么,复习数制内容吧!还不知道为什么,看疑难解答吧!)。左移4位还可以表达为乘以16,即:段地址×16+偏移地址。
同一个物理地址可以对应多个逻辑地址形式。所以物理地址转换为逻辑地址,需要明确段基地址或偏移地址,然后同上原则确定另一个地址。
逻辑地址 1460H : 0100H 1380H : 0F00H
物理地址 14700H
于是,对于主存14700H单元,我们可以描述为在1460H(或1380H)段的100H(或F00H)单元,或者说主存1460H : 0100H(或1380H : 0F00H)单元。
F. 8086/8088存储器的物理地址是如何形成的
物理地址=基址X16+偏移地址。这里面的16是十进制数,化成16进制数正好是10H。式中的物理地址、基址、偏移地址都是16进制表示~
G. 2.6 什么是逻辑地址什么是物理地址如何由逻辑地址计算物理地址
【解】:物理地址:完成存储器单元或I/O端口寻址的实际地址成为物理地址,CPU型号不同其物理地址也不同。物理地址是指CPU和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,CPU自动选择代码段寄存器CS,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,CPU自动选择堆栈段寄存器SS,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,CPU会自动选择数据段寄存器(或附加段寄存器ES),将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。