全部博文(436)
分类: LINUX
2012-12-24 18:42:15
内存寻址
这周看了深入了解Linux 内核这篇文章,下面是对前两节的一个解释。
2.1 memory address
首先作者区别了三种地址:
Logical address(逻辑地址):
这种地址使8086分段的结构具体化,并且强迫MS-DOS和Wnidows的程序员把他们的程序分成段。每一个逻辑地址包括了一个段地址和一个表示从段开始到真正地址的位移。
Linera address(线性地址):
一个简单的32位无符号整数可以用来给4GB,大约4294967296个存储单元分配地址。线性地址通常用16进制来表示,他们的值在ox00000000到oxffffffff之间。
Physical address(物理地址):
用来给内存芯片中的内存单元分配地址,通常用32位或36位无符号整形数来表示。
内存管理单元将逻辑地址转换成线性地址通过一种叫分割单元的计算机回路。随后,另一个被叫做分页机制的计算机回路将线性地址转换成物理地址。
在多处理器系统中,所有的CPU通常共享相同的内存,这意味着独立的CPU,RAM芯片可以同时访问。因为上的RAM芯片的读或写操作必须按顺序进行,硬件电路,称为插入的存储器仲裁器之间的总线和每个RAM芯片。它的作用是将访问权限授予一个CPU的芯片是免费的,拖延,如果芯片是忙碌的服务请求由另一个处理器。即使是单处理器系统中使用的内存仲裁者,因为他们有专门的处理器称为DMA控制器同时运作的CPU(见节“直接内存访问(DMA)”在第13章)。在多处理器系统上的情况下,仲裁器的结构更复杂,因为它有更多的输入端口。双Pentium,例如,维持一个双端口的仲裁者,在每个芯片的入口,并要求这两个CPU之间交换同步报文,然后再尝试使用常见的总线。从编程的角度来看,判优器是隐藏的,因为它是由硬件电路管理。
2.2. Segmentation in Hardware
硬件分割:
从80286模型,英特尔的微处理器进行地址转换称为实模式和保护模式两种不同的方式。启用保护模式时,我们将着重在接下来的章节地址翻译。实模式的存在主要是为了与老款车型保持处理器的兼容性,并允许操作系统引导。
段选择器和段寄存器
一个逻辑地址包括两部分:一个段标识符和一个偏移量,指定在该段之内的相对地址。段标识符是一个16位的字段,称为段选择器,而偏移量是一个32位的字段。
为了可以很容易地快速检索段选择,处理器提供段选择段寄存器,这些寄存器被称为CS,SS,DS,ES,FS和GS。虽然只有六,一个程序可以重复使用相同的分割寄存器,用于不同的目的,其内容保存在内存中,之后将其还原。
6个段寄存器中,有三个特定的目的:
CS:代码段寄存器,它指向一个段包含程序指令
SS:堆栈段寄存器,它指向包含当前程序堆栈段
DS:数据段寄存器,它指向一个段包含全局和静态数据
余下的三段寄存器是通用的,可能是指任意的数据段。
CS寄存器还有一个重要的功能:它包括一个2位的字段,用于指定当前特权级(CPL)的CPU。值为0表示最高特权级别,而值3表示最低的一个。 Linux只使用0和3,它们分别称为内核模式和用户模式。
问题:为什么实模式只能寻址20位?