现在的位置: 首页 > 综合 > 正文

Windows 的体系结构

2013年10月02日 ⁄ 综合 ⁄ 共 2224字 ⁄ 字号 评论关闭

分析环境reactos0.3.1 ,i386体系]

了解了windows的体系结构才知道reactos到底要干什么,以及如何干,因为reactos的目标是兼容windows。

下面是windows的体系结构:

 

这是整个windows的体系结构的总览。从图上可以看出系统被分成内核模式和用户模式。

内核模式的构成文件是系统的核心文件她包含:

  1. hal.dll
  2. ntoskrnl.exe
  3. 设备驱动
  4. 文件系统驱动
  5. 图形设备驱动
  6. win32k.sys

1.首先来看第一层HAL(硬件抽象层)

  HAL使得reactOS  内核可以运行在不同的x86母板上。HAL为内核抽象母板的特定代码也许是对不同母板定义一种抽象的接口,向上提供一种标准的接口调用,这样不同的母板就不需要改变内核,思想上有点像驱动程序的设计,不过用在另外一个地方(具体的实现目前还不知道,以后边看代码边了解)。

2.ntoskrnl(内核)

内核又分成两层,第一层有的称为核心层(core)提供非常原始且基本的服务,如多处理器的同步、线程调度、中断分派等等。第二层是执行体(EXECUTIVE)内核执行体提供了系统的服务,这里的服务不是指windows服务管理器看到的那种服务,而是一些系统函数。而这些函数被划分成不同的类别:

具备虚拟存储的内存管理:采用分段和分页以及虚拟内存的方式管理内存的使用。

  1. 对象管理:采用面向对象的思想,用C来实现,在windows中一切资源都被抽象为对象。如文件对象,进程线程对象等。
  2. 进程线程管理:负责创建和终止进程、线程。
  3. 配置管理:负责管理注册表
  4. 安全引用监视:在本地计算机上执行安全策略,保护计算机的资源
  5. I/O管理:实现I/O的设备无关性,并负责把I/O请求分配给相应的设备驱动程序以进一步处理
  6. 即插即用管理器(PNP):确定设备应该由哪个驱动程序来支持并负责加载相应驱动。在启动时的枚举过程中,它收集每个设备所需要的硬件资源,并根据设备的需要来分配合适的硬件资源如I/O端口,IRQ,DMA通道之类,当系统中的设备发生变化时它负责向系统和应用程序发送通知消息。
  7. 电源管理:协调电源时间,通过合理的配置,使得CPU降低电源消耗
  8. 缓冲管理器:将最近使用过的数据留在CACHE中来提高系统的整体性能
  9. 本地过程调用(LPC)管理

 ReactOS因为兼容windows,因此在设计上也提供相同的功能,只是实现方法有所不同而已。

 3.设备驱动程序
   
 设备驱动程序是核心态可加载模块(以.SYS为扩展名,存放在system32/drivers),它们是I/O管理器和相关硬件设备的接口。设备驱动程序采用一种I/O管理所规定的接口标准来编写,因此可以被内核执行体的I/O管理单元调用来驱动硬件的工作。

4.文件系统驱动程序

文件系统驱动程序也是核心态可加载模块(以.SYS为扩展名system32/drivers),文件系统其实是强加给存储硬件的一种文件存放规则。某类文件系统其实就是按照他的文件存取规则在存储器上组织文件的信息。比如FAT32 按照FAT32的存储规则来存放文件ext2又按照ext2的文件规则存放文件。

文件系统按照I/O管理的接口标准来实现一组存储规则,同时文件系统也可以将信息按照自己的存储方式请求I/O管理单元,让I/O管理单元通过这个设备的设备驱动程序将信息存放到该设备上。

这样的方式使得文件系统只负责存储规则的定义。而驱动程序去处理硬件的调度(比如如何移动磁头臂,采用什么调度算法等)而I/O管理仅仅是他们之间的协调员,至于如何协调,I/O管理向外定义了自己的标准。

5.图形设备驱动

这个设备有点独特,从图上来看,(这个图是windows 2000的体系结构图)好像只有内核模式设备驱动也就是win32k.sys才能启动。图形设备驱动其实和其他的设备驱动程序我想也不会有太大的差别(以后看代码在了解)。

不过有一点可以了解,那就是图形设备驱动是由win32k来驱动的,估计提供的也是硬件驱动。

6.win32k

这个东西应该是windows所说的win32子系统的内核部分(原生子系统,其他的子系统是可以分割的),如果没有这个子系统windows就不能运行?(好像微软是这么说的,原因好像是win32 的文档化的 API都是通过这个子系统实现的,据说最初的子系统都通过CSRSS来实现,这个东西最初好像包含至少3个子系统,1.win32,2.OS/2,3.POSIX,随着win32的羽翼逐渐丰满,在发行时就不再包含其他两个。但是还是依然叫CSRSS,慢慢看代码才知道,这些都是道听途说)。

win32k也被划分成两个部分,第一个是USER32,第二个是GDI32,

ReactOS的win32K估计基本上都是通过wine移植过来的。

USER32:

包含了windows管理的操作吧,比如如何创建窗口,显示窗口,隐藏窗口,移动窗口排列窗口z轴,对拥有窗口的Z轴排序,Region(可视区域)操作,鼠标集中测试等。

GDI32:

包含图形设备的绘制操作(这些操作也可以叫服务),比如画点,画线,位图操作等,GDI会将一些复杂的绘图操作转变成简单的绘制请求发送给图形驱动程序(如果这个图形驱动程序不支持复杂绘制)还有就是一些设备无关的位图操作,有的可以保存在内存或文件,而如果将设备无关的位图输出的话就会被转换成设备相关的位图然后再输出。

[如需转载请注明出处:(雄)blog.csdn.net/mickey139]

 

抱歉!评论已关闭.