Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19912510
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: LINUX

2008-10-14 08:38:42

§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

 

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

 

阅读(5613) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~