39题第四问,逻辑地址物理地址计算转物理地址。虚拟地址不是32位吗?逻辑地址物理地址计算16进制转换为二进制只有13位?

操作系统 逻辑地址转物理地址_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
操作系统 逻辑地址转物理地址
1,2页对应物理块15,18,21,页面大小为4096字节在一分页系统中,逻辑地址长16位,2F6AH的物理地址为多少,0
我有更好的答案
人家问的是21号物理块不能用二进制表示怎么办。。。
请你要耐心看下去,这里的转化稍微有点麻烦,如果是应付考试没有一点问题,如果考研那你还得自己去看书,问题少在baidu上提,多去图书馆多去问老师。(具体步骤 共三步)1.确定虚拟地址(物理地址)的有效位
例如:假设页面大小1KB,共32页。(页面:逻辑地址
页框:物理地址)
由32(KB)=32×1024(B)
即等于32×1024 字节
二进制用多少位能有效表示这么多字节呢——答是:15位
因为32××2^10=2^152.再次确定逻辑地址页面位数
你应该知道:逻辑地址=页号+页面
还是以上假设,那么页面大小为1KB=1024字节
同样的方法计算出表示位数:10位
如果给你逻辑地址:00
那么由:011+(相当于 页号+页面(10位))推得出页号011=33.根据页号找出对应的页框号
由 物理地址=页框号×页块大小(页块大小是等于页面大小的)+页内位移(即页面逻辑地址)
物理地址=页框号×1024B +
( 这里的相加是指位置上而言)
例如:110+110=110110(即高地址+低地址)请采纳答案,支持我一下。
为您推荐:
其他类似问题
逻辑地址的相关知识
等待您来回答逻辑地址线性地址物理地址和虚拟地址理解_博客园
当前位置: >
>逻辑地址线性地址物理地址和虚拟地址理解
逻辑地址线性地址物理地址和虚拟地址理解
& 作者:tureno2011 & 来源: 博客园-tureno &
逻辑地址[段选择符:段内偏移地址],
1、看段选择符的T1=0还是1,知道当前要转换是GDT中的段,还是LDT中的段,再根据相应寄存器,得到其地址和大小。我们就有了一个数组了。
2、拿出段选择符中前13位,可以在这个数组中,查找到对应的段描述符,这样,它了Base,即基地址就知道了。
3、把Base + offset,就是要转换的线性地址了。&还是挺简单的,对于软件来讲,原则上就需要把硬件转换所需的信息准备好,就可以让硬件来完成这个转换了。
三、Linux的段式管理
Intel要求两次转换,这样虽说是兼容了,但是却是很冗余,硬件要求这样做了,软件就只能照办,形式主义。另一方面,其它某些硬件平台,没有二次转换的概念,Linux也需要提供一个高层抽像,来提供一个统一的界面。按照Intel的本意,全局的用GDT,每个进程自己的用LDT——不过Linux则对所有的进程都使用了相同的段来对指令和数据寻址。即用户数据段,用户代码段,对应的,内核中的是内核数据段和内核代码段。include/asm-i386/segment.h
#define&&&&&&&&&&GDT_ENTRY_DEFAULT_USER_CS&&&&&&&
#define&&&&&&&&&&__USER_CS&&&&&&&(GDT_ENTRY_DEFAULT_USER_CS * 8 + 3)
#define&&&&&&&&&&GDT_ENTRY_DEFAULT_USER_DS&&&&&&&
#define&&&&&&&&&&__USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3)
#define&&&&&&&&&&GDT_ENTRY_KERNEL_BASE&&&&&&&
#define&&&&&&&&&&GDT_ENTRY_KERNEL_CS&&&(GDT_ENTRY_KERNEL_BASE+ 0)
#define&&&&&&&&&&__KERNEL_CS&&(GDT_ENTRY_KERNEL_CS * 8)
#define&&&&&&&&&&GDT_ENTRY_KERNEL_DS&&&(GDT_ENTRY_KERNEL_BASE+ 1)
#define&&&&&&&&&&__KERNEL_DS&&(GDT_ENTRY_KERNEL_DS * 8)
把其中的宏替换成数值,则为:
#define __USER_CS&&&&&&&&&&&&&&&&115&&&&&[0&&0&&11]
#define __USER_DS&&&&&&&&&&&&&&&&123&&&&&[1&&0&&11]
#define __KERNEL_CS&&&&&&&&&&&96&&&&&&[0&&0&&00]
#define __KERNEL_DS&&&&&&&&&&&104&&&&[1&&0&&00]
方括号后是这四个段选择符的16位二制表示,它们的索引号和T1字段值也可以算出来了
__USER_CS&&&&&&&&&&&&&&index= 14&&&&&&&&&&&&&T1=0
__USER_DS&&&&&&&&&&&&&&index= 15&&&&&&&&&&&&&T1=0
__KERNEL_C&&&&&&&&&&&index= 12&&&&&&&&&&&&&T1=0
__KERNEL_DS&&&&&&&&&index= 13&&&&&&&&&&&&&T1=0
T1均为0,则表示都使用了GDT,再来看初始化GDT的内容中相应的12-15项(arch/i386/head.S):
.quad 0x00cf9a000000ffff&&&&&&&&&/* 0x60 kernel 4GB code&&&at 0x */
.quad 0x00cfffff&&&&&&&&&/* 0x68 kernel 4GB data&&&&at 0x */
.quad 0x00cffa000000ffff&&&&&&&&&&/* 0x73 user 4GB&&code&&&at 0x */
.quad 0x00cff2000000ffff&&&&&&&&&&/* 0x7b user 4GB&&data&&&&at 0x */
按照前面段描述符表中的描述,可以把它们展开,发现其16-31位全为0,即四个段的基地址全为0。&这样,给定一个段内偏移地址,按照前面转换公式,0 +&段内偏移,转换为线性地址,可以得出重要的结论,“在Linux下,逻辑地址与线性地址总是一致的,即逻辑地址的偏移量字段的值与线性地址的值总是相同的。”&Linux中,绝大部份进程并不例用LDT,除非使用Wine&,仿真Windows程序的时候。
四、CPU的页式内存管理
CPU的页式内存管理单元,负责把一个线性地址,转换为物理地址。从管理和效率的角度出发,线性地址被分为以固定长度为单位的组,称为页(page),例如一个32位的机器,线性地址最大可为4G,可以用4KB为一个页来划分,这页,整个线性地址就被划分为一个tatol_page[2^20]的大数组,共有2的20个次方个页。这个大数组我们称之为页目录。目录中的每一个目录项,就是一个地址——对应的页的地址。&另一类“页”,我们称之为物理页,或者是页框(frame)、页桢的。是分页单元把所有的物理内存也划分为固定长度的管理单位,它的长度一般与内存页是一一对应的。这里注意到,这个total_page数组有2^20个成员,每个成员是一个地址(32位机,一个地址也就是4字节),那么要单单要表示这么一个数组,就要占去4MB的内存空间。为了节省空间,引入了一个二级管理模式的机器来组织分页单元。文字描述太累,看图直观一些:
&&&&&&分页单元中,页目录是唯一的,它的地址放在CPU的cr3寄存器中,是进行地址转换的开始点。
&&&&&&每一个活动的进程,因为都有其独立的对应的虚似内存(页目录也是唯一的),那么它也对应了一个独立的页目录地址。——运行一个进程,需要将它的页目录地址放到cr3寄存器中,将别个的保存下来。
&&&&&&每一个32位的线性地址被划分为三部份,面目录索引(10位):页表索引(10位):偏移(12位)&依据以下步骤进行转换:
(1)&&&&&从cr3中取出进程的页目录地址(操作系统负责在调度进程的时候,把这个地址装入对应寄存器);
(2)&&&&&根据线性地址前十位,在数组中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不再是页的地址,而是一个页表的地址。(又引入了一个数组),页的地址被放到页表中去了。
(3)&&&&&根据线性地址的中间十位,在页表(也是数组)中找到页的起始地址;
(4)&&&&&将页的起始地址与线性地址中最后12位相加,得到最终我们想要的葫芦;这个转换过程,应该说还是非常简单地。
全部由硬件完成,虽然多了一道手续,但是节约了大量的内存,还是值得的。那么再简单地验证一下:
1、这样的二级模式是否仍能够表示4G的地址;页目录共有:2^10项,也就是说有这么多个页表每个目表对应了:2^10页;每个页中可寻址:2^12个字节。还是2^32 = 4GB
2、这样的二级模式是否真的节约了空间;也就是算一下页目录项和页表项共占空间&(2^10 * 4 + 2 ^10 *4) = 8KB。值得一提的是,虽然页目录和页表中的项,都是4个字节,32位,但是它们都只用高20位,低12位屏蔽为0,因为这样,它刚好和一个页面大小对应起来,大家都成整数增加。计算起来就方便多了。但是,为什么同时也要把页目录低12位屏蔽掉呢?因为按同样的道理,只要屏蔽其低10位就可以了,不过我想,因为12&10,这样,可以让页目录和页表使用相同的数据结构,方便。
五、Linux的页式内存管理
原理上来讲,Linux只需要为每个进程分配好所需数据结构,放到内存中,然后在调度进程的时候,切换寄存器cr3,剩下的就交给硬件来完成了(事实上要复杂得多,在此只分析最基本的流程)。前面说了i386的二级页管理架构,不过有些CPU,还有三级,甚至四级架构,Linux为了在更高层次提供抽像,为每个CPU提供统一的界面。提供了一个四层页管理架构,来兼容这些二级、三级、四级管理架构的CPU。这四级分别为:&页全局目录PGD、页上级目录PUD、页中间目录PMD、页表PT。&整个转换依据硬件转换原理,只是多了二次数组的索引罢了,如下图:
那么,对于使用二级管理架构32位的硬件,四级转换怎么能够协调地工作呢?嗯,来看这种情况下,怎么来划分线性地址吧!从硬件的角度,32位地址被分成了三部份;从软件的角度,由于多引入了两部份,也就是说,共有五部份。——要让二层架构的硬件认识五部份也很容易,在地址划分的时候,将页上级目录和页中间目录的长度设置为0就可以了。这样,操作系统见到的是五部份,硬件还是按它死板的三部份划分,也就共建了和谐计算机系统。&这样,虽说是多此一举,但是考虑到64位地址,使用四层转换架构的CPU,此时不再把中间两个设为0了,这样,软件与硬件再次共建了和谐计算机系统——抽像,强大呀!&例如,一个逻辑地址已经被转换成了线性地址,0x,换成二制进是:&
&内核对这个地址进行划分PGD =
PUD = 0 PMD = 0 PT =
现在来理解Linux高招,因为硬件根本看不到所谓PUD,PMD,所以,本质上要求PGD索引,直接就对应了PT的地址。而不是再到PUD和PMD中去查数组(虽然它们两个在线性地址中,长度为0,2^0 =1,也就是说,它们都是有一个数组元素的数组),那么,内核如何合理安排地址呢?从软件的角度上来讲,因为它的项只有一个,32位,刚好可以存放与PGD中长度一样的地址指针。那么所谓先到PUD,到到PMD中做映射转换,就变成了保持原值不变,一一转手就可以了。这样,就实现了“逻辑上指向一个PUD,再指向一个PDM,但在物理上是直接指向相应的PT的这个抽像,因为硬件根本不知道有PUD、PMD这个东西”。&然后交给硬件,硬件对这个地址进行划分,看到的是:页目录&=
offset = &嗯,先根据(32),在页目录数组中索引,找到其元素中的地址,取其高20位,找到页表的地址,页表的地址是由内核动态分配的,接着,再加一个offset,就是最终的物理地址了。
相关阅读:
来源:(微信/QQ:,微信公众号:makaidong-com) &&&&&& 欢迎分享本文,转载请保留出处!
&&&&&& 【原文阅读】:
上一篇:没有了
【相关文章】
每日最新文章
每日最热文章
本周最热文章
本月最热文章
本年最热文章
Powered by
Copyright &
, All Rights Reserved看过本文章的还看过。。。
逻辑地址、线性地址、物理地址和虚拟地址理解_计算机软件及应用_it计算机_专业......
物理地址与线性地址详解_计算机硬件及网络_it计算机_专业资料。一篇关于线性地址与物理地址的详细介绍物理地址与线性地址详解 linear space & physical space 在硬.........
pentium微处理器在保护模式下,存储空间采用逻辑地址、线性地址和物理地址来进行描述,在处理过程中它们之间的转换顺序是 a.逻辑地址→线性地址→物理地址b.线性地址→.........
pentium微处理器在保护模式下,存储空间采用逻辑地址、线性地址和物理地址来进行描述,在处理过程中它们之间的转换顺序是 a.逻辑地址→线性地址→物理地址b.线性地址→.........
段页式结构的寻址过程: 虚拟地址通过分段管理机制转换成线性地址, 然后得到的线性地址通过分页管理机制转换成 物理地址。分页管理机制是可选的,如果没有采用分页管理.........
(10) 保护方式下, 段基地址加偏移地址就是 ⑦错⑧对⑨错②错③对④错 线性地址或物理地址。 〔解答〕 ①错⑤错⑥对⑩对 判断题 (1)对一个正整数,它的.........
( 3)分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个...答:物理地址=该段在主存的起始地址+页框号*大小+页内地址。 同理可得 1ac........
段页式结构的寻址过程: 虚拟地址通过分段管理机制转换成线性地址, 然后得到的线性地址通过分页管理机制转换成 物理地址。分页管理机制是可选的,如果没有采用分页管理.........
线性表的逻辑顺序与存储顺序总是一致的。错,理由同 7。链式存储就无需一致。 三、单项选择题( c )数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是.........
答:线性地址是连续的不分段的地址; 逻辑地址是由程序提供的地址; 物理地址是内存......
假设 分页机制采用的转换映射把 线性地址空间的 xxxxxh 页映射到物理地址空间的 yyyyyh 页,那么线性 地址 xxxxxxxxh 被转换为 yyyyyxxxh。因此,线性地址到物理.........
在 80x86 中,什么是逻辑地址、线性地址、物理地址? 答:线性地址是连续的不分段的地址;逻辑地址是由程序提供的地址;物理地址是 内存单元的实际地址。
哪个部件实现线性地址到物理地址的转 换? 描述符表包含什么内容?采用描述符表有什......
答:物理地址=该段在主存的起始地址+页框号*大小+页内地址。
为什么说...(3)分页的作业地址 空间是一维的,即单一的线性地址空间,程序员只需利用一个.........
给出 ia-32 段页式保护模式下(采用 4kb 页面大小与两级分页方式的)逻辑地址和线性地址的构成及转 换成物理地址的方法。 1 三.编码题(每小题 10 分,共 40 .........
这样,操作系统可以访问 gdt、ldt、tr,而 gdt、ldt 是 逻辑地址形成线性地址的关键, 因此操作系统可以掌控线性地址。物理地址是由 内核将线性地址转换而成的, 所以.........
编译程序对高级语言源程序进行翻译时,需要在该程序的地址空间中为变量指定地址,这种地址称为 (16) 。 a.逻辑地址b.物理地址c.接口地址d.线性地址_答案解析_........
编译程序对高级语言源程序进行翻译时,需要在该程序的地址空间中为变量指定地址,这种地址称为 ()。 a.逻辑地址 b.物理地址c.接口地址d.线性地址_答案解析_2016年.........
的长度为 6 页,试将十六进制的虚拟地址 0a5c、103c、1a5c 转换成物理地址...?
试说明在树形目录结构中线性检索法的检索过程,并画出相应的流程图。 ?.........
最大支持的 32 位地址空间,而在 64 位方式下, 采用 em64t 技术,支持 64 位操作,同时支持 36 位的物理地址,支持 64 位线性地址,默认的地址空 间为 64 位.........
■ 热门推荐十六进制转物理地址_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
十六进制转物理地址
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 物理地址与逻辑地址 的文章

 

随机推荐