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

《操作系统原理linux篇》逻辑地址,线性地址 物理地址
徐德民的《操作系统原理linux篇》里面涉及到的把整个虚拟存储空间的全局地址空间和局部地址空间利用分段机制分成大小不同的全局段和局部段。而逻辑地址转化成物理地址是通过第一级分段机制把逻辑地址空间分成若干个相互独立的线性地址空间。第二级由分页机制把线性地址空间进行分页,把线性地址转化成物理地址。而一个线性地址空间可以包含若干个段。80x86的虚拟地址空间中存在两种性质不同的段:全局段和局部段。 
linux下虚拟存储,把虚拟空间通过分段转化成线性空间,又通过分页把线性空间转化成物理地址,而线性空间内又包含若干个全局段、局部段。这是怎么回事,全局段、局部段不是通过分段机制分出来的吗,而线性地址也是分段出来的,但是好像只分了一次段,怎么线性空间可以包含若干个全局段和局部段的, 段和线性空间应该是同一个等级啊,我觉得一个线性空间只能有一个段吧? 

 就是说 通过第一级 由分段机制把逻辑地址空间分成若干个相互独立的地址空间,它称为线性地址空间, 而在第一级的分段机制,也把逻辑地址空间分成了全局段和局部段,即把全局地址空间 分成最多达8K个全局段,局部地址空间分成最多达8K个局部段。 但随后又说,在每个独立的线性地址空间中都可以有若干个全局段和局部段?? 我觉一个线性地址空间就只能包含一个段,要么一个全局段,要么是一个局部段???

------解决方案--------------------
不知道,分段是INTEL中推荐的机制,但Linux中主要是通过分页机制来实现对虚拟内存的管理的。

什么TSS 之类的主要是为了符合INTEL CPU中的限制,全局段和局部段感觉和线性地址空间是两个不同的概念


------解决方案--------------------
看ULK, 太经典的书。

国产书,大部分比较差。
------解决方案--------------------
x86平台上linux将逻辑地址和线程地址等同;因此在x86上,你可以直接认为只有虚地址和物理地址
------解决方案--------------------
随便看了一下,感觉写书的作者是不是搞错了,自己都没搞清楚就瞎扯
把物理地址,线性地址怎么和分段分页混在一起谈了,而且还要拉扯上“全局地址空间和局部地址空间”

物理地址和逻辑地址的区分是因为,x86地址总线只有20位,不能表示所有的地址,所以采用了偏移地址加段地址的方式来计算,这些东西别管那么多,有个鸟用,编程的时候碰到的地址都是指逻辑地址。

linux内存分段或者分页,或者段页式管理是用于内存管理。

全局地址空间和局部地址空间,应该是程序设计的事情。

就如4楼大哥说的一样,最好看老外的书
------解决方案--------------------
说一下我的理解吧,linux的分页是建立在分段上的,所以先分段,然后各个进程就有了独立的地址空间,然后进程自己在分页管理,用二级页表

------解决方案--------------------
探讨

弱弱地悄悄的问下

什么是 ULK ?

------解决方案--------------------
探讨
我觉得你没搞清楚。。。
谁给你说的地址总线只有20位