Windows系统架构

来源:互联网 发布:悟 无人机 知乎 编辑:程序博客网 时间:2024/05/20 18:51

操作系统模型

大多数操作系统中,都会把应用程序和内核代码分离运行在不同的模式下。内核模式访问系统数据和硬件,应用程序运行在没有特权的模式下(用户模式),只能使用有限的API,且不能直接访问硬件。当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式,当系统服务调用完成时,操作系统切换回用户模式。

Windows与大多数UNIX系统类似,驱动程序代码共享内核模式的内存空间,意味着任何系统组件或驱动程序都可能访问其他系统组件的数据。但是,Windows实现了一套内核保护机制,比如PatchGuard和内核模式代码签名。

内核模式的组件虽然共享系统资源,但也不会互相访问,而是通过传参数的方式来访问或修改数据结构。大多数系统代码用C写的是为了保证可移植性,C语言不是面向对象的语言结构,比如动态类型绑定,多态函数,类型继承等。但是,基于C的实现借鉴了面向对象的概念,但并不依赖面向对象。


对称多处理(Symmetric Multiprocessing,SMP)

多任务指的是操作系统用一个处理器执行多个线程。当计算机有多个处理器(可能是CPU或核)时,可以同时执行多个任务。

Windows是对称多处理(SMP)操作系统,也就是说,在多CPU或核的机器上,每个CPU或者核是对等的,所有处理器共享一块内存空间,这个模型与非对称处理(ASMP)相反,ASMP模型是有一个处理器用来执行内核代码,其他处理器运行用户模式的代码。如下图:


Windows也支持3种类型的多处理系统,分别是多核,超线程,NUMA(non-uniform memory architecture,非一致性内存架构)。

超线程技术由Intel发明,它给每个物理内核提供两个逻辑处理器,每个逻辑处理器都有自己的CPU状态,但量执行引擎和缓存是共享的。

NUMA中的处理器分组成小的单元,叫做结点。每个结点有自己的处理器和内存。NUMA上的Windows仍然以SMP的形式运行,所有处理器都可以访问所有内存。

系统架构

下图是简化版的Windows系统架构实现:



首先注意那条横线将用户模式和内核模式分开两部分了。横线之上是用户模式的进程,下面是内核模式的系统服务。

这4种用户模式下的进程分别是:

  • Fixed系统支持进程,比如登陆进程和Session管理器,它们都不是Windows服务(不是通过SCM即服务控制管理器启动的)。
  • 服务进程,比如任务调度器和打印机服务,这些服务一般都需要用户登陆才可以运行。很多服务应用程序,比如sql server和exchange server都以服务的方式运行。
  • 用户程序,可以是Windows32位或64位,Windows3.1 16位,MS-DOS 16位,或者POSIX 32位或64位,注意16位程序只能运行在32位系统上。
  • 环境子系统服务器进程,实现了部分支持操作系统的环境,也可以说是展现给用户或者开发者的个性化界面。Windows NT最初发布时带有Windows,POSIX,OS/2三个子系统,Windows 2000是最后带有POSIX和OS/2的子系统,旗舰版和企业版的Windows也支持一个加强版的POSIX子系统,叫做SUA(基于UNIX的应用)。
注意:服务进程和用户程序之下的“子系统DLL”。在Windows下,用户程序不直接调用本地Windows服务,而是通过子系统DLL来调用。子系统DLL的角色是将文档化的函数翻译成该用的非文档化的系统服务(未公开的)。

内核模式的几个组件包括:

  • Windows执行实体,包括基础系统服务,比如内存管理器,进程和线程管理器,安全管理,I/O管理,网络,进程间通信。
  • Windows内核,包括底层系统函数,比如线程调度,中断,异常分发,多核同步。也提供了一些routine和实现高层结构的基础对象。
  • 设备驱动,包括硬件设备驱动(翻译用户I/O到硬件I/O),软件驱动(例如文件和网络驱动)。
  • 硬件抽象层,独立于内核的一层代码,将设备驱动与平台的差异性分离开。
  • 窗口和图形系统,实现了GUI函数,处理用户接口和绘图。

下表中是Windoows系统核心组件的文件名:
文件名组件Ntoskrnl.exe执行体和内核Ntkrnlpa.exe(32位才有)支持PAEHal.dll硬件抽象层Win32k.sys 子系统的内核模式部分Ntdll.dll 内部函数Kernal32.dll,Advapi32.dll,User32.dll,Gdi32.dll核心子系统的组件