本文将从上往下,按Windows操作系统总体架构图(如下),进行记录。
1. 子系统:
① 为了方便在Windows上,移植其它操作系统的程序而设计,主要功能是向上层应用提供API函数;
② Windows应用程序开发者,在编译、链接代码时,需要先指明自己的应用程序属于哪个子系统;
③ 最纯正的Windows子系统为Win32子系统,其余子系统都是通过以Win32为媒介实现,Win32提供的API主要分为三类:
※ USER函数:管理窗口、菜单、对话框和控件。接口存储于USER32.dll文件;
※ GDI函数:在物理设备上执行绘图操作。接口存储于GDI32.dll文件;
※ KERNEL函数:管理非GUI资源,如进程、线程、文件和同步服务等。接口存储于KERNEL32.dll文件。
④ 目前Windows中,上述三种API函数的实现,已经被移入了内核模式,以提高API得运行效率。
2. Native API ( ntdll.dll ):
① 实现用户模式到内核模式的穿越,进而调用系统服务,以此为基础运行相应的Win32 API;
② 在Windows进行版本迭代时,Native API是主要的修改对象,以保证面向上层应用的Win32 API改动尽可能少;
③ Native API函数的命名,一般为相应的Win32 API命名前,加上"Nt"。接口存储于ntdll.dll文件。
3. 系统服务:
当某一个Native API进入内核模式时,会将自身的参数以及系统服务号一同传入。系统服务组件,负责以该服务号为索引,在"系统服务描述表 ( System Service Descriptor Table )"中,查找API对应的服务函数地址。
4. 内存管理器:
① 负责管理虚拟内存,实现对虚拟内存的申请、回收等操作;
② Windows规定,每个进程拥有4GB的虚拟内存。该内存分为两部分:"0 ~ 0x7FFFFFFF"为用户模式地址、"0x80000000 ~ 0xFFFFFFFF"为内核模式地址;
③ 对于不同进程,用户模式虚拟地址映射而成的物理地址也不相同,以保证进程之间不会互相干预;
④ 所有进程内核模式下,虚拟内存的映射方式完全一致,以保证内核数据对于每个进程都是同步的。
5. 进程和线程管理:
负责创建和终止进程,线程的调度是由内核负责的。进程和线程管理程序,依赖其它执行程序组件,如对象管理程序、内存管理器等。
6. 配置管理器:
① 负责记录所有计算机软件、硬件的配置信息,将数据保存在注册表 ( Registry ) 中;
② 驱动程序根据注册表中的信息进行加载,或提取相应的参数。
7. I/O管理器:
① I/O Request Packages ( 简称IRP ),负责发起I/O请求,并且管理请求;
② I/O请求是用户模式应用程序一系列操作的抽象,如对端口的读写、对键盘的访问、对磁盘文件的操作等;
③ IRP中包含操作的一系列数据,如是读还是写,操作多少字节,在什么环境下操作等;
④ IRP被传递到具体的驱动程序中,由驱动完成操作后,原路返回。
8. 对象管理器:
① Windows操作系统提供的所有服务几乎都是以对象的形式存在的;
② 对象管理器负责创建、管理、回收系统中对象的组件。
9. 设备驱动程序:
针对某种应用场合,提供给Windows内核的“补丁”。其运行在内核模式下,为上层应用操作特定的硬件设备提供支持,如访问物理映射内存、设备。
10. 内核:
① 内核是系统的心脏,运行于最高特权之上,被设计成可以并行运行在多处理器上;
② 内核在调度线程时,除了更高的中断请求级别 ( IRQL ),不允许其它线程打断;
③ 内核为执行体组件提供最基本的支持:
- 提供对内核对象的支持;
- 负责对线程的调度;
- 提供对多处理器同步的支持;
- 提供中断处理函数的支持;
- 提供对错误陷阱的支持;
- 提供对其它硬件特殊功能的支持。
11. 硬件抽象层:
隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。