软件都是建立在硬件的基础之上,这个硬件在我们这里就是cpu、内存、硬盘、键盘、屏幕等等,而至关重要的则是cpu——这个核心中的核心。

x86系列CPU

目前在我们学习linux内核的过程中,所使用到的cpu都是比较早期的cpu, Intel 8086、80386这些。

80386是x86系列的cpu

x86是指一系列基于intel
8086且向后兼容的中央处理器指令集架构,最早的8086处理器于1978年推出,是16位处理器,后续的处理器命名都是以80x86命名,其中就包括80386。

80386的特点是其内存地址访问长度从16位扩展到32位,从而能够寻址最大4GB地址空间。

作为一个硬件,80386具有三种工作模式:

工作模式

应用场景

特点

真实模式

DOS系统

. 直接内存访问空间限制在1M字节,只有分段,代码和数据放在不同区域,操作系统和用户程序没有区分开,指针都指向实际物理地址

保护模式

Linux系统

.访问4G字节内存,具备异常处理机制。支持分页机制,支持虚拟内存,支持多任务优先级,区分开操作系统跟用户程序

虚拟模式

虚拟86模式

. 可同时模拟多个8086处理器进行并发处理

冯诺依曼结构

要说cpu的结构,首先要说的则是冯·诺依曼结构

x86 cpu 架构 x86架构cpu有哪些_x86 cpu 架构


冯诺依曼存储程序计算机在体系结构上主要特点有:

  • 以运算单元为中心
  • 采用存储程序原理
  • 存储器是按地址访问、线性编址的空间
  • 控制流由指令流产生
  • 指令由操作码和地址码组成
  • 数据以二进制编码

cpu基本结构

cpu 由运算器、控制器、寄存器等器件组成,这些器件依靠内部总线相连接,依靠外部总线与其他组件联系。

其基本结构如下:

x86 cpu 架构 x86架构cpu有哪些_linux_02

80386寄存器组

其中以80386为代表,其寄存器组如下:

x86 cpu 架构 x86架构cpu有哪些_x86 cpu 架构_03


操作系统代码的编写需要遵循CPU的使用手册,CPU有什么能力,操作系统代码才能够在这个能力基础之上进行开发功能、组合功能,从而层层嵌套,向上扩展功能。

80386的寄存器具体如下,在后续的章节中,我们则会使用到这些寄存器,来为操作系统打下基础,实现分段、分页、中断等基础功能,在这些基础功能之上,才能够继续开发,实现内存管理,任务调度,文件系统以及用户程序上层应用。

从这个发展的角度来讲,我们会发现,这真是一件神奇的事情。

寄存器详细结构

x86 cpu 架构 x86架构cpu有哪些_x86_04


x86 cpu 架构 x86架构cpu有哪些_cpu_05

x86 cpu 架构 x86架构cpu有哪些_linux_06


x86 cpu 架构 x86架构cpu有哪些_linux_07

CF(Carry Flag):进位标志位; PF(Parity Flag):奇偶标志位; AF(Assistant
Flag):辅助进位标志位; ZF(Zero Flag):零标志位; SF(Singal Flag):符号标志位; IF(Interrupt
Flag):中断允许标志位,由CLI,STI两条指令来控制;设置IF位使CPU可识别外部(可屏蔽)中断请求,复位IF位则禁止中断,IF位对不可屏蔽外部中断和故障中断的识别没有任何作用;
DF(Direction Flag):向量标志位,由CLD,STD两条指令来控制; OF(Overflow Flag):溢出标志位;
IOPL(I/O Privilege
Level):I/O特权级字段,它的宽度为2位,它指定了I/O指令的特权级。如果当前的特权级别在数值上小于或等于IOPL,那么I/O指令可执行。否则,将发生一个保护性故障中断;
NT(Nested
Task):控制中断返回指令IRET,它宽度为1位。若NT=0,则用堆栈中保存的值恢复EFLAGS,CS和EIP从而实现中断返回;若NT=1,则通过任务切换实现中断返回。在ucore中,设置NT为0。

x86 cpu 架构 x86架构cpu有哪些_80386_08


x86 cpu 架构 x86架构cpu有哪些_linux_09