一、80x86 处理器的工作模式
1.1 实模式
实模式概述
实模式(Real Mode)是80x86处理器最早支持的工作模式,也是最基础的工作模式。实模式主要用于早期的MS-DOS操作系统和其他简单的操作环境。在实模式下,处理器能够直接访问1MB的物理内存空间。这个模式与8086处理器的工作方式完全兼容,因此得名"实模式"。
实模式的特点
-
地址空间限制
- 在实模式下,处理器只能访问1MB的内存空间(从0x00000到0xFFFFF)。
- 内存空间的限制源于20位地址总线。
-
段地址和偏移地址
- 实模式使用段:偏移(segment)方式进行内存寻址。
- 段地址乘以16(即左移4位)再加上偏移地址,形成20位的物理地址。
- 例如,段地址为0x1234,偏移地址为0x5678,则物理地址为: 物理地址=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8\text{物理地址} = (0x1234 \times 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8物理地址=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
无内存保护
- 实模式没有内存保护机制,程序可以任意访问整个1MB的内存空间,包括操作系统区域和其他程序的区域。
- 这使得程序之间可能会互相干扰,容易导致系统崩溃。
-
直接硬件访问
- 实模式允许直接访问硬件设备和I/O端口。
- 在实模式下,程序可以直接使用I/O指令(如IN和OUT)与硬件设备进行交互。
-
中断和处理器初始化
- 实模式支持硬件中断和软件中断,使用中断向量表(Interrupt Vector Table, IVT)来管理。
- 中断向量表存储在内存的最低1KB区域(从0x00000到0x003FF)。
- 处理器加电或复位后,会自动进入实模式,并从地址0xFFFF0开始执行代码。
-
可执行代码的限制
- 实模式下可执行代码段的大小受到限制,通常一个代码段最大为64KB(0x0000到0xFFFF)。
实模式的内存布局
在实模式下,内存布局通常包括以下几个部分:
-
BIOS区
- 高端内存(从0xF0000到0xFFFFF)通常用于存放BIOS代码和数据。
- 加电或复位时,处理器从0xFFFF0处开始执行BIOS代码。
-
中断向量表
- 内存的最低1KB区域(从0x00000到0x003FF)存放中断向量表。
- 每个中断向量占用4个字节(2字节段地址和2字节偏移地址)。
-
操作系统和应用程序
- 剩余的内存区域用于存放操作系统代码、应用程序代码和数据。
1.2 保护模式
概述
保护模式(Protected Mode)是80x86处理器引入的一种高级工作模式,与实模式相比,它提供了更强大的内存管理和保护功能。保护模式最早在80286处理器上引入,并在80386及以后的处理器上得到了进一步扩展和增强。
保护模式的特点
-
扩展的内存地址空间
- 保护模式支持24位或32位地址总线,能够访问4GB的物理内存空间(在80386及以后)。
- 采用段选择符和段描述符来进行内存管理,允许更复杂的内存布局和管理。
-
内存保护
- 通过段描述符和页表,保护模式可以实现内存保护,防止程序非法访问其他程序或操作系统的内存。
- 支持不同特权级别的代码和数据段(0到3级),用于实现用户模式和内核模式的隔离。
-
分页机制
- 支持分页机制,通过页表将虚拟地址映射到物理地址,进一步增强内存管理能力。
- 页的大小通常为4KB,也支持大页(如4MB)。
-
硬件支持的多任务
- 提供硬件支持的多任务切换,包括任务状态段(Task State Segment, TSS)和任务寄存器(Task Register)。
- 支持任务门(Task Gate)用于任务间的切换和保护。
-
增强的中断和异常处理
- 保护模式下使用中断描述符表(Interrupt Descriptor Table, IDT)管理中断和异常处理。
- IDT支持门描述符(Gate Descriptor),包括中断门、陷阱门和任务门。
-
虚拟内存
- 支持虚拟内存,通过分页机制实现虚拟地址空间,使程序可以使用比实际物理内存更大的地址空间。
保护模式的内存管理
-
段选择符和段描述符
- 每个段选择符指向一个段描述符,段描述符包含段基址、段限长和段属性(如权限和类型)。
- 段选择符和段描述符由全局描述符表(Global Descriptor Table, GDT)和局部描述符表(Local Descriptor Table, LDT)管理。
-
分页机制
- 分页机制将虚拟地址分为页目录(Page Directory)、页表(Page Table)和页框(Page Frame)。
- 通过页目录和页表,将虚拟地址映射到物理地址,实现内存保护和管理。
保护模式的应用
保护模式广泛应用于现代操作系统,如Windows、Linux、Unix等,它们利用保护模式的特性实现了多任务、多用户和内存保护等高级功能。通过保护模式,操作系统可以有效地管理硬件资源,提供稳定、安全的运行环境。
保护模式是现代操作系统和应用程序的基础,充分利用了80x86处理器的高级特性,提高了系统的稳定性和安全性。
1.3 虚拟 8086 模式
虚拟 8086 模式概述
虚拟 8086 模式(Virtual 8086 Mode)是80x86处理器在保护模式下提供的一种特殊模式,允许处理器运行像在实模式下执行的8086程序。该模式主要用于向后兼容,使旧版的DOS程序可以在现代操作系统(如Windows和Linux)上运行,而不需要离开保护模式。
虚拟 8086 模式的特点
-
实模式兼容性
- 虚拟 8086 模式允许处理器模拟实模式下的运行环境,支持8086指令集和地址空间。
- 处理器可以在保护模式下执行8086程序,同时仍然保留保护模式的特性和优势。
-
分页和保护机制
- 虚拟 8086 模式下,处理器依然可以使用保护模式的分页机制,实现虚拟内存和内存保护。
- 通过页表,可以将虚拟 8086 模式下的地址空间映射到物理内存,提供内存隔离和保护。
-
中断和异常处理
- 虚拟 8086 模式支持中断和异常处理,可以通过保护模式的中断描述符表(IDT)来管理。
- 中断和异常可以由虚拟 8086 监视器(通常是操作系统内核)处理,确保系统的稳定性和安全性。
-
硬件虚拟化支持
- 一些现代处理器提供了硬件支持的虚拟化技术,可以更高效地实现虚拟 8086 模式。
- 例如,Intel的VT-x和AMD的AMD-V技术,可以提供硬件加速的虚拟化支持,提升性能。
虚拟 8086 模式的内存管理
-
段:偏移寻址
- 虚拟 8086 模式下,内存寻址方式与实模式相同,采用段:偏移(segment)方式。
- 段地址和偏移地址共同组成20位的物理地址,最多可以访问1MB的内存空间。
-
分页机制
- 虚拟 8086 模式支持分页机制,可以将20位的实模式地址映射到保护模式下的虚拟地址空间。
- 通过页表,可以实现内存保护和隔离,防止虚拟 8086 模式下的程序非法访问其他内存区域。
虚拟 8086 模式的应用
-
运行旧版DOS程序
- 虚拟 8086 模式主要用于运行旧版的DOS程序和应用,提供向后兼容性。
- 在现代操作系统中,通过虚拟 8086 模式,可以运行一些必须在实模式下执行的老程序。
-
虚拟机和仿真器
- 一些虚拟机和仿真器利用虚拟 8086 模式来实现对老操作系统和软件的支持。
- 例如,DOSBox等仿真器通过虚拟 8086 模式模拟DOS环境,使用户可以运行经典的DOS游戏和应用。
虚拟 8086 模式的限制
-
内存地址空间
- 虚拟 8086 模式下,程序只能访问1MB的内存地址空间,受到实模式的限制。
-
性能开销
- 虚拟 8086 模式的实现需要保护模式的支持,可能带来一定的性能开销。
- 中断和异常处理需要虚拟 8086 监视器(操作系统内核)的介入,增加了处理复杂性。
-
硬件限制
- 并非所有硬件都完全支持虚拟 8086 模式,某些硬件特性可能在虚拟 8086 模式下不可用。
总结
虚拟 8086 模式是80x86处理器在保护模式下提供的一种特殊模式,主要用于向后兼容旧版的DOS程序。通过虚拟 8086 模式,处理器能够在保护模式下模拟实模式运行环境,同时保留保护模式的特性和优势。这种模式在运行旧版软件、虚拟机和仿真器中有着广泛应用。
二、Windows 的内存管理
2.1 DOS 操作系统的内存安排
DOS(Disk Operating System)操作系统的内存管理主要基于8086/8088处理器的实模式内存模型。实模式下的内存地址空间为1MB,从0x00000到0xFFFFF。这1MB的地址空间被划分为几个主要区域,每个区域有特定的用途。以下是DOS操作系统内存安排的详细介绍。
实模式内存模型
实模式(Real Mode)下,内存地址是通过段地址和偏移地址组合成20位物理地址来进行访问的。段地址左移4位,加上偏移地址,形成实际的物理地址。
内存布局
实模式下1MB内存空间的布局大致如下:
-
中断向量表(IVT):0x00000 - 0x003FF
- 占据1KB(256个向量,每个向量4字节)。
- 存放中断服务程序的入口地址和相关信息。
-
BIOS数据区(BDA):0x00400 - 0x004FF
- 大约256字节。
- 存放系统和硬件设备的参数,如硬盘、串口、并口等的信息。
-
传统内存(常规内存):0x00500 - 0x9FFFF
- 640KB,主要用于DOS操作系统、DOS应用程序和常驻内存程序(TSR)。
- 可用作程序代码、数据、堆栈等。
-
显示缓冲区:0xA0000 - 0xBFFFF
- 显示适配器使用的内存区域。
- 0xA0000 - 0xAFFFF:64KB,通常用于EGA/VGA显卡的图形模式。
- 0xB0000 - 0xB7FFF:32KB,通常用于单色显示适配器(MDA)。
- 0xB8000 - 0xBFFFF:32KB,通常用于彩色文本显示(CGA、EGA、VGA文本模式)。
-
扩展BIOS数据区(EBDA):0xC0000 - 0xC7FFF
- 大约32KB,存放一些扩展BIOS数据和适配器BIOS代码。
-
BIOS扩展区:0xC8000 - 0xEFFFF
- 主要用于扩展卡(如网络适配器、SCSI控制器等)的BIOS和驱动程序。
-
系统BIOS:0xF0000 - 0xFFFFF
- 64KB,存放系统BIOS代码。
- 提供基本的系统初始化、中断服务程序、硬件控制等功能。
2.2 80386 的内存寻址机制
Intel 80386处理器引入了更先进的内存寻址机制,与其前辈相比,提供了更强大的内存管理和保护功能。80386支持两种主要的内存寻址模式:实模式 和保护模式。在保护模式下,还引入了分页机制,从而进一步增强了内存管理能力。以下是详细介绍:
1. 实模式
在实模式下,80386处理器与8086/8088的内存寻址方式相同,使用20位地址总线,能够访问1MB的内存空间。地址通过段地址和偏移地址计算得到:
-
段地址:左移4位。
-
偏移地址:加到段地址的左移结果上,得到20位物理地址。
物理地址 = (段地址 << 4) + 偏移地址
2. 保护模式
保护模式是80386处理器的主要工作模式,提供了增强的内存保护和管理功能。保护模式下的内存寻址涉及两层机制:分段机制 和分页机制。
2.1 分段机制
保护模式下,80386处理器使用段选择符(Segment Selector)和段描述符(Segment Descriptor)来管理段。段描述符存储在全局描述符表(GDT)或局部描述符表(LDT)中。
-
段选择符:16位,包含三个字段:
- 索引:13位,指定段描述符在GDT或LDT中的位置。
- TI(Table Indicator):1位,指示使用GDT(0)还是LDT(1)。
- RPL(Requested Privilege Level):2位,指定请求的特权级。
-
段描述符:8字节,包含以下字段:
- 基地址(Base Address):32位,段的起始地址。
- 段界限(Limit):20位,段的大小。
- 访问权限和属性:12位,描述段的类型、特权级等。
分段机制下的线性地址计算如下:
线性地址 = 段基址 + 偏移地址
2.2 分页机制
分页机制是80386处理器在保护模式下提供的另一种内存管理方式,通过将线性地址转换为物理地址,实现内存的虚拟化和保护。分页机制涉及页目录、页表和页帧。
- 页目录:包含页目录项(PDE),每个PDE指向一个页表。
- 页表:包含页表项(PTE),每个PTE指向一个页帧。
- 页帧:实际的物理内存块,通常为4KB。
分页机制的地址转换如下:
-
线性地址被分成三个部分:目录、表和页内偏移。
-
目录部分索引页目录,找到相应的PDE。
-
表部分索引页表,找到相应的PTE。
-
页内偏移加到页帧基地址,得到物理地址。
物理地址 = 页帧基址 + 页内偏移
分页机制示意图:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. 80386的内存管理单元(MMU)
80386的MMU(Memory Management Unit)负责分段和分页的地址转换,并实现内存保护。
-
CR0寄存器:控制寄存器,用于启用/禁用保护模式和分页。
- PE位(Protection Enable):启用保护模式。
- PG位(Paging Enable):启用分页。
-
CR3寄存器:存储页目录的基地址。
-
CR2寄存器:存储最后一次页故障的线性地址。
4. 保护机制
保护模式下,80386处理器提供多种保护机制,确保内存和系统的安全:
- 特权级别(Privilege Levels):从0到3,共四级,0级最高。控制代码和数据的访问权限。
- 段保护:通过段描述符中的属性字段,实现段界限检查和访问控制。
- 页保护:通过PTE中的属性字段,实现页的读写执行权限控制。
2.3 Windows 的内存安排
1. 虚拟内存
Windows操作系统使用虚拟内存管理,将物理内存(RAM)和硬盘上的虚拟内存文件(页面文件)结合起来,为每个进程提供独立的虚拟地址空间。每个进程通常有4GB的虚拟地址空间(32位系统),其中2GB给用户模式程序使用,2GB给内核模式使用。64位系统的虚拟地址空间更大。
2. 虚拟地址空间布局
虚拟地址空间被分成用户模式和内核模式区域:
用户模式地址空间
- 0x00000000 - 0x7FFFFFFF: 用户模式地址空间,供应用程序使用。
- 堆(Heap): 动态内存分配区,应用程序在运行时分配和释放内存。
- 栈(Stack): 每个线程有自己的栈,用于函数调用和局部变量。
- 共享内存: 不同进程之间共享的数据段。
内核模式地址空间
- 0x80000000 - 0xFFFFFFFF: 内核模式地址空间,供操作系统内核和驱动程序使用。
- 内核代码和数据: 操作系统内核的代码和全局数据。
- 系统缓存: 用于文件系统缓存,提高文件访问性能。
- 设备驱动程序: 驱动程序代码和数据。
3. 内存分页
Windows使用分页机制管理内存,将虚拟地址转换为物理地址。分页的基本单位是页面,通常为4KB。
页表结构
- 页目录(Page Directory): 包含页目录项(PDE),指向页表。
- 页表(Page Table): 包含页表项(PTE),指向实际的物理内存页。
4. 内存管理单元(MMU)
处理器的内存管理单元(MMU)负责将虚拟地址转换为物理地址,执行页面替换和内存保护。Windows操作系统通过MMU实现以下功能:
- 地址转换: 将虚拟地址映射到物理地址。
- 内存保护: 控制页面的访问权限(读、写、执行)。
- 页面替换: 将不常用的页面交换到硬盘的页面文件中,以释放物理内存。
5. 内存保护
Windows操作系统通过以下机制保护内存:
- 特权级别: 确保用户模式程序不能直接访问内核模式内存。
- 页面权限: 控制每个页面的访问类型(读、写、执行)。
- 访问控制: 操作系统内核设置访问权限,防止未授权的内存访问。
6. 内存分配
Windows使用多种策略和数据结构进行内存分配:
- 分页分配器: 管理虚拟内存的分页分配和释放。
- 堆管理器: 为应用程序提供高效的内存分配和回收。
- 内核内存分配器: 管理内核模式内存,包括池分配器和非分页池。
7. 内存管理API
Windows提供了一组内存管理API,供应用程序和系统使用:
- VirtualAlloc/VirtualFree: 分配和释放虚拟内存。
- HeapAlloc/HeapFree: 在堆上分配和释放内存。
- GlobalAlloc/GlobalFree: 分配和释放全局内存块。
- LocalAlloc/LocalFree: 分配和释放本地内存块。
8. 页面文件
Windows使用页面文件(Pagefile.sys)作为虚拟内存的一部分,当物理内存不足时,将不常用的页面交换到页面文件中。页面文件的位置和大小可以由用户配置。
三、Windows 的特权保护
3.1 80386 的中断和异常
1. 中断和异常的分类
中断和异常可以分为以下几类:
- 硬件中断(Hardware Interrupts):由外部设备发出,如键盘、鼠标、硬盘等。
- 软件中断(Software Interrupts) :由软件通过
INT
指令触发。 - 异常(Exceptions):由处理器检测到的错误或特殊条件引发,如除零错误、缺页错误等。
2. 中断向量表(Interrupt Vector Table, IVT)
80386处理器使用中断向量表来管理中断和异常。IVT是一个包含256个条目的表,每个条目占用4字节,存储中断或异常处理程序的地址。IVT的基地址存储在IDTR(中断描述符表寄存器)中。
3. 中断描述符表(Interrupt Descriptor Table, IDT)
在保护模式下,80386处理器使用中断描述符表(IDT)来存储中断和异常的处理程序。IDT包含中断门、陷阱门和任务门描述符,每个描述符占8字节。
- 中断门(Interrupt Gate):用于硬件和软件中断,自动清除IF(中断标志)。
- 陷阱门(Trap Gate):用于异常处理,不清除IF。
- 任务门(Task Gate):用于切换任务。
IDT的基地址和界限存储在IDTR中。
4. 中断处理流程
当中断或异常发生时,80386处理器执行以下步骤:
- 保存上下文:保存当前的CS(代码段寄存器)、EIP(指令指针寄存器)和EFLAGS(标志寄存器)到堆栈。
- 查找IDT:根据中断或异常号,从IDT中找到相应的描述符。
- 检查权限:检查当前特权级(CPL)和目标特权级(DPL),确保合法的权限转换。
- 跳转到处理程序:加载新的CS和EIP,跳转到中断或异常处理程序。
- 处理中断或异常:执行处理程序代码。
- 恢复上下文 :通过
IRET
指令恢复CS、EIP和EFLAGS,返回中断或异常发生前的状态。
5. 异常类型
80386处理器支持多种异常,每种异常有不同的错误码和处理方式:
- 故障(Faults):可恢复的异常,发生后处理程序返回时,重新执行引发异常的指令。
- 陷阱(Traps):调试或跟踪用的异常,发生后处理程序返回时,继续执行下一条指令。
- 终止(Aborts):严重错误,通常无法恢复。
常见的异常包括:
- 除零错误(Divide Error):除数为零时引发。
- 单步中断(Single Step):用于调试,执行单步时引发。
- 断点(Breakpoint):调试断点时引发。
- 溢出(Overflow) :使用
INTO
指令检测到溢出时引发。 - 边界检查(BOUND Range Exceeded):数组访问越界时引发。
- 无效操作码(Invalid Opcode):执行非法指令时引发。
- 设备不可用(Device Not Available):协处理器不可用时引发。
- 双重错误(Double Fault):处理异常时再次发生异常引发。
- 协处理器段超限(Coprocessor Segment Overrun):协处理器操作引发。
- 无效TSS(Invalid TSS):任务状态段非法时引发。
- 段不存在(Segment Not Present):访问不存在的段时引发。
- 堆栈段错误(Stack Fault):堆栈操作错误时引发。
- 常规保护错误(General Protection Fault):违反保护规则时引发。
- 页面错误(Page Fault):分页操作异常时引发。
6. 中断和异常处理程序
中断和异常处理程序是特殊的例程,用于处理特定的中断或异常。它们通常由操作系统提供,负责恢复系统状态、记录错误信息、执行必要的恢复操作或中断响应。
7. 中断优先级和屏蔽
80386处理器支持中断优先级和屏蔽机制,通过PIC(可编程中断控制器)管理硬件中断的优先级和屏蔽。高级中断可以中断低级中断的处理,确保关键事件能够及时响应。
3.2 80386 的保护机制
1. 分段保护
80386处理器使用分段机制来管理内存。每个段有一个描述符,包含段的基地址、界限和访问权限。分段保护确保进程只能访问自己被授权的内存区域。
段描述符
段描述符存储在全局描述符表(GDT)和局部描述符表(LDT)中。每个描述符包含以下信息:
- 基地址(Base Address):段的起始地址。
- 界限(Limit):段的大小,表示段的结束地址。
- 类型(Type)和特权级(DPL):段的类型(代码段、数据段、系统段)和访问权限。
- 段存在位(P):段是否在内存中。
分段保护的实现
当访问内存时,处理器根据段选择子(Segment Selector)查找段描述符,进行以下检查:
- 基地址和界限检查:确保访问地址在段的范围内。
- 权限检查:确保访问权限符合描述符中的类型和特权级。
2. 分页保护
分页机制进一步细化了内存管理,每个页面都有自己的访问权限。分页保护机制通过页目录和页表实现。
页目录和页表
- 页目录(Page Directory):包含页目录项(PDE),指向页表。
- 页表(Page Table):包含页表项(PTE),指向实际的物理内存页。
每个页表项包含以下信息:
- 页面基地址:物理内存页的起始地址。
- 存在位(P):页面是否在内存中。
- 读/写位(R/W):页面是否可写。
- 用户/超级用户位(U/S):页面的访问权限。
分页保护的实现
当访问内存时,处理器进行以下检查:
- 页面存在检查:检查页面是否在内存中,如果不在,则触发页面错误(Page Fault)。
- 读/写检查:检查页面是否可写,如果尝试写不可写的页面,则触发保护错误(Protection Fault)。
- 用户/超级用户检查:检查访问权限,确保用户模式代码不能访问内核模式页面。
3. 特权级别
80386处理器支持4个特权级别(Privilege Levels),从0到3,级别越低特权越高。
- 特权级0(Ring 0):最高特权级,通常用于操作系统内核。
- 特权级1(Ring 1)和特权级2(Ring 2):中间特权级,较少使用。
- 特权级3(Ring 3):最低特权级,通常用于用户模式应用程序。
特权级别的实现
特权级别通过以下机制实现:
- 代码段特权级别(CPL):当前正在执行的代码的特权级别。
- 数据段特权级别(DPL):数据段的特权级别,决定哪些CPL可以访问该段。
- 请求特权级别(RPL):段选择子的特权级别,表示请求访问的权限。
当执行访问操作时,处理器检查CPL、DPL和RPL,确保符合特权级别规则。如果不符合,则触发一般保护错误(General Protection Fault)。
4. 系统段和门描述符
80386处理器支持系统段和门描述符,用于实现任务切换和中断处理。
系统段
- 任务状态段(TSS):包含任务的上下文信息,用于任务切换。
- 局部描述符表(LDT):包含任务专用的段描述符。
门描述符
- 中断门(Interrupt Gate):用于中断处理,跳转到中断处理程序。
- 陷阱门(Trap Gate):用于异常处理,不屏蔽中断。
- 任务门(Task Gate):用于任务切换,通过TSS切换任务。
5. 任务切换
80386处理器支持硬件任务切换,通过任务状态段(TSS)实现。任务切换可以由中断、异常或任务门触发。
任务状态段(TSS)
TSS包含任务的寄存器状态、段寄存器、堆栈指针和任务链接。任务切换时,处理器保存当前任务的状态到TSS,并加载新任务的状态。
任务切换的过程
- 保存当前任务状态:保存当前任务的寄存器和段寄存器到TSS。
- 加载新任务状态:从新任务的TSS加载寄存器和段寄存器。
- 更新任务寄存器(TR):指向新任务的TSS。
6. 中断和异常处理
中断和异常处理是80386处理器保护机制的重要部分。中断和异常通过中断描述符表(IDT)管理,处理时进行权限检查和上下文切换。
中断和异常的处理过程
- 保存上下文:保存当前CS、EIP和EFLAGS到堆栈。
- 查找IDT:根据中断或异常号,从IDT找到相应的描述符。
- 权限检查:检查CPL和DPL,确保合法权限转换。
- 跳转到处理程序:加载新的CS和EIP,执行处理程序。
- 恢复上下文 :通过
IRET
恢复CS、EIP和EFLAGS,返回中断或异常发生前的状态。
3.3 Windows 的保护机制
1. 用户模式和内核模式
Windows操作系统将处理器的执行模式分为用户模式(User Mode)和内核模式(Kernel Mode):
- 用户模式:运行应用程序,具有受限访问权限,不能直接访问硬件或内核数据结构。
- 内核模式:运行操作系统核心组件和设备驱动程序,具有完全访问权限,可以执行特权指令。
用户模式和内核模式的切换
用户模式和内核模式之间的切换通常通过系统调用(System Call)实现。应用程序通过调用系统API请求内核服务,由操作系统将请求切换到内核模式处理。
2. 内存保护
虚拟内存
Windows使用虚拟内存机制,为每个进程提供独立的地址空间。这一机制使得进程无法直接访问彼此的内存,从而提高了系统的安全性和稳定性。
- 页面表:每个进程有一个独立的页表,将虚拟地址映射到物理地址。
- 页面交换:当物理内存不足时,操作系统将不常用的页面交换到硬盘上的页面文件。
内存段
Windows使用内存段来划分不同类型的数据和代码,每个段有不同的访问权限和保护机制。例如,代码段是只读的,而数据段是可读写的。
3. 访问控制
Windows操作系统使用访问控制列表(Access Control List, ACL)来管理用户和进程对资源的访问权限。
安全标识符(SID)
每个用户、组和计算机都有一个唯一的安全标识符(SID),用于标识其身份。
访问控制列表(ACL)
每个对象(如文件、目录、注册表项等)都有一个访问控制列表,包含一组访问控制项(ACE),定义了不同用户和组对该对象的访问权限。
4. 特权管理
Windows通过特权管理控制进程和用户可以执行的操作。某些特权仅授予特定用户组(如管理员),例如安装驱动程序、访问系统日志等。
安全策略
Windows提供了一系列安全策略,可以配置用户帐户控制(UAC)、密码策略、审计策略等,增强系统的安全性。
5. 中断和异常处理
Windows操作系统使用中断和异常处理机制来管理硬件中断、软件中断和处理器异常。
中断处理
中断处理程序(Interrupt Service Routine, ISR)负责处理硬件中断,确保外部设备能够及时响应。
异常处理
异常处理程序处理处理器异常,如除零错误、缺页错误等,确保系统能够在异常发生时采取适当的恢复措施。
6. 多任务处理
Windows通过多任务处理机制,允许多个进程和线程同时运行。操作系统使用调度程序管理进程和线程的执行,确保系统资源被公平分配。
线程调度
Windows使用优先级调度算法,根据线程的优先级和状态(如就绪、等待、运行等)分配CPU时间片。
进程隔离
每个进程有独立的虚拟地址空间和资源,防止一个进程影响另一个进程的运行,提高系统稳定性。
7. 安全特性
Windows提供了一系列安全特性,如数据执行保护(DEP)、地址空间布局随机化(ASLR)等,增强系统的防护能力。
数据执行保护(DEP)
DEP防止代码在数据段执行,通过硬件和软件的结合,标记某些内存区域为不可执行。
地址空间布局随机化(ASLR)
ASLR随机化进程的内存地址空间,增加攻击者利用漏洞的难度。