首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
深入学习LINUX内核之三(图文讲解)
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2008-04-15  



4. 任务寄存器TR

TR寄存器用於存放当前任务TSS段的16位段选择符号、32位基底位址、16位段长度和描述符号属性值。它引用GDT表中的一个TSS类型的描述符号。指令LTR和STR分別用於载入和保存TR暂存器的段选择符号部分。当使用LTR指令把选择符号载入进任务寄存器时,TSS描述符号中的段基底位址、段限长度以及描述符号属性会被自动地载入到任务寄存器中。当执行任务切換时,处理器会把新任务的TSS的段选择符号和段描述符号自动地载入进任务寄存器TR中。



4.1.3 控制寄存器

控制寄存器(CR0、CR 1、CR2和CR3)用於控制和确定处理器的操作模式以及当前执行任务的特性,见图4-3所示。CR0中含有控制处理器操作模式和状态的系统控制标志;CR1保留不用;CR2含有导致页错误的線性位址。CR3中含有页目錄表实体记忆体基底位址,因此该寄存器也被称为页目录基底位址寄存器PDBR(Page-Directory Base address Register) 。





1. CR0中辅助运算器控制位

CR0的4个Bit位:扩允类型位ET、任务切換位TS、模拟位EM和数学存在位MP用於控制80X86浮点(数学)辅助运算器的操作。有关辅助运算器的详细說明,请参看往后介绍的11章內容。CR0的ET位元(标志)用於选择与辅助运算器进行通信所使用的协定,即指明系统中使用的是80387还是80287辅助运算器。TS、MP和EM位元用於确定浮点指令或WAlT指今是否应该產生一个设备不存在DNA(Device Not Available)異常。这个異常可用来仅为使用浮点运算的任务保存和恢复浮点寄存器。对於沒有使用浮点迎算的任务,这樣做可以加快它们之间的切換操作。

ET CR0的位4是扩允类型标志(Extension Type)。当该标志为l时,表示指明系统有80387辅助运算器存在,并使用32位元辅助运算器协定。ET=0指明使用80287辅助运算器。加果模拟位EM=1,则该位将被忽略。在处理器复位操作时,ET位元俞被初始化指明系统中使用的辅助器类型。如果系统中有80387,则ET被设置成1,否则若有一个80287或者没有辅助运算器,则ET被设置成0。


TS CR0的位3是任务已切換(Task Switched)标志。该标志用於推迟保存任务切換时的辅助运算器內容,直到新任务开始实际执行辅助运算器指令。处理器在每次任务切換时都会设置该标志,並且在执行辅助运算器指令时测试该标志。

如果设置了TS标志並且CR0的EM标志为0,那麼在执行任何辅助运算器指令之前会產生一个设备不存在DNA(Device Not Available)異常。如果设置了TS标志但沒有设置CR0的MP和EM标志,那么在执行辅助运算器指令WAIT/FWAIT之前不会產生设备不存在異常。如果设置了EM标志,那麼TS标志对辅助运算器指令的执行无影响。见表4-1所示。

在任务切換时,处理器並不自动保存辅助运算器的上下文,而是会设置TS标志。这个标志会使得处理器在执行新任务指令流的任何时候遇到一条辅助运算器指令时產生设备不存在異常。设备不存在異常的处理程式可使用CLTS指令清除TS标志,並且保存辅助运算器的上下文。如果任务从沒有使用过辅助运算器,那麼相应辅助运算器上下文就不用保存。

EM CR0的位元2是模拟(EMulation)标志。当该位设置时,表示处理器沒有內部或外部辅助运算器,执行辅助运算器指令时会引起设备不存在異;当清除时,表示系统有辅助运算器。设置这个标志可以迫使所有浮点指令使用软体来模拟。

MP CR0的位元l是监控辅助运算器(Monitor Coprocessor或Math Pesent)标志。用於控制WAIT/FWAIT指令与TS标志的交互作用。如果MP=1、TS=1,那麼执行WAIT指令将產生一个设备不存在異常;如果MP=0,则TS标志不会影响WAIT的执行。





2. CR0中保护控制位

PE CR0的位元。是啟用保护(Protection Enable)标志。当设置该位元时即开啟了保护模式;当重定时即进入真实位址模式。这个标志仅开啟段级保护,而並沒有啟用分页机制。若要啟用分页机制,那麼PE和PG标志都要置位元。


PG CR0的位元31是分页(Paging)标志。当设置该位时即开啟了分页机制;当重定时则禁止分页机制,此时所有線性位址等同於实体位址,在开啟这个标志之前必须已经或者同时开啟PE标志。即若要啟用分页机制,那麼PE和PG标志都要置位元。


WP 对於Intel 80486或以上的CPU、CR0的位元16是防写(Write Protect)标志。当设置该标志时,处理器会禁止超级用戶程式(例如特权级0的程式)向用戶级唯读页面执行写操作;当该位复位时则反之。该标志有利於UNIX类作业系统在建立进程时实现写时复制(Copy on Write)技术。


NE 对於Intel 80486或以上的CPU,CR0的位元5是辅助运算器错误(Numeric Error)标志。当设置该标志时,就啟用了X87辅助运算器错误的內部报告机制;若重定该标志,那麼就使用PC机形式的X87辅助运算器错误报告机制。当NE为重定模式並且CPU的IGNNE输入接腳有信号时,那麼数学辅助运算器X87错误将被忽略。当NE为重定模式並且CPU的IGNNE输入接腳无信号时,那麼非遮罩的数学辅助运算器X87错误将导致处理器透过FERR接腳在外部產生一个中断,並且在执行下一个等待形式浮点指令或WAIT/FWAIT指令之前立刻停止指令执行。CPU的FERR接腳用於模拟外部辅助运算器80387的ERROR接腳,因此通常连接到中断控制器输入请求接腳上。NE标志、IGNNE接腳和FERR接腳用於利用外部逻辑来实现PC机形式的外部错误报告机制。


啟用保护模式PE(Protected Enable)位元(位0)和开敔分页PG(Paging)位元(位31)分別用於控制分段和分页机制。PE用於控制分段机制。如果PE=l,处理器就工作在开啟分段机制环境下,即执行在保护模式下。如果PE=0,则处理器关闭了分段机制,並如同8086工作於真实位址模式下。PG用於控制分页机制。如果PG=1,则开启了分页机制。如果PG=-0,分页机制被禁止,此时线性位址被直接为实体位址使用。

如果PE=0、PG=0,处理器工作在真实位址模式下;如果PG=0、PE=l,处理器工作在沒有开啟分页机制的保护模式下;如果PG=l、PE=0,此时由於不在保护模式下不能啟用分页机制,因此处理器会產生一个一般保护異常,即这种标志组合无效;如果PG=1、PE=l,则处理器工作在开啟了分页机制的保护模式下。
共6页: 上一页 [1] 2 [3] [4] [5] [6] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·深入学习LINUX内核之四(图文讲解
·深入学习LINUX内核之二(图文讲解
·深入学习LINUX内核之五(图文讲解
·深入学习Linux内核文档一(图文讲
·深入学习LINUX内核之六(图文讲解
·深入学习LINUX内核之七(图文讲解
·Linux系统内核漏洞分析
·如何在Linux内核中的实现SYN Coo
·简析Linux与FreeBSD的syscall
·Linux操作系统“警惕”内核汉化
·Linux操作系统核心的汉字显示机
·如何利用异常表处理Linux内核态

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!