x86架构CPU概述

本文介绍x86架构,主要写一点自己学习的体会,权威资料为Intel发行的一套三卷的Programmer's Manual。现在这套Manual已经相当冗长复杂,简明扼要的还是80386 Programmer's Manual。只有400多页。是的,“只有”400多页。

深入理解计算机运行原理,理解操作系统的进程调度,内存管理等关键要点,CPU架构是基本知识,可谓计算机从业人员的“内力”。下面的介绍只针对32位保护模式。


一,系统寄存器。

系统寄存器是系统运行的状态。CPU接受到RST信号后的Initilization主要是对系统寄存器和相关的数据结构进行设置。唯一确定一个系统运行状态的所有寄存器如下:

--通用数据寄存器: EAX, EBX, ECX, EDX

--通用指针及基址寄存器: ESP, EBP, ESI, EDI

--段寄存器(6个): CS(代码), DS(数据), SS(栈段), ES, FS, GS

--指令指针寄存器: EIP

--标志寄存器: EFLAGS

--控制寄存器: CR0, CR1, CR2, CR3

--内存管理寄存器: GDTR, LDTR, IDTR, TR(这4个寄存器太重要了)

这些寄存器是TSS(Task State Segment)所涉及的所有寄存器,因此我们讲它们唯一确定系统运行状态。


二,任务及任务切换

x86架构对任务进行了抽象,而TSS则包含了任务的运行信息。 相对于Procedure,任务是一个更大的运行实体,同时任务是操作系统进程的载体,每个任务会对应一个进程。比如在Linux中,任务0是idle进程,任务1是init进程,等等。TSS定义了代码段在内存中的位置, 但需要注意的是——理解这一点非常关键——如果代码在执行过程中进行了跳转,比如跳转到中断处理程序或者系统调用过程中,如果跳转过程中没有使用Task Gate,那么便不会引起Task Switch,因此仍然在原任务中!这就是schedule()程序的位置。进程通过系统调用进入schedule并可能进行任务切换,但进入schedule的过程并没有任务切换。

主要想说明的是这一点。

你可能感兴趣的:(杂谈)