当前位置:   article > 正文

Windows系统架构(winddows内核学习)

windows系统架构

第二章:Windows系统架构

 

上图就是windows系统架构

  1. 环境子系统和子系统DLL:

环境子系统扮演的角色就是把Windows执行体系统服务的某些子集暴露给应用程序

这就是说,一个子系统对应着一类程序进行操作,有些应用程序可能能运行在一个子系统上,但是不能运行在另一个上面。

每个exe文件都会在链接的时候确定好子系统了。比如VC++链接的时候。Subsystem就是子系统

子系统DLL:应用程序不能直接调用系统调用,需要通过子系统dll,也就是Kernrl32.dll这些dll

  1. ntdll.dll:

Ntdll是一个特殊的系统支持库,主要被子系统DLL和原生应用程序使用(原生应用程序是指子系统为Native,没有绑定任何子系统)。Ntdll里面包含以下两种函数

  1. 可调用Windows执行体系统服务的调度存根
  2. 被子系统、子系统dll使用的内部支持函数

这个是进入内核模式(syscall)

  1. 执行体:

Windows执行体是NtOsKrnl.exe的上层,NtOskrnl下层是内核。这两层功能,存储的东西各不一样。

执行体包含以下函数:

  1. 系统服务(用户模式下调用的,通过API)
  2. 通过DeviceIoControl调用的设备驱动程序函数
  3. 只能在内核模式调用的函数(Ex..开头的)

执行体是包含了很多组件的。

主要是以下组件:

配置管理器、进程管理器、IO管理器、即插即用管理器、Windows驱动程序模型、内存管理器,对象管理器等等。

同时,执行体还支持四组函数:对象的(内核提供数据结构,放给执行体来操作),异步,运行库函数,执行体提供的例程(比如内存分配).

  1. 内核:

内核就是NtOsKrnl.exe下层用于提供基础机制的函数+数据结构组成的。

比如执行体使用的线程调度和同步服务。Ke开头的函数

内核主要包括两大部分:

  1. 内核对象

内核对象是一种明确定义,可预知操作系统底层原语和机制,可以供执行体高层组件执行自己的操作。内核和执行体实现了其他部分的分离,所有策略给执行体执行,除了线程调度这些底层的。

对象分为控制对象和分发器对象。

其实就是简而言之,内核提供,给执行体操作的。

  1. 内核处理器控制块和内核处理器控制区

KPCR:内核处理器控制区

这个是内核使用的,和处理器有关的数据结构。

比如里面保存着IDT TSS GDT 在32位 内核模式下fs:[0]指向KCPR

在x64下,gs:[0]指向KCPR;

KPCB:内核处理器控制块

这个是保存在KPCR的里面的。主要作用是DPC+线程调用作用。

  1. HAL(抽象硬件层)

HAL由一个dll组成,hal.DLL,一言以蔽之,就是这个dll可以屏蔽不同硬件架构的差异,从高层看,提供了一些接口,不依赖于硬件,可以供驱动或者内核操作,从而进行操作硬件。

这也是Windows之中最接近硬件的一个模块了。

  1. 设备驱动对象:

这也就是我们常说的驱动加载的地方,驱动是可以装载的内核模块。一般使用三种上下文来运行:

  1. 发起IO请求的用户线程上下文
  2. 在内核模式系统线程上下文(即插即用)
  3. 做为中断的结果

驱动并不直接操作硬件,而是使用HAL提供的屏蔽了硬件差异的接口。从而驱动具备了良好的移植性。

设备驱动一般包含下面这几大类:

硬件设备驱动,文件系统驱动,文件系统过滤驱动,软件驱动。

    1. Windows驱动模型:

也就是大名鼎鼎的WDM,从WDM来看,驱动可以分为三类

PDO:总线驱动,没什么用,位于设备栈的最底层

FDO:功能驱动,这个是驱动真正实现功能的地方,为相应设备提供接口。

FiDO:过滤器驱动,在FDO上下都有,PDO之上,用于拦截或者修改IO请求。

  1. 系统进程:

Windows10都会包含以下系统进程

IDLE:CPU空闲时候用这做事情(CPU有几个,IDLE就有几个线程)

System:里面包含大量的PID TID(PID TID其实也是一个句柄,只不过位于全局句柄之中;)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/168335?site
推荐阅读
相关标签
  

闽ICP备14008679号