寄托天下
查看: 2848|回复: 1
打印 上一主题 下一主题

[计算机] 关于内存地址的一点思考(线性地址,逻辑地址) [复制链接]

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1491

荣誉版主 GRE斩浪之魂 Golden Apple

跳转到指定楼层
楼主
发表于 2009-8-7 06:04:49 |只看该作者 |倒序浏览
本帖最后由 DriverEntry 于 2009-8-7 22:53 编辑

建议先看看INTEL CPU手册。同时搞清楚运行时的环境。

首先,INTEL X86-32 CPU 提供了2个管理内存的机制:一个是分段,一个是分页。分段是最早的,古老的方式,分页是现代的。这2个机制又可以重叠或者不重叠。也就是说,可以只开启分段,而不开启分页模式。 也可以把分段和分页模式都打开。

对于每一个内存管理机制(分段或者分页),都会把地址翻译一下。对于分段,会把地址从逻辑地址(带段基地址的)翻译成物理地址(或者是线性地址,这个要看分页是否打开)。对于分页,它会把虚拟地址(也可以说是线性地址)转换成物理地址。另外,在分段和分页同时打开的时候,总是先分段的进行翻译,然后分页的再翻译。

严格来说,逻辑地址和线性地址是不一样的。逻辑地址是带了段基地址的,也就是SEG:OFFSET 的格式。但是,在现代的WINDOWS,LINUX上,分段机制没有实际在用。也就是说所有的段都是映射到同一段物理内存。所以逻辑地址也就不再需要加上段基地址了。因为所有都一样,就那一个。这时,你可以说逻辑地址就是线性地址,也可以说没有逻辑地址了。另外,我记得虚拟地址就是指线性地址。
(注意:在WINDOWS下面,有一个段还是在用的,就是FS段,如果你看的是WINDOWS下的一些内核汇编的话,会碰到FS的)

在古老(又纯真)的DOS年代(或者是现在的BIOS程序),那时CPU工作在实模式下,只有分段,没有分页。

有人也许会问,搞了个分段之后,为啥再高个分页呢?其实2者提供的功能是类似的。这个是历史原因。最早INTEL是只提供分段的,后来发现不够灵活,才引入了分页。但是又有一些老程序在用老的分段,所以分段也保留着。 在新的INTEL X86-64下面,分段已经寿终正寝了。

还可以参考下这个连接,嘿嘿
http://linux.chinaunix.net/bbs/thread-919019-1-1.html
0 0

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
297
寄托币
9342
注册时间
2009-3-2
精华
2
帖子
110

荣誉版主

沙发
发表于 2009-8-7 08:40:05 |只看该作者
支持,顶一下!

使用道具 举报

RE: 关于内存地址的一点思考(线性地址,逻辑地址) [修改]

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
关于内存地址的一点思考(线性地址,逻辑地址)
https://bbs.gter.net/thread-993146-1-1.html
复制链接
发送
回顶部