当前位置:文档之家› 80386简介1

80386简介1

80386简介(一)
==============
linux的早期版本,也是本课讲解的版本,是在80386上实现的,需要对该CPU先有个粗浅的了解。

重点是保护模式的几个概念。

注意:操作系统是管理硬件的程序,CPU的设计者与操作系统设计者的相互依赖是很强的。

80386是INTEL 1985年推出的CPU芯片,是80x86系列中第一个32位微处理器。

80386的内部和外部数据总线都是32位。

地址总线也是32位,可寻址高达4GB内存。

80386具有实模式、保护模式、虚86(V86)等三种工作方式。

系统加电时自动处于实模式,当操作系统初始化完成,操作系统可将其设为保护模式。

1实模式
实模式是为了兼容于8086。

只使用20位地址总线,可寻址
1M内存,物理地址=左移4位的段地址+偏移地址,等等,这些内容在“组成原理”中都过。

实模式寻址能力有限,而且不能为操作系统内核提供安全保护,比如它没有管态、目态。

没有为多道程序提供必要的支持,比如没有进程空间的隔离功能。

2保护模式
可以使用32位地址总线,可寻址高达4GB内存(含虚存)。

但当时的386电脑一般只配1-8M内存,虚存也很小,有些硬盘本身的容量就不够4G。

保护模式和实模式都使用内存段、中断,但二者有很多不同。

在实模式中内存被划分成段,每个段的大小为64KB,这样段地址可以用16位表示。

有几个段寄存器(CS、DS、SS和ES),物理地址=左移4位的段地址+偏移地址。

而在保护模式下,段是通过一系列被称之为"描述符表"的表所定义的。

段寄存器存储的是指向这些表的指针,段长也不再固定为64位,而是可变的。

用于定义内存段的表有两种:全局描述符表(GDT)和局部描述符表(LDT)。

“描述符”是一个32位的地址指针。

GDT是一个段描述符数组,其中包含所有应用程序都可以使用的基本描述符。

每一个操作系统只定义一个GDT。

LDT也是段描述符的一个数组。

与GDT不同,LDT是一个段,每一个正在运行的进程都有一个自己的LDT。

GDT和LDT有什么用?GDT指向所有进程都可以访问的公共空间,操作系统内核和其它全局共享的数据可以放在这个空间里。

LDT指向用户进程自已的空间,彼此不能访问,只有GDT 空间可以访问所有的LDT空间。

也就是说,位于GDT空间操作系统内核与位于各自LDT空间的进程是互通的,而LDT之间不互通,这样实现了进程空间的隔离。

GDT和LDT空间的安全怎么办?80386支持4级特权,0,1, 2,3,0级最高。

通常操作系统内核特权为0,操作系统服务特权为1,操作系统扩展特权为2,用户进程特权为3。

特权数可以含在段地址中,为段提供安全保护,具体细节不介绍。

保护模式下还有一个中断描述符表(IDT),该表的作用等同于中断向量表,告诉处理器到那里可以找到中断处理程序入口。

总之,与8086相比,80386的保护模式不仅有更高的寻址能力,而且为多任务、安全的操作系统提供了支持。

3 V86模式
可以在最低特权3下同时模拟运行多个8086程序。

与linux 关系不大。

相关主题