找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

《深入理解Linux内核(第三版)》 §2.1 内存地址

2009-12-20 13:35| 发布者: admin| 查看: 39| 评论: 0|原作者: 九天玄女


§2 内存寻址
本章介绍寻址技术。值得庆幸的是,操作系统自身不必完全了解物理内存;如今的微处理器包含的硬件线路使内存管理既高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问。
作为本书的一部分,本章将详细描述80x86微处理器怎样进行芯片级的内存寻址,Linux又是如何利用寻址硬件的。我们希望当你学习内存寻址技术在Linux 最流行的硬件平台上的详细实现方法时,既能够更好地理解分页单元的一般原理,又能更好地研究内存寻址技术在其他平台上是如何实现的。
关于内存管理有三章,这是其中的第一章;还有第八章,讨论内核怎样给自己分配主存;以及第九章,考虑怎样给进程分配线性地址。

§2.1 内存地址
程序员偶尔会引用内存地址(memory address)作为访问内存单元内容的一种方式,但是,当使用80x86 微处理器时,我们必须区分以下三种不同的地址:
*逻辑地址(logical address)
包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使MS-DOS 或Windows程序员把程序分成若干段。每一个逻辑地址都由一个段(segment)和偏移量(offset或 displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离。
*线性地址(linear address)(也称虚拟地址 virtual
address)
是一个32 位无符号整数,可以用来表示高达4GB的地址,也就是,高达4
294 967296 个内存单元。线性地址通常用十六进制数字表示,值的范围从0x00000000 到0xffffffff。
*物理地址(physical
address)
用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址由32 位或36 位无符号整数表示。

内存控制单元(MMU)通过一种称为分段单元(segmentation
unit)的硬件电路把一个逻辑地址转换成线性地址;接着,第二个称为分页单元(paging unit)的硬件电路把线性地址转换成一个物理地址(见图2-1)


















screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://file:///C:/DOCUME~1/sz081474/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg');}" onmousewheel="return imgzoom(this);" alt="" />

在多处理器系统中,所有CPU都共享同一内存;这意味着RAM芯片可以由独立的CPU并发地访问。因为在RAM芯片上的读或写操作必须串行地执行,因此一种所谓内存仲裁器(memory
arbiter)的硬件电路插在总线和每个RAM
芯片之间。其作用是如果某个RAM芯片空闲,就准予一个CPU 访问,如果该芯片忙于为另一个处理器提出的请求服务,就延迟这个CPU的访问。即使在单处理器上也使用内存仲裁器,因为单处理器系统中包含一个叫做DMA控制器的特殊处理器,而DMA 控制器与CPU 并发操作[参见第十三章“直接内存访问(DMA)”一节”]。在多处理器系统的情况下,因为仲裁器有多个输入端口,所以其结构更加复杂。例如,双Pentium 在每个芯片的入口维持一个两端口仲裁器,并在试图使用公用总线前请求两个CPU交换同步信息。从编程观点看,因为仲裁器由硬件电路管理,因此它是隐藏的。








最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:27 , Processed in 0.152279 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部