Windows系统架构

本文转自cuit的博客:http://blog.csdn.net/cuit/article/details/9183201

操作系统模型

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

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

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


系统架构

下图是简化版的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位才有) 支持PAE
Hal.dll 硬件抽象层
Win32k.sys 子系统的内核模式部分
Ntdll.dll 内部函数
Kernal32.dll,Advapi32.dll,User32.dll,Gdi32.dll 核心子系统的组件

Windows 2000 的系统架构

02-19

要想写nt, 2000的驱动,首先要对2000的架构有所了解,否则都是舍本逐末, 沙上建塔(成语用的不大对 :P ).rn rn 2000的总体架构可以粗略分为2个部分,User Mode和Kernel Mode,如下图:rn rn ---------------------rn | subsystem |rn ---------------------rn |rn ---------------------rn | ntdll.dll |rn ---------------------rn UserMode rn ===============================================================rn KernelModern --------------------rn | 执行体(executive)|rn -------------------- ------------rn |内核 | 驱动程序 | | 图形引擎 |rn -------------------- ------------rn | HAL 硬件抽象层 |rn --------------------rn rn rn subsystem 是子系统, windows2k 实现win32/posix/os2 3个子系统. 我们用到的最多的是win32子系统,其它的两个几乎用不到. posix是微软为了符合美国国家标准实现的. os2是历史遗留产物. win32子系统是最重要的必须的子系统, 其它的两个子系统都需要依靠它.rn rn executive包括基本的操作系统服务,有: 存储管理, process & thread管理, 安全, I/O Manager和进程间通讯(LPC)rn rn kernel(内核)包括了调度(dispatch) 中断(interrupt), 异常(exception)和多处理器同步.rn rn device driver(设备驱动)就是我们可以插入自己驱动(或者可以说内核模块)的地方了.rn rn HAL Hardware Abstract Layer(硬件抽象层)是将内核,驱动程序和其它win2k执行程序与特定硬件差别隔离的层. 微软为不同的硬件体系做了不同的实现,安装的时候由安装程序检测硬件类型, 并装入适当的hal实现.rn rn 图形引擎是nt4开始移到内核态的部分, 不在我们讨论范围之列.

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试