您的位置:首页 > 运维架构 > Linux

Linux-8086保护模式

2017-02-11 17:26 225 查看
Linux保护模式涉及到几个内存管理寄存器:GDTR(全局描述符表寄存器)、LDTR(局部---)、IDTR(中断---)、TR(任务寄存器)。

控制寄存器:CR0含有协处理器的控制位;CR1保留不用;CR2记录页错误线性地址;CR3高20位记录页目录基地址。

CR0中的TS(Task Switched):任务切换标志;

ET(Extension Type):为1时,表明使用80387协处理器;为0时,使用80287协处理器;

PE(Protection Enable):启动保护标志,开启断式保护机制;

PG(Paging):分页标志

NE(Numeric Error):协处理器错误

地址寻址:保护和地址变换

分段机制:逻辑地址——>线性地址

分页机制:线性地址——>物理地址

段选择符是段的唯一标识,其中包含请求特权级(RPL)、表指示标志(TI=0表示GDT,TI=1表示LDT)、索引值(Index);段描述符中保存段的基地址段限长段属性等重要信息;

段选择符中的索引在GDT/LDT中定位相应的段描述符,利用段描述符中检查段的访问权限和范围,在段描述符中取得段的基地址,加上偏移地址得到线性地址。

整个虚拟地址空间分为相等两半:一半由LDT映射(局部地址空间),一半由GDT映射(全局地址空间);

GDT是一个数据结构,GDT的基地址和长度必须加载进GDTR寄存器;GDT中的描述符总是8字节,GDT限长为(8n-1),GDT的第一个描述符是空描述符,使用期加载内存时会产生保护性内存;

每个LDT在GDT中都有一个段描述符和段选择符;

段寄存器(CS、SS、DS、ES)结构分为可见部分(段选择符)和不可见部分(段基地址、段限长、段属性);

代码段是一致或不一致的,但数据段必须是非一致的,即不能被低特权级的程序访问。

段描述符分为2大类:系统段描述符(LDT、TSS等)和门描述符(调用、陷阱、中断门,任务门);

调用、陷阱、中断门含有代码段的选择符&段中程序入口点的指针,任务门含有TSS段选择符。

保护机制:4级段级保护 & 2级页级保护

段级保护:CPL(当前特权级),RPL(请求特权级,与DPL描述符特权级比较),段限长类型,特权级调用门;

页级保护:R/W、U/S(用户/超级用户);

IDT:中段描述符表,也称中断向量表,用来定位中断处理程序入口地址,存放3种描述符(中断门、陷阱门、任务门描述符)。

中断源:外部(硬件)中断,软件中断;

异常源:程序错误异常、软件异常

异常分为故障(程序跳过异常运行)、陷阱(程序重新运行异常)和中止(程序中止)。

中断门和陷阱门的唯一区别:CPU操作标志寄存器IF的方法,通过陷阱门不会影响IF标志。

任务由两部分组成:任务执行空间和TSS(任务状态段);

TSS中包含动态字段(DS、ES等段寄存器,AX、BX等通用寄存器,FLAG标志寄存器,IP,先前任务链接字段)和静态字段(CR3页目录基地址寄存器,IO位图基地址,LDT,栈指针,调试陷阱T标志)。

TSS存放在GDT中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux0.12