Linux操作系统基础(二)Intel 32位系统架构总览(2)

操作系统基础(二)Intel 32位系统架构总览(2)

转载请注明出处:http://blog.csdn.net/rosetta

运行模式

         IA-32架构支持四种模式。

保护模式(Protected mode)这是处理器主要运行模式。在这种模式下可以提供最多的架构特性指令集,最高的性能以及向后兼容。

实地址模式(Real-address mode) 这种模式提供了8086处理器程序运行的环境,比如提供切换到保护模式和系统管理模式的能力。

系统管理模式(System management mode SMM)从Intel 386 SLCPU开始,SMM就成为所有IA-32 CPU的标准架构特性。这种模式为操作系统实现电源管理和OEM特性提供透明机制。SMM是通过外部系统中断pin(SMI#)激活的,系统中断pin 产生一个系统管理中断(SMI)。在SMM模式下,处理器通过保存当前运行程序或任务的上下文切换到单独的地址空间。然后特别的SMM代码透明的执行。当从SMM返回时,处理器把SMI之前的状态返回。

虚拟8086模式(Virtual8086 mode) 在保护模式下,处理器支持一个准操作模式模式叫虚拟8086模式。在这种模式下允许处理器在保护模式和多任务环境下执行8086程序。

如图2显示处理器在不同模式之前切换。

         系统加载或复位时CPU处于实模式。CR0寄存器的PE标志用于控制CPU工作在实模式或保护模式。

         EFLAGS寄存的VM标志用于决定CPU工作在保护模式还是虚拟8086模式。保护模式和虚拟8086之前的切换通常完成任务切换或者从中断或异常处理程序返回的一部分。

    每当处理器接收到SMI,就会从其它模式切换到SMM。当执行RSM指令时,处理器总是返回到SMI发生之前的模式。

图2

EFLAGS寄存器中的系统标志和域

   EFLAGS寄存器中的c系统标志和IOPL域控制I/O,可屏蔽硬件中断,调试,任务切换和虚拟8086模式,如图3所示。只有特权级代码(通常为操作系统代码)允许修改这些标志位。


图3

内存管理寄存器

    处理器提供四个内存管理寄存器(GDTR,LDTR,IDTR和TR),用于指定分段内存管理所使用的系统表的基地址,如图4所示。处理器为这些寄存的加载和存储提供了特别的指针。


图4

GDTR全局描述符表寄存器

    GDTR寄存器保存了GDT的32位线性基地址和16位表长度。基地址指定GDT中字节0在线性地址空间的地址;表长度指明GDT表的字节长度。

    LGDT和SGDT指令分别用来加载和存储GDTR寄存器。在CPU刚加电或复位时,线性基地址默认设为0,表长度设置为0FFFFH。在保护模式CPU初始化过程中,GDTR寄存器必须加载一个新值。

LDTR局部描述符表寄存器

  LDTR寄存器保存了LDT的32位基地址,16位段选择符,限长和描述符属性。基地址指定LDT段中字节0在线性地址空间的地址;段限长指明LDT段的字节长度。

    LLDT和SLDT指令分别用来加载和存储LDTR寄存器。GDT表中必须包含LDT的段段描述符。当通过LLDT指令加载段描述符到LDTR时:LDT的基地址,段限长和描述符表属性将自动的加载到LDTR。

    当发生任务切换时,新任务LDT的段选择符和段描述符自动的加载到LDTR中。在写入新的LDT信息到LDTR之前,LDTR不会自动保存旧的信息。

    当处理器刚加电或复位时,段选择符和基地址被默认设为0,段限长默认高为0FFFFH。

IDTR中断描述符表寄存器

   IDTR寄存器保存了IDT的32位线性基地址和16位表长度。基地址指定IDT中字节0在线性地址空间的地址;表长度指明IDT表的字节长度。LIDT和SIDT指令分别用来加载和存储IDTR寄存器。在CPU刚加电或复位时,线性基地址默认设为0,表长度设置为0FFFFH。在CPU初始化过程中,基地址和表长可以改变。

TR任务寄存器

   TR寄存器保存了当前任务TSS的32位基地址,16位段选择符,段限长描述符属性。选择符引用GDT中的TSS描述符。基地址指定TSS中字节0在线性地址空间的地址;段限长指明TSS的字节长度。

   LTR和STR指令分别用来加载和存储TR寄存器的段选择符。LTR指令加载TR寄存器的段选择符时:TSS描述符的基地址,段限长和描述符属性自动加载到TR中。在CPU刚加电或复位时,基地址默认设为0,段限长设置为0FFFFH。

    当发生任务切换时,新任务的TSS段描述符和段选择符自动加载到TR寄存器中。在写入新的TSS信息到TR中之前,TR不会自动保存旧的信息。

控制寄存器

    控制寄存器(CR0,CR1,CR2,CR3和CR4)决定处理器的操作模式和当前执行任务的特性,如图5所示。。在32位模式和兼容模式下这些寄存器都是32的。

         通过MOV CRn 指令操作这些寄存器的。控制寄存器总述如下。

CR0——包含控制系统模式和处理器状态的系统控制标志。

CR1——保留。

CR2——包含导致页错误的线性地址。

CR3——包含页目录表的物理地址和两个标志(PCD和PWT)。CR3也被称为页目录基地址寄存器(PDBR)。它只有高20位是有效的;低12位被设置为0。因此页目录必须是4KB对齐。PCD和PWT标志控制处理器内部数据缓存区的页目录的高速缓存(它们不能控制查找缓冲区TLB的页目录信息)。

CR4——包含一组标志用于开启一些架构额外的选项,并且指明系统对某些处理器的兼容性。CR4可以通过mov指令读取和加载。在保护模式下,MOV指令允许控制CR4寄存器读取和加载(特权级0)。这种限制意味着应用程序或其它系统程序(运行在特权级1,2,3上)将不能读取的加载CR4寄存器。


图五

系统指令一览表

         系统指令操作系统级功能,比如加载系统寄存器,管理高速缓存,管理中断,设置设置寄存器。这些指令中的多数只能被操作系统或特权级为0的程序执行,其它可以被任何级别的程序执行。

         如下图列出了系统指令并且指示哪些可以被应用程序使用。


 

参考:《Intel SystemProgramming Guide》

          《Linux内核完全剖析》赵炯编著

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值