(zz from MS WebCast)
(CSDN Blog又出问题了,上传不了图片,我将包含图片的文档打包放在我的cnblogs博客上,可以从这里下载)
0、X86 CPU有三种工作模式:
(1)实模式:又称实地址模式,段地址+偏移=物理地址;DOS工作在实模式下;
(2)保护模式:现代CPU的native模式,Windows开机启动时CPU运行在实模式,启动过程中CPU转换到保护模式,Windows提供多任务和虚拟地址支持(保护多任务环境中的各个任务的安全和同一进程空间中的高特权级代码);
(3)系统管理模式:系统固件(firmware,BIOS)执行电源管理、安全检查、或平台相关的特定任务。
1、保护模式下,程序工作的基本准则:
(1) 用户程序不可以执行特权指令;
(2) 用户程序不可以直接访问I/O端口和硬件寄存器;
(3) 高特权级的代码可以执行和访问低特权级的代码和数据,低特权级的代码不可以直接执行和访问高特权级的代码和数据。
2、WinNT体系结构和模块组织:
模块及其工作模式:
2.1 NTOS(Kernel-mode services):
NTOSKRNL.EXE,Windows内核和执行体的PE映像文件,包括内核、执行体、以DLL方式输出函数给HAL和其他内核模块、内核服务的实现、系统初始化和启动等功能;安装OS时,安装程序根据硬件配置将不同版本的文件复制到目标目录<WinRoot>/System32/)下,并统一命名为NTOSKRNL.EXE(如果是支持PAE[物理地址扩展]的执行体和内核,则命名为Ntkrnlpa.exe)。
2.2 HAL(Hardware Abstraction Layer):
Hal*.dll,为NTOS及驱动程序隔离硬件差异性;系统安装盘中准备了多个文件(driver.cab),安装程序根据硬件配置选择合适的文件版本并复制到<WinRoot>/System32/目录下,包括如下6个版本:
Hal.dll、
Halacpi.dll(Advanced Configuration and Power Interface)、
Halapic.dll(Advanced Programmable Interrupt Controller)、
Halaacpi.dll(ACPI APIC)
Halmps.dll(多CPU)
Halmacpi.dll(多CPU+ACPI)
2.3 Windows子系统:
(1) 一个内核,多个子系统(OS/2,POSIX,Windows):类似于Client(子系统)/Server(内核)模式;
(2) 用户态进程CSRSS.EXE:WinSRV.DLL(控制台窗口,HardError);CSRSRV.DLL(进程、线程维护,调试);BASESRV.DLL(安全,登陆);
(3) 内核模块Win32K.sys:GDI(窗口绘制);USER(用户输入)。NT4.0之前位于用户态,处于效率的考虑,4.0之后其被移进内核态。
用户程序与系统的交互示例:
(4) NTDLL.dll: 将用户模式的请求转译为内核模式的服务,在这一层上,处理处理器的环境切换(Context Switch和SysEnter/SysExit)。
调用内核服务所要执行的任务包括:(1) 需要从用户态切换到内核态;(2) IA32 CPU设计了专门的指令(从奔腾II开始):SYSENTER和SYSEXIT指令,而在此之前是使用INT 2E中断;
IO操作的控制流示例:
3、CR3寄存器:
(1) IA32 CPU用CR3寄存器来记录当前页目录的物理基地址的寄存器,简称PDBR(Page Directory Base Register)。
(2) 切换任务时,系统会将前一个任务的CR3作为上下文信息(Context)的一部分保存起来,在开始执行新任务前,系统会恢复寄存器状态,包括CR3、EFLAGS、EIP等。
(3) 不同进程拥有不同的地址空间(CR3内容),切换CR3寄存器意味着切换地址空间。
4、用户世界和内核世界
4.1 用户世界
会话(Session):
4.2 内核世界
55、NT内核一览: