Intel 80386的保护模式

来源:互联网 发布:ubuntu联网后无法上网 编辑:程序博客网 时间:2024/05/17 03:58

1. 实地址模式

 

CPU通电或RESET时,cr0PE位置0, 进入实地址模式。这里不在赘述。

 

2. 保护模式

 

80386提供分段和分页两种存储管理模式

 

分段管理的特点:对存储空间的逻辑划分,优点:对模块化(结构化)程序设计方式提供了很好的支持; 缺点:① 段长可变不固定, 管理更复杂、② 空间碎片较多、③ 访问字节数 ∕传输字节 可能很小

 

分页管理的特点:对存储空间的物理划分,优点:① 页面长度固定,管理机构简单、② 访问字节数/传输字节通常更大; 缺点:① 一个页面内的程序或数据可能不具有完整意义, 不利于结构化程序设计、② 存在“内零头”(内部碎片)

 

硬件上支持两种存储管理方式, 吸收两种模式的优点, 为不同的操作系统提供了更多支持。

 

1)分段管理

 

80386的数据代码段描述子的格式:

 

G:粒度位: 0:段长以字节为单位;1:段长以页面为单位

 

访问权字节:P(1)DPL(2)S(1)E(1)ED/C(1)W/R(1)A(1)8位,与80286相同。E0 (数据段, ED有效)1 (代码段, C有效)ED1:段向上生长;0:段向下生长。且W/R0 数据段不能写;1 数据段可以写。C1: 一致性代码段(可不同特权级共享),CPLDPL,代码段只能执行;0: 非一致性代码段, 要求访问和被访问代码段特权级相同。且W/R0 数据段不能写;1 数据段可以写。

 

2 分页管理

 

CR0寄存器中的PG=0,不允许分页,经分段部件出来的地址(即线性地址=物理地址)

 

如果PG=1,则允许分页,经分段部件出来的线性地址仍为虚地址,必须经分页部件转换成物理地址。

 

[1] 分页的寻址过程

 

从虚地址到实地址的转换过程。目标:根据线性地址, 得到物理页面基地址以及该页面内的偏移量。 于是,基于简单查表的转换机构的不可行性。

 

所以,我们建立二级查表机制:

 

第一级表:称为页目录, 1024, 称为页目录项。每一项用来指示一个二级表(的基地址)

 

第二级表:称为页表, 1024, 称为页表项。每一项用来指示一个页面地基地址。

 

由此可得:二级表共可以指示1024×1024个页面的基地址, 1M个页面的基地址。

 

80386中,页目录只有一个,大小为4K,常驻内存;页表1024个,不常驻内存。二级表的地址转换过程:将虚拟地址的高20位分成两部分, 分别用于指示两种不同表的表项(作为表内的偏移量) 如下图所示:

 

3)页目录项和页表项的组成

 

页目录项

页表项

1M个页,每个页面的长度4K。实际访问时基地址单位量的增/减跨越4K空间,因此,前20位仅表示A31A12,低12位自动补0

CR3寄存器所提供的页目录基地址也只给了20位基地址,用于查找常蛀内存的页目录使用。

 

控制位:

 

D 修改位:页目录项的D位无意义;页表项D位为1表项所对应的页面在内存中已被修改。在换页时, 需要将内存中的这个页面先写回磁盘。页表项D位为1表示未作修改换页时不必写回磁盘。

 A 访问位:页目录项A位为1则对应的页表已被访问过、为0则对应的页表未被访问过(操作系统可用该位并结合时钟对页表实施LRU淘汰算法);页表项A位为1表示对应的页面已被访问过、为0表示对应的页面未被访问过(操作系统可用该位并结合时钟对页面实施LRU淘汰算法)。

 

P 存在位为1表示对应的页表或页面在内存空间;为0表示对应的页表或页面不在内存空间。

 

U/S R/W 与(当前)程序特权级 CPL 的配合使用:

 

4 TLB(Translation Lookaside Buffer, 快表 )

 

针对页地址转换的Cache,工作原理:

 

TLB表的结构  — TLB表的每一项组成:

 

 

32个表项构成一个48组的矩阵

 

 

转换过程描述:

 

用线性地址高20位的低3(D14D13D12)经译码选中某一组(比如5);用高17位与4路的5(45)中所含的线性地址的高17位同时匹配(用比较电路可以实现), 哪一路匹配, 就选中那一路的5,被选中的组送出物理基地址并与线性地址的低12(即页内偏移) 形成物理地址

3.80386I/O及保护

 

(1) 端口寻址

 

端口独立寻址方式

 

16位地址寻址64K空间(8位端口)

 

2个连续8位端口可组成一个16位端口; 4个连续8位端口可组成一个32位端口

 

2)寻址方式

 

I/O指令的寻址方式:直接寻址和间接寻址。

 

直接寻址:指令中直接给出以立即数方式的端口地址, 范围是0~255

 

间接寻址:端口地址由寄存器(DX)来指示, 寻址范围0~65536(64K)

 

3I/O保护

 

当系统工作在保护模式下, I/O操作受到特权级权限的保护。

 

执行I/O指令时,必须在数值上满足:CPLIOPL (标志位寄存器)

 

在应用程序中, 通过调用操作系统实现I/O操作, 操作系统具有最高的特权级, 可通过操作系统实现对系统I/O资源的统一管理。

原创粉丝点击