中文内核操作系统吧 关注:52贴子:634
  • 4回复贴,共1
PG
分页(CR0的31位)
置1启用分页,置0不启用分页。当禁用分页时,所有的线性地址都可以当作物理地址对待。如果PE标志(CR0中位0)没有置1,PG标志将不起作用,实际上,如果在PE标志为0的情况下,将PG标志置1会产生一个一般保护异常(#GP)。见3.6节“分页(虚拟内存)概况”对处理器分页机制的详细说明。
CD
禁用高速缓存(CR0的位30)当CD和NW标志为0时,处理器中内部(和外部)内存位置的高速缓存将启用。当CD标志置1时,高速缓存将会被禁用,如表10-5所示。为阻止处理器访问和修改它的高速缓存,必须将CD标志置1并且使缓存失效,这样就不会命中高速缓存了(见10.5.3节“阻止高速缓存”)见10.5节“高速缓存控制”对于选中的页或者内存位置的高速缓存限制的详细描述
NW
不直写(CR0位29)当NW和CD标志都置0时,回写(即write-back,主要是对 Pentium 4、Intel Xeon、P6系列、和Pentium处理器而言)或直写(即write-through,对Intel486处理器而言)被用来写命中缓存时的数据,并且启用失效循环。表10-5详细介绍了NW标志在高速缓存方面对CD和NW设置的影响。
AM
对齐屏蔽(CR0的位18)置1时启用自动对齐检查,置0时禁用对齐检查。对齐检查只有在AM标志、EFLAGES中的AC标志置1时并且CPL是3、处理器运行在保护模式下或者虚拟8086方式下才进行,
WP
写保护(CR0的位16)置1时禁止管理级的过程往用户级只读页中写,置0时允许管理级的过程往用户级只读页中写。这个标志是用来在创建(forking)一个新进程时实现写拷贝(COW-copy on write),在UNIX操作系统中就是如此。
NE
数值错误(CR0中的位5)置1时启用原生的(内部的)x87FPU错误报告机制,置0时启用类PC的x87FPU错误报告机制。当NE标志置0且检查(ASSERT)IGNNE#输入时,一个未屏蔽处理的x87FPU错误,会引起处理器检查FERR#针来产生一个外部中断,并且在执行下一条等待浮点指令或WAIT/FWAIT指令之前,立即停止指令的执行。FERR#针是用来驱动输入到外部中断控制器的(FERR#模拟intel 287和intel387DX数学处理器的ERROR#针的)。NE标志、IGNNE#针和FERR#针和外部逻辑一起被用来实现类PC的错误报告机制的(参见第8章“软件异常处理”和卷1中的附录D中关于x87 FPU错误报告机制,以及当FERR#针在被检查(ASSERT)时,具体实现所依赖的东西)。
ET
扩展类型(CR0的位4)在Pentium 4、Intel Xeon、P6系列、和Pentium 处理器中为保留位,被硬编码为1。在intel 386和intel486处理器中,这个标志置1表示对intel 387DX数学协处理器指令的支持。
TS 任务切换(CR0的位3)允许当一个任务切换延迟至x87 FPU、MMX、SSE或SSE指令被新任务执行时,保存x87 FPU,MMX,SSE和SSE2的上下文。处理器在每次任务切换时设置该位,并且当执行x87 FPU,MMX,SSE和SSE2指令时测试该位。 z 如果TS标志置1并且EM标志(CR0的位2)置0时,那么在x87 FPU、MMX、SSE和
SSE2指令执行前, “设备不可使用”异常(#NM)会产生,但是这些指令并不包括PAUSE、PREFETCHh、SFENCE、LFENCE、MFENCE、MOVNTI和CLFLUSH指令。(参见WAIT/FWAIT指令下的相关叙述)
如果TS标志置1并且MP标志(CR0的位1)和EM标志都置0时,那么在执行x87 FPU WAIT/FWAIT指令之前#NM异常并不会产生。
如果EM标志置1,TS标志的值对x87 FPU、MMX、SSE和SSE2指令的执行就没有什么影响。
表2-1列出了处理器遇到x87 FPU指令时,根据TS、EM、MP标志的值所作出的不同反应。表11-1和12-1列出了处理器分别遇到MMX和/或SSE或SSE2指令时,所作出的反应。
处理器在进行任务切换时并不会自动保存x87 FPU、XMM、和MXCSR寄存器的内容。相反地处理器将TS标志置为1,这样在新任务的指令流中,无论处理器何时遇到x87 FPU、MMX、SSE或SSE2 指令(前面列出的指令除外),就会引起#NM异常。 #NM异常处理程序可以用来清除TS标志(用CLTS指令)并且保存x87 FPU、XMM的上下文和MXCSR寄存器。如果任务从未遇到x87 FPU、MMX、SSE或者SSE2指令,那么x87 FPU、MMX、SSE和SSE2的上下文就从不保存。
EM 仿真(CR0的位2)置1时表明处理器没有内部或者外部的x87 FPU,置0时表明有x87 FPU。这个标志也影响MMX、SSE和SSE2指令的执行。当EM为1时x87指令的执行会产生一个“设备不可使用”的异常(#NM)。当处理器没有x87 FPU或者没有连接到外部数学协处理器时,必须将该位置为1。设置该位将强制所有的浮点指令由软件仿真。表9-2根据IA-32处理器和x87 FPU或者系统中有的数学协处理器,列出了该标志的推荐值。表2-1列出了EM、MP和TS标志的相互影响。另外当EM标志为1时,执行MMX指令将会产生个非法操作码的异常(#ND)(见表11-1)。所以如果IA-32处理器要想利用MMX技术,EM标志必须设置为0以便于MMX指令的执行。对于SSE和SSE2扩展也是一样,当EM为1时,大多数SSE和SSE2指令的执行都会产生一个非法操作码异常(#UD)(见表12-1)。所以如果IA-32处理器要想利用SSE和SSE2扩展,EM就必须置为0以便于运行这些指令。不受EM的值影响的SSE和SSE2指令有PAUSE、REFETCHh、SFENCE、LFENCE、MFENCE、MOVNTI和CLFLUSH指令。
MP 监测协处理器(CR0的位1)控制WAIT(或者FWAIT)指令与TS标志(CR0的位3)的相互作用。如果MP标志是1,WAIT指令将会“设备不可使用”的异常(#NM)如果TS标志是1。如果MP标志是0,WAIT指令就会忽略TS标志的值。表9-2列出了这个标志的推荐设置,这些设置是根据IA-32处理器和系统中是否有x87 FPU或协处理器而进行的。表2-1列出了MP、EM和TS标志的相互作用。
PE 启用保护模式(CR0的位0)置1时启用保护模式,置0时启用实模式。这个标志并不直接启用分页机制。它只是启用了段级保护。要是启用分页机制,必须将PE和PG标志都设为1。参见9.9节“模式切换”中利用PE标志在实模式与保护模式之间进行切换。
PCD 禁用页级缓存(CR3的位4)控制当前页目录是否缓存。置1时禁止页目录缓存,置0启用页目录缓存。这个标志只影响处理器内部缓存(L1和L2都存在的情况下)。如果没有启用分页机制 (CR0中的PG标志置0)或者CR0中的CD(禁用缓存)标志置0,处理器将忽略这个标志。第10章内存缓存控制 中有关于这个标志的详细说明。参见3.7.6节“页目录和页表项”对PCD标志在页目录和页表项协作的详细信息。
PWT 页级透明写(CR3中的位3)控制着当页目录的直写或回写的缓存机制。如果PWT标志置1,则用直写,置0启用回写缓存。这个标志只影响内部缓存(在L1和L2都存在的情况下),如果没有启用分页机制(CR0中的PG标志为0)或者CR0中的CD(禁用缓存)标志为1,处理器将忽略这个标志。参见10.5节“缓存控制”中对这个标志的详细介绍。参见3.7.6节“页目录页表项” 对PCD标志在页目录和页表项协作的详细信息。
VME
虚拟8086模式扩展(CR4中的位0)置1时则在虚拟8086模式下,启用中断和异常处理扩展。置0时禁用扩展功能。虚拟模式扩展的应用是通过减少虚拟8086监控程序对8086程序执行过程中出现的中断和异常的处理,并且重定向中断和异常到8086程序的处理程序,从而改进虚拟8086模式下应用程序的性能。对于虚拟中断标志(VIF)它也提供了硬件支持来改进在多任务及多处理器环境下执行8086程序的可靠性。参见16.3“虚拟8086模式下的中断和异常处理”中对这一特征使用方法的详细论述。
PVI
保护模式下的虚拟中断(CR4中的位1)置1时对于虚拟中断标志(VIF)在保护模式下启用硬件支持,置0时在保护模式下禁用VIF标志。参见16.4“保护模式下虚拟中断“中对这一特征用法的详细论述。
TSD
禁用时间戳(CR4中的位2)。置1时将限制运行在0级特权下的程序执行RDTSC指令。置0时则允许任何特权程序执行这一指令。
DE
调试扩展功能(CR4的位3)置1时,对调试寄存器DR4和DR5的引用会引起一个未定义的操作码(#UD)异常;置0时为了与运行在早期IA-32处理器上面的程序兼容,处理器会混淆对DR4和DR5的引用。参见15.2.2节“调试寄存器DR4和DR5”中对这一标志的详细说明。
PSE
页尺寸扩展(CR4中的位4 )置1时页大小为4M字节,置0时页大小为4K字节。参见3.6.1节“页选项”中对这个标志用法的介绍。
PAE
物理地址扩展(CR4中的位5)置1时启用分页机制来引用36位物理地址;置0时只可引用32位地址。参见3.8节“用PAE分页机制实现36位物理地址访问”中对物理地址扩展的详细说明。
MCE
启用机器检测(CR4中的位6)置1时启用机器检测(machine-check)异常,置0时禁用机器检测异常。参见第14章“机器检查架构”中对机器检查异常和机器检查架构的详细说明。
PGE
启用全局页(CR4中的位7)(在P6系列处理器中引入)置1时启用全局页,置0时禁用全局页。全局页这一特征能够使那些经常被使用或共享的页对所有的用户标志为全局的(通过页目录或者页表项中的第8位-全局标志来实现)。在任务切换或者往CR3寄存器写时,全局页并不从TLB中刷新。当启用全局页这一特征时,在设置PGE标志之前,必须先启用分页机制(通过设置CR0中的PG标志)。如果将这个顺序颠倒了,可能会影响程序的正确性以及处理器的性能会受损。参见3.11节“转换查找缓冲区TLB”中对这一位的详细使用。
PCE
启用性能监测计数器(CR4中的位8)置1时,允许RDPMC指令执行,不论程序运行哪个特权级别。置0时RDPMC指令只能运行在0级特权上。
OSFXSR 操作系统对FXSAVE和FXRSTOR指令的支持(CR4中的位9)置1时,这一标志具有下列
功能:(1)表明操作系统支持FXSAVE和FXRSTOR指令(2)启用FXSAVE和FXRSTOR指令来保存和恢复XMM和MXCSR寄存器连同x87 FPU和MMX寄存器的内容(3)允许处理器执行除了PAUSE、PREFETCHh、SFENCE、LFENCE,MFENCE、MOVNTI和CLFLUSH指令之外的任何SSE和SSE2指令。如果这一标志置0,则FXSAVE和FXRSTOR指令保存和恢复x87 FPU和MMX寄存器的内容,但可能不保存和恢复XMM和MXCSR寄存器的内容。另外,如果这一标志置0,当处理器企图执行除了PAUSE、PREFETCHh、SFENCE、LFENCE、MFENCE、 MOVNTI和CLFLUSH指令之外的任何SSE和SSE2指令时,都将会产生一个非法操作码异常(#UD),操作系统必须正确地设置这一标志。
注意:
CPUID特征标志FXSR、SSE和SSE2(位24、25、26)分别表示在特定的IA-32处理器上,是否具有FXSAVE/FXRESTOR指令,SSE扩展以及SSE2扩展。OSFXSR位则为操作系统启用这些特征提供了途径以及并指明了操作系统是否支持这些特征。
OSXMMEXCPT
操作系统支持未屏蔽的SIMD浮点异常(CR4中的位10),表明操作系统通过异常处理程序支持非屏蔽的SIMD浮点异常的处理,该异常处理程序在SIMD浮点异常产生时被调用。操作系统必须正确的设置这一标志,如果这一标志没有设置,当处理器检测到非屏蔽SIMD浮点异常时,将会产生一个非法操作码异常(#UD)


1楼2015-06-02 09:16回复
    OSFXSR
    Operating System Support for FXSAVE and FXRSTOR instructions (bit 9 of CR4) — When set, this
    flag: (1) indicates to software that the operating system supports the use of the FXSAVE and FXRSTOR
    instructions, (2) enables the FXSAVE and FXRSTOR instructions to save and restore the contents of the
    XMM and MXCSR registers along with the contents of the x87 FPU and MMX registers, and (3) enables the
    processor to execute SSE/SSE2/SSE3/SSSE3/SSE4 instructions, with the exception of the PAUSE,
    PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT.
    If this flag is clear, the FXSAVE and FXRSTOR instructions will save and restore the contents of the x87 FPU
    and MMX instructions, but they may not save and restore the contents of the XMM and MXCSR registers.
    Also, the processor will generate an invalid opcode exception (#UD) if it attempts to execute any
    SSE/SSE2/SSE3 instruction, with the exception of PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE,
    MOVNTI, CLFLUSH, CRC32, and POPCNT. The operating system or executive must explicitly set this flag.
    NOTE
    CPUID feature flags FXSR indicates availability of the FXSAVE/FXRSTOR instructions. The OSFXSR
    bit provides operating system software with a means of enabling FXSAVE/FXRSTOR to save/restore
    the contents of the X87 FPU, XMM and MXCSR registers. Consequently OSFXSR bit indicates that
    the operating system provides context switch support for SSE/SSE2/SSE3/SSSE3/SSE4.
    OSXMMEXCPT
    Operating System Support for Unmasked SIMD Floating-Point Exceptions (bit 10 of CR4) —
    When set, indicates that the operating system supports the handling of unmasked SIMD floating-point
    exceptions through an exception handler that is invoked when a SIMD floating-point exception (#XM) is
    generated. SIMD floating-point exceptions are only generated by SSE/SSE2/SSE3/SSE4.1 SIMD floating-
    point instructions.
    The operating system or executive must explicitly set this flag. If this flag is not set, the processor will
    generate an invalid opcode exception (#UD) whenever it detects an unmasked SIMD floating-point excep-
    tion.
    VMXE
    VMX-Enable Bit (bit 13 of CR4) — Enables VMX operation when set. See Chapter 23, “Introduction to
    Virtual-Machine Extensions.”
    SMXE
    SMX-Enable Bit (bit 14 of CR4) — Enables SMX operation when set. See Chapter 5, “Safer Mode Exten-
    sions Reference” of Intel ® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2C.
    FSGSBASE
    FSGSBASE-Enable Bit (bit 16 of CR4) — Enables the instructions RDFSBASE, RDGSBASE, WRFSBASE,
    and WRGSBASE.
    PCIDE
    PCID-Enable Bit (bit 17 of CR4) — Enables process-context identifiers (PCIDs) when set. See Section
    4.10.1, “Process-Context Identifiers (PCIDs)”. Can be set only in IA-32e mode (if IA32_EFER.LMA = 1).
    OSXSAVE
    XSAVE and Processor Extended States-Enable Bit (bit 18 of CR4) — When set, this flag: (1) indi-
    cates (via CPUID.01H:ECX.OSXSAVE[bit 27]) that the operating system supports the use of the XGETBV,
    XSAVE and XRSTOR instructions by general software; (2) enables the XSAVE and XRSTOR instructions to
    save and restore the x87 FPU state (including MMX registers), the SSE state (XMM registers and MXCSR),
    along with other processor extended states enabled in XCR0; (3) enables the processor to execute XGETBV
    and XSETBV instructions in order to read and write XCR0. See Section 2.6 and Chapter 13, “System
    Programming for Instruction Set Extensions and Processor Extended States”.
    SMEP
    SMEP-Enable Bit (bit 20 of CR4) — Enables supervisor-mode execution prevention (SMEP) when set.
    See Section 4.6, “Access Rights”.
    SMAP
    SMAP-Enable Bit (bit 21 of CR4) — Enables supervisor-mode access prevention (SMAP) when set. See
    Section 4.6, “Access Rights.”
    PKE
    Protection-Key-Enable Bit (bit 22 of CR4) — Enables IA-32e paging to associate each linear address
    with a protection key. The PKRU register specifies, for each protection key, whether user-mode linear
    addresses with that protection key can be read or written. This bit also enables access to the PKRU register
    using the RDPKRU and WRPKRU instructions.
    TPL
    Task Priority Level (bit 3:0 of CR8) — This sets the threshold value corresponding to the highest-
    priority interrupt to be blocked. A value of 0 means all interrupts are enabled. This field is available in 64-
    bit mode. A value of 15 means all interrupts will be disabled.


    2楼2015-06-02 10:56
    回复
      osfxsr
      对于fxsave fxrstor指令和操作系统的支持(9位的CR4)-当设置,这
      标志:(1)表明,该操作系统支持的fxsave和fxrstor使用软件
      说明,(2)使fxsave和fxrstor指令来保存和恢复的内容
      XMM寄存器和mxcsr随着内容的x87 FPU、MMX寄存器,和(3)使
      处理器执行SSE/SSE2 / SSE3 / ssse3 / SSE4指令,随着暂停时间的例外,
      prefetchh,sfence,lfence,mfence,movnti,CLFLUSH,CRC32,和popcnt。
      如果这个标志是明确的,fxsave和fxrstor指令将保存和恢复的x87 FPU的内容
      和MMX指令,但不可以保存和恢复的内容和mxcsr XMM寄存器。
      同时,处理器会产生一个无效的操作码例外(# UD)如果它试图执行任何
      SSE/SSE2 / SSE3指令,以暂停,prefetchh,sfence,lfence例外,mfence,
      movnti,CLFLUSH,CRC32,和popcnt。操作系统或执行必须显式设置此标志。

      旗帜fxsr CPUID特征表明了fxsave / fxrstor说明可用性。的osfxsr
      位提供操作系统软件具有使fxsave / fxrstor保存/恢复手段
      的x87 FPU寄存器的内容,XMM和mxcsr。因此osfxsr位表示
      操作系统提供了SSE/SSE2 / SSE3 / ssse3 / SSE4上下文切换支持。
      osxmmexcpt
      未屏蔽的SIMD浮点异常操作系统支持(CR4 10位)—
      当设置,表明操作系统支持SIMD浮点处理揭秘
      例外通过异常处理程序被调用时,一个SIMD浮点异常(# XM)是
      生成。SIMD浮点异常只产生SSE/SSE2 / SSE3 / SSE4.1 SIMD浮点—
      点指令。
      操作系统或执行必须显式设置此标志。如果未设置此标志,处理器将
      生成一个无效的操作码例外(# UD)当它检测到一个揭露SIMD浮点异常处理—
      等。
      vmxe
      VMX使能位(CR4点13)-使VMX操作时设置。见23章,导论
      虚拟机扩展。”
      smxe
      SMX使能位(CR4点14)-使SMX运行时设置。见5章,“安全模式推广—
      结论参考“英特尔®64和IA-32架构软件开发者手册,卷2。
      fsgsbase
      fsgsbase使能位(CR4点16)-使指令rdfsbase,rdgsbase,wrfsbase,
      和wrgsbase。
      pcide
      量使能位(CR4点17)-使进程上下文标识符(PCID)当设置。见第
      4.10.1,“进程上下文标识符(PCID)”。只能设置在IA-32e模式(如果ia32_efer.lma = 1)。
      osxsave
      xsave和处理器扩展状态使能位(18位的CR4)-设置时,此标志:(1)表明—
      凯茨(通过CPUID。01h:ECX。osxsave [ 27位]),该操作系统支持的xgetbv使用,
      xsave和xrstor通用软件指令;(2)使xsave和xrstor指令
      保存和恢复的x87 FPU状态(包括MMX寄存器),上证所状态(XMM寄存器和mxcsr),
      随着其他处理器的扩展态,使xcr0;(3)使处理器执行xgetbv
      和xsetbv指令读写xcr0。见第2.6节和第13章,“系统
      编程指令集扩展,处理器扩展状态”。
      学校德育模式
      学校德育模式使能位(20位的CR4)使管理模式执行保护(SMEP)当设置。
      参见4.6节,“访问权限”。
      SMAP
      SMAP使能位(4位21)使管理方式获得预防(SMAP)当设置。看到
      4.6节,“访问权限”。
      PKE
      保护的关键使能位(22位的CR4)-使IA-32e分页来把每个线性地址
      与保护的关键。pkru指定的寄存器,每个保护的关键,无论是用户模式的线性
      与保护密钥可以读取或写入的地址。这一点也能够访问pkru寄存器
      使用rdpkru和wrpkru指令。
      TPL
      任务的优先级(位3:0的CR8)这集的阈值对应于最高—
      优先中断被封锁。值为0意味着所有的中断使能。这场可在64—
      位模式。值为15意味着所有的中断将被禁用。


      3楼2015-06-02 11:00
      回复
        2CR0
        0 PE 启用保护模式
        1 MP 监测协处理器
        2 EM 仿真
        3 TS 任务切换
        4 ET 扩展类型
        5 EN 数值错误
        6-15 保留
        16 WP 写保护
        17 保留
        18 AM 对齐屏蔽
        19-30 保留
        29 NW 不直写
        30 CD 禁用高速缓存
        31 PG 分页
        CR1 保留
        CR2 缺页线性地址
        CR3
        0-2 保留
        3 PWT 禁用页级缓存
        4 PCD 页级透明写
        5-11 保留
        12-31 页目录基地址
        CR4
        0 VME 虚拟8086模式扩展
        1 PVI 保护模式下的虚拟中断
        2 TSD 禁用时间戳
        3 DE 调试扩展功能
        4 PSE 页尺寸扩展
        5 PAE 物理地址扩展
        6 MCE 启用机器检测
        7 PGE 启用全局页
        8 PCE 启用性能监测计数器
        9 OSFXSR 操作系统对FXSAVE和FXRSTOR指令的支持
        10 OSXMMEXCPT 操作系统支持未屏蔽的SIMD浮点异常
        11 保留
        12 保留
        13 VMXE 启用虚拟机扩展
        14 SMXE 启用安全模式扩展
        15 保留
        16 FSGSBASE 能使用指令RDFSBASE、RDGSBASE、WRFSBASE、和WRGSBASE
        17 PCIDE 识别控制寄存器标志
        18 OSXSAVE xsave和处理器的扩展态
        19 保留
        20 SMEP 监督模式执行保护
        21 SMAP 监督模式存取保护
        22-31 保留


        4楼2015-06-02 11:01
        回复
          PG=0
          CD=1
          NW=1
          AM=0
          WP=0
          NE=0
          ET=1
          TS=0
          EM=0
          MP=0
          PE=1
          PCD=1
          PWT=1
          SMAP=0
          SMEP=0
          OSXSAVE=0
          PCIDE=0
          FSGSBASE=0
          SMXE=0
          VMXE=0
          OSXMMEXCPT=0
          OSFXSR=0
          PCE=0
          PGE=0
          MCE=0
          PAE=0
          PSE=1
          DE=0
          TSD=1
          PVI=0
          VME=0


          5楼2015-06-02 11:01
          回复