保护模式定义: http://baike.baidu.com/view/177586.htm?fr=topic
http://x86.ddj.com/articles/pmbasics/tspec_a1_doc.htm
“保护”:用硬件对每个任务使用的内存空间进行保护,阻止其他任务的非法访问。 特点如下:
A 采用虚拟存储管理,启用分段和分页机制。允许关闭分页机制
B 段内偏移地址32位,每个段最大232B=4GB,每个程序最多可以使用16K个段,理论上的虚拟地址空间为4GB×16K=64TB
C 采用32位地址寄存器,如EBX,ESI,EIP,ESP等。
D 4个特权级:0,1,2,3
。
0级具有最高的特权,可以执行所有指令,建立和维护各种表格,管理整个系统,供操作系统进程使用
0级具有最高的特权,可以执行所有指令,建立和维护各种表格,管理整个系统,供操作系统进程使用
3级最低,3级任务只能访问操作系统分配给它的内存区间, 不能执行“特权指令”,访问IO设备的权限也受到限制。 供用户程序使用。
保护模式下的寻址方式:
“分段管理”:
•
逻辑地址仍然采用“段:偏移地址”的形式。
•
逻辑地址通过分段管理机构转换为32位的“线性地址”。
•
16位段寄存器内存放的不再是20位段起始地址的高16位,而 是这个段的一个编号,称为“段选择符(Segment Selector)”。
•
使用这个“段选择符”查找“段描述符表(Segment Descriptor Table)”,得到这个段的32位起始地址,加上32
位的偏移地
址,得到这个存储单元的32位“线性地址”。
址,得到这个存储单元的32位“线性地址”。
“分页管理”:
•
32位线性地址通过分页管理机构转换为32位/36位的物理地址
•
所有的存储器以4KB为单位划分成“页(Page)”。
•
线性地址被划分成“页号”和“页内地址”
两部分,根据页号查找
“页表” ,得到这个页在内存真实的起始地址,加上页内地址,
得到该存储单元的物理地址。
“页表” ,得到这个页在内存真实的起始地址,加上页内地址,
得到该存储单元的物理地址。
•
如果通过查表发现该页还在硬盘中,则还要首先启用“换页”机制,把这个页调入内存。
分段机构的三张段描述符表
段描述符表 由若干个段描述符组成,每个段描述符记录一个段的相关信息,如这个段的起始地址,段的长度,段的属性等
全局段描述符表(Global Descriptor Table, GDT)整个计算机内只有一张,存放操作系统使用的各种段的信息。
局部段描述符表(Local Descriptor Table, LDT)每个任务都有一张局部段描述符表,记录这个任务使用的段的信息。
中断描述符表(Interrupt Descriptor Table, IDT)记录“中断服务程序”的位置信息。
控制寄存器
控 制 寄存器 | CRx | BIT31 | BIT30—BIT12 | BIT11—BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
CR0 | PG | 0000000000000000 | ET | TS | EM | MP | PE | ||
CR1 | 保留 | ||||||||
CR2 | 页故障线性地址 | ||||||||
CR3 | 页目录表物理页码 | 000000000000 |