Linux内核入门(五)——必要的硬件知识

要想弄懂Linux内核的工作原理,就必须懂点基本的硬件知识。这里我们主要介绍Intel 80x86系列CPU保护模式下最核心的部件中几个寄存器的作用,这些寄存器在Linux内核运行时起着至关重要的作用。至于其他那些各式各样的硬件设备,我们在讲解设备驱动时会针对具体的驱动程序来介绍的。首先,大家先看看CPU的主要架构:

 

EU(通用寄存器、运算器和控制器)执行部件:完成指令所要求的功能。
SU(段寄存器、段转换器)分段部件:完成执行单元的地址请求, 将虚地址转换为线性地址。
PU(TLB、页转换器)分页部件:将线性地址转换为物理地址。
BIU(总线接口)接口部件:完成指令预取请求和执行单元的数据存取请求,数据存取请求优先于指令预取请求。
IPU(控制逻辑和预取队列)预取部件:16字节指令预取队列, 提出预取请求。
IDU(指令译码、6字节指令队列)译码部件:完成指令译码功能。
FPU(片内集成了浮点协处理器):专用于浮点运算的处理部件。

下面,我们针对EU、SU和PU模块做做详细说明,其他模块就暂时不介绍了,相应的Linux专题会涉及到的。

1 EU模块


EU模块是CPU中最核心,最重要的部件。现在的奔腾CPU已经发展了若干年了,但其中最起作用的还是加法单元ALU,一组通用寄存器组、一个标志和控制逻辑。如图:

首先,8个32位通用寄存器按使用情况分为三种:指针寄存器、变址寄存器、数据寄存器。

[1] 指针寄存器:主要提供全部或部分偏移量
   
ESP:专门存放堆栈段中栈顶单元的偏移量。
EBP:存放堆栈段中某个单元的全部/部分偏移量,也可存放32位或16位操作数或运算结果。

[2] 变址寄存器

ESI/EDI:存放主存操作数的全部/部分偏移量,也可存放16位操作数和结果,在多数情况功能可以互换。 但在串操作指令中作用不能互换,源

操作数必须用ESI提供偏移量,目的操作数必须用EDI提供偏移量。
 
[3] 数据寄存器

◆ 数据寄存器既可以作为4个32位的寄存器,也可以作为8个16位的寄存器 ,还可以作为16个8位的寄存器。
◆ 在程序中,数据寄存器用来存放操作数、运算结果或其他信息。
◆ 数据寄存器在许多指令中要求指明使用,但也有隐含或特定使用,详细情况请查阅相关资料。

其次,4个控制寄存器CR0~CR3

[1] CR0:由80286的MSW寄存器演变而来,并增加了2位,Linux最看重他的PG位——PG=0,允许分页;PG=1,不允许分页。
[2] CR1:未使用
[3] CR2:页故障地址寄存器, 存放出现故障的页的32位线性地址
[4] CR3:页目录基地址寄存器, 存放页目录表的基地址。

最后来看看标志寄存器FR

FR用来记录程序执行时的状态,即两个操作数通过ALU后的状态:

[1] 进位标志位CF(Carry Flag)
[2] 奇偶标志位PF(Parity Flag)
[3] 辅助进位标志位AF(Auxiliary Carry Flag)
[4] 零值标志位ZF(Zero Flag)
[5] 符号标志位SF(Sign Flag)
[6] 溢出标志位OF(Overflow Flag)
[7] 单步

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值