Windows 32 汇编笔记(一):基础知识

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
公网NAT网关,每月750个小时 15CU
访问控制,不限时长
简介: Windows 32 汇编笔记(一):基础知识

一、80x86 处理器的工作模式

1.1 实模式

实模式概述

实模式(Real Mode)是80x86处理器最早支持的工作模式,也是最基础的工作模式。实模式主要用于早期的MS-DOS操作系统和其他简单的操作环境。在实模式下,处理器能够直接访问1MB的物理内存空间。这个模式与8086处理器的工作方式完全兼容,因此得名“实模式”。

实模式的特点

  1. 地址空间限制
  • 在实模式下,处理器只能访问1MB的内存空间(从0x00000到0xFFFFF)。
  • 内存空间的限制源于20位地址总线。
  1. 段地址和偏移地址
  • 实模式使用段:偏移(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
  1. 无内存保护
  • 实模式没有内存保护机制,程序可以任意访问整个1MB的内存空间,包括操作系统区域和其他程序的区域。
  • 这使得程序之间可能会互相干扰,容易导致系统崩溃。
  1. 直接硬件访问
  • 实模式允许直接访问硬件设备和I/O端口。
  • 在实模式下,程序可以直接使用I/O指令(如IN和OUT)与硬件设备进行交互。
  1. 中断和处理器初始化
  • 实模式支持硬件中断和软件中断,使用中断向量表(Interrupt Vector Table, IVT)来管理。
  • 中断向量表存储在内存的最低1KB区域(从0x00000到0x003FF)。
  • 处理器加电或复位后,会自动进入实模式,并从地址0xFFFF0开始执行代码。
  1. 可执行代码的限制
  • 实模式下可执行代码段的大小受到限制,通常一个代码段最大为64KB(0x0000到0xFFFF)。

实模式的内存布局

在实模式下,内存布局通常包括以下几个部分:

  1. BIOS区
  • 高端内存(从0xF0000到0xFFFFF)通常用于存放BIOS代码和数据。
  • 加电或复位时,处理器从0xFFFF0处开始执行BIOS代码。
  1. 中断向量表
  • 内存的最低1KB区域(从0x00000到0x003FF)存放中断向量表。
  • 每个中断向量占用4个字节(2字节段地址和2字节偏移地址)。
  1. 操作系统和应用程序
  • 剩余的内存区域用于存放操作系统代码、应用程序代码和数据。

1.2 保护模式

概述

保护模式(Protected Mode)是80x86处理器引入的一种高级工作模式,与实模式相比,它提供了更强大的内存管理和保护功能。保护模式最早在80286处理器上引入,并在80386及以后的处理器上得到了进一步扩展和增强。

保护模式的特点

  1. 扩展的内存地址空间
  • 保护模式支持24位或32位地址总线,能够访问4GB的物理内存空间(在80386及以后)。
  • 采用段选择符和段描述符来进行内存管理,允许更复杂的内存布局和管理。
  1. 内存保护
  • 通过段描述符和页表,保护模式可以实现内存保护,防止程序非法访问其他程序或操作系统的内存。
  • 支持不同特权级别的代码和数据段(0到3级),用于实现用户模式和内核模式的隔离。
  1. 分页机制
  • 支持分页机制,通过页表将虚拟地址映射到物理地址,进一步增强内存管理能力。
  • 页的大小通常为4KB,也支持大页(如4MB)。
  1. 硬件支持的多任务
  • 提供硬件支持的多任务切换,包括任务状态段(Task State Segment, TSS)和任务寄存器(Task Register)。
  • 支持任务门(Task Gate)用于任务间的切换和保护。
  1. 增强的中断和异常处理
  • 保护模式下使用中断描述符表(Interrupt Descriptor Table, IDT)管理中断和异常处理。
  • IDT支持门描述符(Gate Descriptor),包括中断门、陷阱门和任务门。
  1. 虚拟内存
  • 支持虚拟内存,通过分页机制实现虚拟地址空间,使程序可以使用比实际物理内存更大的地址空间。

保护模式的内存管理

  1. 段选择符和段描述符
  • 每个段选择符指向一个段描述符,段描述符包含段基址、段限长和段属性(如权限和类型)。
  • 段选择符和段描述符由全局描述符表(Global Descriptor Table, GDT)和局部描述符表(Local Descriptor Table, LDT)管理。
  1. 分页机制
  • 分页机制将虚拟地址分为页目录(Page Directory)、页表(Page Table)和页框(Page Frame)。
  • 通过页目录和页表,将虚拟地址映射到物理地址,实现内存保护和管理。

保护模式的应用

保护模式广泛应用于现代操作系统,如Windows、Linux、Unix等,它们利用保护模式的特性实现了多任务、多用户和内存保护等高级功能。通过保护模式,操作系统可以有效地管理硬件资源,提供稳定、安全的运行环境。

保护模式是现代操作系统和应用程序的基础,充分利用了80x86处理器的高级特性,提高了系统的稳定性和安全性。

1.3 虚拟 8086 模式

虚拟 8086 模式概述

虚拟 8086 模式(Virtual 8086 Mode)是80x86处理器在保护模式下提供的一种特殊模式,允许处理器运行像在实模式下执行的8086程序。该模式主要用于向后兼容,使旧版的DOS程序可以在现代操作系统(如Windows和Linux)上运行,而不需要离开保护模式。

虚拟 8086 模式的特点

  1. 实模式兼容性
  • 虚拟 8086 模式允许处理器模拟实模式下的运行环境,支持8086指令集和地址空间。
  • 处理器可以在保护模式下执行8086程序,同时仍然保留保护模式的特性和优势。
  1. 分页和保护机制
  • 虚拟 8086 模式下,处理器依然可以使用保护模式的分页机制,实现虚拟内存和内存保护。
  • 通过页表,可以将虚拟 8086 模式下的地址空间映射到物理内存,提供内存隔离和保护。
  1. 中断和异常处理
  • 虚拟 8086 模式支持中断和异常处理,可以通过保护模式的中断描述符表(IDT)来管理。
  • 中断和异常可以由虚拟 8086 监视器(通常是操作系统内核)处理,确保系统的稳定性和安全性。
  1. 硬件虚拟化支持
  • 一些现代处理器提供了硬件支持的虚拟化技术,可以更高效地实现虚拟 8086 模式。
  • 例如,Intel的VT-x和AMD的AMD-V技术,可以提供硬件加速的虚拟化支持,提升性能。

虚拟 8086 模式的内存管理

  1. 段:偏移寻址
  • 虚拟 8086 模式下,内存寻址方式与实模式相同,采用段:偏移(segment)方式。
  • 段地址和偏移地址共同组成20位的物理地址,最多可以访问1MB的内存空间。
  1. 分页机制
  • 虚拟 8086 模式支持分页机制,可以将20位的实模式地址映射到保护模式下的虚拟地址空间。
  • 通过页表,可以实现内存保护和隔离,防止虚拟 8086 模式下的程序非法访问其他内存区域。

虚拟 8086 模式的应用

  1. 运行旧版DOS程序
  • 虚拟 8086 模式主要用于运行旧版的DOS程序和应用,提供向后兼容性。
  • 在现代操作系统中,通过虚拟 8086 模式,可以运行一些必须在实模式下执行的老程序。
  1. 虚拟机和仿真器
  • 一些虚拟机和仿真器利用虚拟 8086 模式来实现对老操作系统和软件的支持。
  • 例如,DOSBox等仿真器通过虚拟 8086 模式模拟DOS环境,使用户可以运行经典的DOS游戏和应用。

虚拟 8086 模式的限制

  1. 内存地址空间
  • 虚拟 8086 模式下,程序只能访问1MB的内存地址空间,受到实模式的限制。
  1. 性能开销
  • 虚拟 8086 模式的实现需要保护模式的支持,可能带来一定的性能开销。
  • 中断和异常处理需要虚拟 8086 监视器(操作系统内核)的介入,增加了处理复杂性。
  1. 硬件限制
  • 并非所有硬件都完全支持虚拟 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内存空间的布局大致如下:

  1. 中断向量表(IVT):0x00000 - 0x003FF
  • 占据1KB(256个向量,每个向量4字节)。
  • 存放中断服务程序的入口地址和相关信息。
  1. BIOS数据区(BDA):0x00400 - 0x004FF
  • 大约256字节。
  • 存放系统和硬件设备的参数,如硬盘、串口、并口等的信息。
  1. 传统内存(常规内存):0x00500 - 0x9FFFF
  • 640KB,主要用于DOS操作系统、DOS应用程序和常驻内存程序(TSR)。
  • 可用作程序代码、数据、堆栈等。
  1. 显示缓冲区:0xA0000 - 0xBFFFF
  • 显示适配器使用的内存区域。
  • 0xA0000 - 0xAFFFF:64KB,通常用于EGA/VGA显卡的图形模式。
  • 0xB0000 - 0xB7FFF:32KB,通常用于单色显示适配器(MDA)。
  • 0xB8000 - 0xBFFFF:32KB,通常用于彩色文本显示(CGA、EGA、VGA文本模式)。
  1. 扩展BIOS数据区(EBDA):0xC0000 - 0xC7FFF
  • 大约32KB,存放一些扩展BIOS数据和适配器BIOS代码。
  1. BIOS扩展区:0xC8000 - 0xEFFFF
  • 主要用于扩展卡(如网络适配器、SCSI控制器等)的BIOS和驱动程序。
  1. 系统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。

分页机制的地址转换如下:

  1. 线性地址被分成三个部分:目录、表和页内偏移。
  2. 目录部分索引页目录,找到相应的PDE。
  3. 表部分索引页表,找到相应的PTE。
  4. 页内偏移加到页帧基地址,得到物理地址。
物理地址 = 页帧基址 + 页内偏移

分页机制示意图:

+----------------+----------------+----------------+
| 页目录(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: 分配和释放全局内存块。
  • ocalAlloc/LocalFree: 分配和释放本地内存块。

8. 页面文件

Windows使用页面文件(Pagefile.sys)作为虚拟内存的一部分,当物理内存不足时,将不常用的页面交换到页面文件中。页面文件的位置和大小可以由用户配置。

三、Windows 的特权保护

3.1 80386 的中断和异常

1. 中断和异常的分类

中断和异常可以分为以下几类:

  1. 硬件中断(Hardware Interrupts):由外部设备发出,如键盘、鼠标、硬盘等。
  2. 软件中断(Software Interrupts):由软件通过 INT 指令触发。
  3. 异常(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处理器执行以下步骤:

  1. 保存上下文:保存当前的CS(代码段寄存器)、EIP(指令指针寄存器)和EFLAGS(标志寄存器)到堆栈。
  2. 查找IDT:根据中断或异常号,从IDT中找到相应的描述符。
  3. 检查权限:检查当前特权级(CPL)和目标特权级(DPL),确保合法的权限转换。
  4. 跳转到处理程序:加载新的CS和EIP,跳转到中断或异常处理程序。
  5. 处理中断或异常:执行处理程序代码。
  6. 恢复上下文:通过 IRET 指令恢复CS、EIP和EFLAGS,返回中断或异常发生前的状态。

5. 异常类型

80386处理器支持多种异常,每种异常有不同的错误码和处理方式:

  1. 故障(Faults):可恢复的异常,发生后处理程序返回时,重新执行引发异常的指令。
  2. 陷阱(Traps):调试或跟踪用的异常,发生后处理程序返回时,继续执行下一条指令。
  3. 终止(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)查找段描述符,进行以下检查:

  1. 基地址和界限检查:确保访问地址在段的范围内。
  2. 权限检查:确保访问权限符合描述符中的类型和特权级。

2. 分页保护

分页机制进一步细化了内存管理,每个页面都有自己的访问权限。分页保护机制通过页目录和页表实现。

页目录和页表

  • 页目录(Page Directory):包含页目录项(PDE),指向页表。
  • 页表(Page Table):包含页表项(PTE),指向实际的物理内存页。

每个页表项包含以下信息:

  • 页面基地址:物理内存页的起始地址。
  • 存在位(P):页面是否在内存中。
  • 读/写位(R/W):页面是否可写。
  • 用户/超级用户位(U/S):页面的访问权限。

分页保护的实现

当访问内存时,处理器进行以下检查:

  1. 页面存在检查:检查页面是否在内存中,如果不在,则触发页面错误(Page Fault)。
  2. 读/写检查:检查页面是否可写,如果尝试写不可写的页面,则触发保护错误(Protection Fault)。
  3. 用户/超级用户检查:检查访问权限,确保用户模式代码不能访问内核模式页面。

3. 特权级别

80386处理器支持4个特权级别(Privilege Levels),从0到3,级别越低特权越高。

  • 特权级0(Ring 0):最高特权级,通常用于操作系统内核。
  • 特权级1(Ring 1)特权级2(Ring 2):中间特权级,较少使用。
  • 特权级3(Ring 3):最低特权级,通常用于用户模式应用程序。

特权级别的实现

特权级别通过以下机制实现:

  1. 代码段特权级别(CPL):当前正在执行的代码的特权级别。
  2. 数据段特权级别(DPL):数据段的特权级别,决定哪些CPL可以访问该段。
  3. 请求特权级别(RPL):段选择子的特权级别,表示请求访问的权限。

当执行访问操作时,处理器检查CPL、DPL和RPL,确保符合特权级别规则。如果不符合,则触发一般保护错误(General Protection Fault)。

4. 系统段和门描述符

80386处理器支持系统段和门描述符,用于实现任务切换和中断处理。

系统段

  • 任务状态段(TSS):包含任务的上下文信息,用于任务切换。
  • 局部描述符表(LDT):包含任务专用的段描述符。

门描述符

  • 中断门(Interrupt Gate):用于中断处理,跳转到中断处理程序。
  • 陷阱门(Trap Gate):用于异常处理,不屏蔽中断。
  • 任务门(Task Gate):用于任务切换,通过TSS切换任务。

5. 任务切换

80386处理器支持硬件任务切换,通过任务状态段(TSS)实现。任务切换可以由中断、异常或任务门触发。

任务状态段(TSS)

TSS包含任务的寄存器状态、段寄存器、堆栈指针和任务链接。任务切换时,处理器保存当前任务的状态到TSS,并加载新任务的状态。

任务切换的过程

  1. 保存当前任务状态:保存当前任务的寄存器和段寄存器到TSS。
  2. 加载新任务状态:从新任务的TSS加载寄存器和段寄存器。
  3. 更新任务寄存器(TR):指向新任务的TSS。

6. 中断和异常处理

中断和异常处理是80386处理器保护机制的重要部分。中断和异常通过中断描述符表(IDT)管理,处理时进行权限检查和上下文切换。

中断和异常的处理过程

  1. 保存上下文:保存当前CS、EIP和EFLAGS到堆栈。
  2. 查找IDT:根据中断或异常号,从IDT找到相应的描述符。
  3. 权限检查:检查CPL和DPL,确保合法权限转换。
  4. 跳转到处理程序:加载新的CS和EIP,执行处理程序。
  5. 恢复上下文:通过 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随机化进程的内存地址空间,增加攻击者利用漏洞的难度。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
高可用应用架构
欢迎来到“高可用应用架构”课程,本课程是“弹性计算Clouder系列认证“中的阶段四课程。本课程重点向您阐述了云服务器ECS的高可用部署方案,包含了弹性公网IP和负载均衡的概念及操作,通过本课程的学习您将了解在平时工作中,如何利用负载均衡和多台云服务器组建高可用应用架构,并通过弹性公网IP的方式对外提供稳定的互联网接入,使得您的网站更加稳定的同时可以接受更多人访问,掌握在阿里云上构建企业级大流量网站场景的方法。 学习完本课程后,您将能够: 理解高可用架构的含义并掌握基本实现方法 理解弹性公网IP的概念、功能以及应用场景 理解负载均衡的概念、功能以及应用场景 掌握网站高并发时如何处理的基本思路 完成多台Web服务器的负载均衡,从而实现高可用、高并发流量架构
相关文章
|
1月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
62 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
7天前
|
存储 编译器 Linux
Windows 32 汇编笔记(二):使用 MASM
Windows 32 汇编笔记(二):使用 MASM
|
1月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
1月前
|
存储 索引
8086 汇编笔记(十一):内中断
8086 汇编笔记(十一):内中断
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(九):call 指令 和 ret 指令
8086 汇编笔记(九):call 指令 和 ret 指令
|
1月前
|
编译器
8086 汇编笔记(八):转移指令的原理
8086 汇编笔记(八):转移指令的原理
|
1月前
|
存储 数据处理
8086 汇编笔记(七):数据处理的两个基本问题
8086 汇编笔记(七):数据处理的两个基本问题
|
1月前
|
编译器
8086 汇编笔记(六):更灵活的定位内存地址的方法
8086 汇编笔记(六):更灵活的定位内存地址的方法
8086 汇编笔记(五):包含多个段的程序
8086 汇编笔记(五):包含多个段的程序