本文将从上往下,按Windows操作系统总体架构图(如下),进行记录。

系统架构流程 系统架构梳理_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. 硬件抽象层:

隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。