本书基于IA32体系结构来分析内核_第1页
本书基于IA32体系结构来分析内核_第2页
本书基于IA32体系结构来分析内核_第3页
本书基于IA32体系结构来分析内核_第4页
本书基于IA32体系结构来分析内核_第5页
已阅读5页,还剩35页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前言牙齿书基于IA32体系结构分析内核,但没有单独打开有关IA32体系结构的章节,而是分散在每一章中,在需要时进行说明。这样可以更好地理解软件和硬件之间的交互技术。牙齿书以Linux 2.4.20内核为分析对象。系统初始化的第一部分牙齿部分首先描述IA32处理器本身的初始化过程,然后描述打开电脑电源后的操作系统引导过程。这里,系统引导部分的详细说明、内核初始化部分仅说明每个子系统的整个初始化过程,每个子系统的详细初始化过程在分析相应子系统的相应章节中单独进行详细分析。初始化IA32处理器牙齿章节暂时将操作系统放在一边,仅详细介绍IA32处理器本身的初始化功能和功能。这包括处理器初始化、处理器配

2、置、操作模式切换等。1.1处理器初始化概述处理器初始化过程通常分为硬件初始化和软件初始化两部分。如果系统通电或重置针脚有效,处理器将进入硬件初始化过程。硬件初始化过程的第一步是重置硬件。重置硬件将处理器的寄存器重置为初始值,并将处理器设置为实际模式操作状态。重置硬件还会将处理器内部缓存(缓存)、转换备份缓冲区(TLB)和分支目标缓冲区(BTB)设置为无效状态。重置操作取决于处理器套件。P6系列处理器总是通过高级可编程中断控制器(APIC)执行多处理器(MP)初始化任务,然后在MP初始化过程中选择的启动处理器(BSP)启动初始化代码(即软件初始化过程的开始)。初始化代码的起始地址,指定为当前片段

3、的段基本地址和EIP寄存器的偏移量。其馀非主处理器(AP)在BSP运行初始化代码时进入停止状态。在奔腾处理器单处理器系统或多处理器系统中,始终将一个处理器设置为主处理器(其中主处理器仅在初始化时工作,加载操作系统后,系统操作将根据操作系统确定为主从或SMP状态)。主处理器按照预先确定的双处理器(DP)初始化过程运行软件初始化代码,该初始化过程由当前片段的段基本地址和EIP寄存器的偏移量确定。第二个处理器进入挂起状态。英特尔486处理器主处理器从起始地址开始运行软件初始化代码,该起始地址由当前代码片段中EIP寄存器的偏移量确定。486处理器不会根据DP或MP程序自动初始化。在硬件复位期间,浮点单

4、元(FPU)也初始化为复位状态,允许执行FPU软件初始化代码。FPU初始化不需要切换操作模式,因为无论处理器处于什么模式,FPU始终工作相同。1.1.1重置后的处理器状态表1-1显示了开机后每个处理器系列中每个寄存器的状态。其中控制寄存器CR0的状态为H,牙齿状态将处理器设置为物理地址操作方式(请参阅图1-1)。表1-1重置后IA32处理器的状态寄存器P6处理器奔腾处理器英特尔486处理器EFLAGSHHHEIP 0000 fff 0h 0000 fff 0h 0000 fff 0000 fff 0hC r0 hhCR2、CR3、CR4HHHCS选择器=F000H默认地址=FFFF0000H段

5、限制=FFFFHAR=存在,R/W,已访问选择器=F000H默认地址=FFFF0000H段限制=FFFFHAR=存在,R/W,已访问选择器=F000H默认地址=FFFF0000H段限制=FFFFHAR=存在,R/W,已访问SS、DS、ES、FS、GS选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/W,已访问选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/W,已访问选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/W,已访问EdxxxhxxxxhEAX、EBX、ECX、ESI、EDI、EBP、ESPHHHGDTR,IDTR基本地址=H段限制=FFFF

6、HAR=存在,R/W基本地址=H段限制=FFFFHAR=存在,R/W基本地址=H段限制=FFFFHAR=存在,R/WLDTR,TR选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/W选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/W选择器=0000H预设位址=H段限制=FFFFHAR=存在,R/WDR0、DR1、DR2、DR3HHHdr 6 fff 0 ff 0 hfff 0 fff 0 hff ff 1 ff 0h fff 1 ff 0h ff0hDR7HHH时间戳寄存器0H0H未实现性能柜台和事件选择寄存器0H0H未实现其他模式专用寄存器(MSR)未定义未定义

7、未定义数据和代码缓存,TLB无效无效无效未实现固定和可变MTRR禁止未定义机器验证结构。未实现。使用APIC可能无法实现。1.1.2软件初始化代码软件初始化是处理器初始化的一部分,重置处理器后,初始化代码必须在引导处理器或主处理器上完成系统特定的初始化和系统逻辑初始化。对于多处理器(MP)或双处理器(DP)系统,BSP处理器在初始化完成后唤醒单个AP处理器,并由每个AP处理器运行初始化代码以完成初始化。软件初始化代码必须配置初始化内存中的系统数据结构(如中断描述符表和全局描述符表)所需的操作环境。重置硬件后,处理器的CS寄存器中显示的段选择器部分的值为F000H,EIP值为0000FFF0H。

8、处理器在实际模式下运行,不使用CS的隐式描述符部分,因此处理器执行的第一个命令的地址遵循实际模式下的物理地址生成规则。CS*16 EIP,即重置硬件后,处理器引用在物理地址为FFFFFFF0H的存储设备上运行。因此,必须将包含初始化代码(通常称为BIOS)的EPROM映射到其地址。为确保EPROM中的软件初始化代码正确运行,CS寄存器选择器部分中的值必须保持不变,并且在EPROM软件初始化完成之前,代码中可能有包含远程跳跃或远程调用的指令,或者不能允许中断。这可能会更改CS选择器值。仅在EPROM软件完成初始化后,使用远程跳跃命令将节目控制转移到后续引导初始化代码。1.2初始化缓存和模式专用寄

9、存器(MSR)牙齿部分的初始化主要由软件初始化代码完成。开放处理器缓存(缓存),模式专用寄存器(MSR)设置1.2.1高速缓存(高速缓存)IA32体系结构内部有指令缓存和数据缓存。通过设置控制寄存器CR0重量的CD和NW标志位,可以禁止或打开缓存。重置处理器电源后,将放置CD和NW,所有内部缓存行无效,初始化代码必须清除CR0中的CD和NW标记以打开缓存。处理器外部有所谓的辅助缓存。次缓存的初始化必须使用系统特定的代码序列进行初始化。1.2.2模式专用寄存器(MSR)设置IA32体系结构内部有一组特定于架构的寄存器MSR。MSR与处理器操作模式、硬件和软件相关功能相关。这些功能对于支持多任务操

10、作系统的开发非常重要。以下是对它们的简要介绍。性能监视柜台及其性能监视控制器P6系列处理器具有两个用于测量事件数和间隔的40位性能监视柜台。这是时间戳柜台。以处理器时钟为单位增加的64位柜台。调试扩展寄存器。P6系列处理器除了使用八个调试寄存器(DR0到DR7)外,还安装了两个茄子模式专用的调试扩展寄存器,以进一步增强调试功能。调试扩展寄存器用于记录最近的分支、中断和异常,因此可以用于在分支、中断和异常中设置断点。内存类型范围寄存器(MTRR)。现代计算机的系统存储组件更复杂,包括ROM、RAM、帧缓冲内存和存储映射I/O。为了优化不同类型的存储,P6系列处理器使用MTRR指定存储类型和包含的

11、地址范围。固定MTRR意味着牙齿MTRR组指定的存储空间在H到000F 8000H范围内。可变MTRR可以指定任何存储空间。必须在初始化代码中设置MSR。使用的指令是在级别0上运行的权限指令RDMSR和WRMSR。1.3软件初始化任务牙齿部分介绍在物理模式和保护模式下初始化软件必须执行的任务。两种处理器操作模式的切换在第1.4节中进行了说明。如上所述,重置CPU电源后,处理器在物理模式下工作。CPU从物理地址FFFFFFF0H开始运行手指,以实际模式开始初始化软件。实际模式软件初始化的主要任务是设置处理器的基本操作环境,包括中断处理和异常IDT数据结构。实际模式下的IDT在物理模式下工作时,需

12、要加载到内存中的唯一系统数据结构是中断向量表(IDT)。初始化代码使用LIDT命令更改处理器的中断量表主地址寄存器IDTR。打开中断之前,初始化代码必须在IDT中正确设置中断和异常处理程序指针。实际中断和异常处理程序代码通常也加载到RAM中,处理器必须位于实际模式下的可寻址1M地址空间中。NMI中断处理如果IDT和实际中断和异常处理程序未加载到RAM中,则必须禁止NMI。有两种茄子情况。在L的情况下,简单的IDT和NMI中断处理程序可放置在与BIOS系统相同的EPROM中,L可以在L位初始化后立即处理L牙齿NMI中断。l另一种情况是,系统硬件提供打开和禁止NMI中断的机构。典型的方法是使L牙齿

13、处理器的NMI信号通过门,并由L牙齿门和一个I/o端口控制。这样,初始代码就可以操纵I/o端口来控制NMI。当处理器进一步进入保护模式时,需要执行更多的操作以支持从实际模式切换到模式。这些操作包括:在保护模式下初始化IDT表初始化GDT表格初始化TSS段初始化LDT表格分页机制要求初始化页面目录和至少一个页面表初始化GDTR寄存器初始化IDTR寄存器初始化控制寄存器CR1到CR4MTRR初始化(仅限P6系列处理器)执行上述必要的初始化后,处理器可以修改控制寄存器CR0,使PE位置进入保护模式。具体的切换详细信息在第1.4节中说明。1.4操作模式切换完成必要的准备后,初始化代码可以通过以下步骤完

14、成从物理模式到保护模式的切换:禁止中断。CLI命令可以阻止可结构化中断(INTR),可以通过外部电路禁止NMI中断。运行LGDT命令,将GDT的主地址加载到GDTR寄存器中。MOV CR0命令控制寄存器CR0的PE标志位置,如果要使用分页机制,还控制PG标志位置。在MOV CR0命令之后立即执行远程跳跃或远程过程调用命令。典型的方法是远程跳转或远程过程由命令流中的下一个命令(JMP或CALL命令中的下一个命令)调用。紧随MOV CR0之后的命令JMP或CALL命令清除命令执行进程和处理器中的命令预取队列。启用分页时,MOV CR0指令和JMP或CALL指令中的代码必须映射到同一页。发送目标指令

15、中的代码可能不在同一页上。要使用本地描述符表,请运行LLDT命令,将LDT中的段选择器加载到LDTR注册表中。实施LTR指令并将段选择器加载到操作寄存器中,以初始化保护性操作。进入保护模式后,段寄存器将保持实际模式的值。步骤4中的JMP命令或CALL命令重置CS寄存器。使用以下方法之一完成剩馀段寄存器值的更新:l显式重新加载DS、SS、ES、FS和GS值。L执行JMP或CALL命令L命令,L转到新任务。l可以根据新任务的TSS段内容自动重置所有段寄存器值。运行LIDT命令,将保护模式的IDT主地址和限制加载到IDTR寄存器中。执行运行STI命令、打开可结构化中断(INTR)和打开NMI中断所需

16、的硬件操作。第二章BIOS开机程序2.1 BIOS基本概念基本输入/输出系统(BIOS)是默认的I/o系统。与系统启动相关的BIOS主要有两种:一个是系统主板上固化的ROM BIOS。另一个是硬盘BIOS,硬化到硬盘适配器的2732 EPROM。ROM BIOS在引导系统方面起着重要作用。牙齿部分概述了两个BIOS。2.1.1 ROM BIOSROM BIOS存储在1MB内存的高地址区域F0000h至FFFFFh中。ROM BIOS包含四个茄子程序。1.BIOS中断例程BIOS中断服务程序。软盘、硬盘等物理硬件设备接口的操作系统管理基于BIOS中断例程。系统引导相关例程包括INT 13h和INT 19h。2.系统设置节目实现CMOS RAM的各种参数设置,如介质启动顺序。3.开机自检自检自检Poweron self test包括CPU、640KB主内存、1MB或更多扩展内存、ROM、主板、CMOS RAM、串行和并行端口、显卡、软驱和硬盘子系统,以及键盘测试。4.系统引导程序根据CMOS中设置的引导介质顺序搜索MBR,将其加载到RAM中,将系统控制传递给MBR,MBR完成操作系统引导。2.1.2硬盘BIOS硬盘BIOS的绝对地址为C8000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论