日期:2014-05-16  浏览次数:20722 次

逻辑地址、物理地址、线性空间、全局段、局部段 问题请教,高手指教了!!!!在线等,高手指教了!!!在线等!!!!!!!!
linux下虚拟存储,把虚拟空间通过分段转化成线性空间,又通过分页把线性空间转化成物理地址,而线性空间内又包含若干个全局段、局部段。这是怎么回事,全局段、局部段不是同过分段机制分出来的吗,而线性地址也是分段出来的,但是好像只分了一次段,怎么出来这么多段,还有就是线性地址是做什么的,是给进程用的吗,不是很清楚,高手指点一下。为什么要把他分成32位的线性地址之后在转化成32位的物理地址,高手指教了,本人菜鸟!!!!!!高手指教了!!!谢谢,麻烦了!!!!!!!!11

------解决方案--------------------
你概念有点混乱,去看intel80386芯片手册,或者n多讲操作系统原理的书。
首先,分段是系统程序员可控的,分页对程序员是透明的,在分页中程序员能做的是设置页目录表也页表,之后的映射就是处理器完成的了
在没有开启分页机制的时候,线形地址=物理地址
开启了分页机制后寻址方式发生变化,所以线形地址不是物理地址,如果是二级页寻址的话,32位的线形地址就分成3个部分,分别指明页目录表偏移,页表偏移,页内偏移。这样去确定一个物理地址
还有不知道你说的全局段局部段是什么意思,你是指的GDT和LDT??
关于平坦模式下访问4G内存的问题,好像要涉及到一个A20地址总线的问题,具体记不太清楚了,似乎是超过范围可以重头寻址,这个查一下芯片手册
------解决方案--------------------
建议LZ学习386的基本知识!
李彦昌的《80x86保护模式系列教程》很不错!
http://dsdm.blogchina.com/inc/ASMTutorial.rar
------解决方案--------------------
是把操作系统存储在虚拟地址空间的一个公共区域,然后,再使每一任务按此区域分配一个同样的虚拟地址空间,并进行同样的虚拟--物理地址映射。各个任务公用的这部分虚拟地址空间,被称为全局地址空间。 -----------虚拟地址空间是所有作业公共的区域吗?还是每一个作业有一个虚拟地址空间,按照机器指令寻址定义虚拟地址空间应该是每个作业都都一个虚拟地址空间,那这个公共区域是怎么回事?线性地址空间是怎么回事?
------解决方案--------------------
关注> !>
------解决方案--------------------
也学习一下,大家回答呀
------解决方案--------------------
建议楼主学8086
------解决方案--------------------

我现在也在看这本书
按照他的说法是80X86的逻辑地址空间是64TB
Intel的指令最长为6字节,所以为48位,但用来寻地址的最多46位,能达到64TB
这些逻辑地址又划分成为4GB的线性地址
这个我也不太明白
我想着,他的寻址方式为 段:偏移
选择子里面只有13位用来寻址了,其他三位是RPL和TI
再加上后面的偏移是32位,这样算来最大的逻辑地址为32TB呀?
我感觉也挺纳闷的
------解决方案--------------------

应该是ti决定局部与全局
------解决方案--------------------
学习..
------解决方案--------------------
逻辑地址由段地址:段偏移组成,全局段和局部段各有2^13个,每个最大可长2^32,所以说逻辑地址有64TB.
在LINUX使用I32时,不使用局部段,只使用4个全局段,系统和用户都有代码段和数据段.而且这些段的基地址都是0,所以LINUX下使用的地址叫做线性地址,也叫平坦地址.就是说一个地址不含有段结构,可能用于所有段,当然具体使用是由上下文决定的
一但使用分页,线形地址就是虚拟地址了,通过页表映射,就能得到物理地址.
至于说没有4G内存而去访问不存在的内存,当然会出错.即使采用虚存,也不是说4G的地址就任用户访问.首先用户进程不能访问系统内存,否则就是非法.用户进程一般也不能访问系统没有分配给它的地址,否则就是缺页保护异常,会被杀掉.