尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Control Registers flag

Control Registers flag 控制寄存器的多个标志位可以分成三类内存管理、保护与安全、性能优化。1. 内存管理维度PG、PAE、PSECR0.PG(分页启用) 与CR0.PE(保护模式启用)实现机制这是一个两级“总闸”。PG位直接控制 CPU 内部的分页单元Paging Unit的启用。当PG1时CPU 会将来自分段单元的线性地址送往分页单元进行转换否则线性地址就直接作为物理地址。重要规则硬件规定PG只能在PE1已开启保护模式的情况下才能被置为 1。因此从实模式启动到启用分页必须先进入保护模式。CR4.PAE(物理地址扩展)实现机制PAE位改变了页表结构。当PAE0时使用32位页表页目录项PDE和页表项PTE都是 4 字节最多寻址 4GB 物理内存。当PAE1时CPU 切换到64位页表PDE 和 PTE 变为 8 字节。页表项中的物理地址字段从 20 位扩展到 24 位再加上 8 位共 36 位从而允许 32 位 CPU 寻址高达64GB的物理内存。一个关键检查操作系统在启用PAE前必须通过CPUID指令检查 CPU 是否真的支持PAE特性。CR4.PSE(页大小扩展)实现机制PSE位允许页的大小在 4KB 和 4MB 之间切换。当PSE1时CPU 会检查页目录项PDE中的PS(Page Size) 位。如果PS1该 PDE 就指向一个 4MB 的大页而不是一个下级页表。大页减少了页表层级增加了 TLB 的命中率对数据库等大型应用性能有明显提升。64位下的变化在 x86-64 长模式下PSE标志被忽略并固定支持 2MB 大页由PS位控制。2. 保护与安全维度WP、SMEP、SMAP、UMIPCR0.WP(写保护)实现机制WP位控制内核Ring 0能否写入标记为只读Read-Only的内存页。当WP0时内核可以无视页表上的只读标志直接写入任何页面。当WP1时即使内核态写入只读页也会触发页错误Page Fault。核心用途这是实现写时复制Copy-on-Write, COW的关键。在fork()系统调用时子进程的页表被标记为只读。当父子进程任意一方尝试写入时会触发页错误内核通过处理该错误来复制物理页。WP1保证了内核在 COW 过程中不会意外绕过这个机制。CR4.SMEP与CR4.SMAP实现机制这是两个基于特权级检查的硬件防护。SMEP (Supervisor Mode Execution Prevention)当该位为 1 时禁止内核Ring 0执行用户态Ring 3内存页中的代码。这能阻止经典的“ret2user”攻击即内核被劫持后跳转到用户空间准备的恶意代码。SMAP (Supervisor Mode Access Prevention)当该位为 1 时禁止内核Ring 0访问用户态Ring 3内存页的数据。这能防止内核意外地从用户空间读取或写入数据例如防止copy_from_user类函数在未做安全检查时被恶意利用。如何绕过内核可以通过临时设置EFLAGS.AC标志位在执行特定的用户空间访问操作时短暂地禁用 SMAP 检查。CR4.UMIP(用户模式指令预防)实现机制UMIP 使得SGDT、SIDT、SLDT、SMSW和STR这五条指令在用户态CPL 0执行时会触发通用保护异常#GP。这些指令原本在用户态执行时只是返回一些信息如 GDT 基址但恶意软件可利用这些信息进行侧信道攻击或内核地址空间布局随机化KASLR绕过。UMIP 提供了硬件级的防护。3. 性能与虚拟化维度PGE、PCIDE、VMXECR4.PGE(全局页启用)实现机制PGE位启用了页表项PTE中的“全局页Global Page”标志bit 8。当一个页被标记为“全局”时即使CR3寄存器被修改即发生进程切换CPU 也不会自动刷新该页在 TLB 中的缓存。用途典型的全局页包括内核代码段、内核数据段等。因为所有进程都共享这部分内核地址空间无需在每次上下文切换时重新建立 TLB 映射能显著提升性能。CR4.PCIDE(进程上下文标识符)实现机制PCIDE位允许为每个进程分配一个 12 位的PCIDProcess Context IDentifier。当启用后CPU 在 TLB 中缓存地址转换信息时会同时打上PCID 标签。这样在切换 CR3切换进程时CPU 可以通过 PCID 区分不同进程的 TLB 条目只刷新当前进程的 TLB或根本不刷新。这避免了传统切换 CR3 时刷新整个 TLB 的巨大开销。与 PGE 的协作PGE和PCIDE有密切配合。启用PCIDE时全局页PGE的行为会稍有变化它们会关联到一个特定的 PCID而不是所有 PCID实现了更细粒度的控制。CR4.VMXE(虚拟机扩展启用)实现机制VMXE是启用 Intel VT-x 的“总开关”。当该位为 1 时CPU 才会识别并允许执行VMXVirtual Machine eXtensions指令集如VMLAUNCH、VMRESUME等。VMM虚拟机监视器如 KVM使用这些指令来创建、进入和退出VMX 根模式VMM 自身和VMX 非根模式虚拟机内部。启用VMXE本身并不会开始虚拟化它只是允许 CPU 进入 VMX 操作模式。
返回列表