《深入解析Windows操作系统》第2章读书笔记

本文详细解释了Windows系统中的关键组件,如子系统DLL如何将用户应用程序与内核交互,内核模式组件(执行体、内核、设备驱动和HAL)的功能,以及SMP、超线程、NUMA等技术。同时介绍了环境子系统、控制台宿主进程和硬件抽象层的作用。
摘要由CSDN通过智能技术生成

1、在Windows下,用户应用程序并不是直接调用原生的Windows操作系统服务,而是通过一个或者多个子系统动态链接库来发起调用。子系统DLL的作用是:将一个已经文档化的函数转化为一些恰当的内部(通常是未文档化的)原生系统服务调用。这一转化过程可能会--也可能不会--向正在为用户应用程序提供服务的环境子系统进程发送消息。

2、Windows的内核模式组件包含:

        1)Windows执行体:包含了基本的操作系统服务、比如内存管理、进程和线程管理、安全性、IO、网络和跨进程通信;

        2)Windows内核:由一组低层次的操作系统功能构成的,如线程调度、中断和异常分发,以及多处理器同步,它也提供了一组例程和基本对象,执行体的其余部分利用这些例程和对象实现更高层次的功能;

        3)设备驱动程序:既包括硬件设备驱动程序,也包括像文件系统和网络驱动程序之类的非硬件设备驱动程序。其中硬件设备驱动程序将用户的IO函数调用转换成特定的硬件设备IO请求;

        4)硬件抽象层HAL:是指一层特殊的代码,它把内核、设备驱动程序和Windows执行体的其余部分跟平台相关的硬件差异隔离开。

        5)窗口和图形系统:实现了图形界面GUI功能(包括Windows USER和GDI两部分功能)。

Windows系统核心组件的文件名称如下图:

3、对称多处理器SMP:没有主处理器,操作系统和用户线程可以被调度到任何处理器上运行,而且所有的处理器共享唯一的内存空间。非对称处理器ASMP:系统选择一个处理器来执行操作系统的内核代码,而其他处的处理器只运行用户代码。Windows是一个对称多处理器操作系统。

4、超线程:是Intel引入的一种技术,它可以在每个物理核上提供多个逻辑处理器。每个逻辑处理器有自己的CPU装填,但是执行引擎和片上缓存是共享的。这使得一个逻辑CPU可以在其他逻辑CPU停转的时候继续执行。

5、NUMA系统:在NUMA系统中,处理器被组织成更小的单元,称为节点。每个节点有它自己的处理器和内存,并通过一个缓存一致的互连总线连接到更大的系统上。NUMA系统上的Windows仍然作为一个SMP系统来运行,其中所有的处理器都可以访问所有的内存。只不过,节点本地的内存访问起来比其他节点的内存更快一些而已。系统提高性能的做法是:根据线程用到的内存所在的节点,将线程调度到同一节点中的处理器上。系统尽可能地在节点内部满足内存申请的要求,只有在必要的时候才从其他节点分配内存。

6、环境子系统和子系统DLL:环境子系统的角色是,将基本的Windows执行体系统服务的某个子集暴露给应用程序,每个子系统都提供了对应于Windows原生服务的一个不同子集的访问能力。每个可执行映像都被绑定到一个(且唯一的)子系统上。映像文件运行时,负责创建进程的代码会检查该映像头部的子系统类型代码,所以它可以通知正确的子系统有新的进程被创建。用户应用程序并不直接调用Windows的系统服务,而是通过一个或者多个子系统DLL来进行,这些库导出的接口都有很好的文档说明,凡是链接到该子系统的程序都可以调用这些接口。(Windows内核提供系统调用,子系统本质上是一系列函数库,这些函数封装了系统调用,向上给应用程序提供相应子系统的二进制界面(API接口)

7、Windows子系统:在该系统中主要实现了处理窗口和现实IO的基本功能以减少系统的体积和提升系统的性能。对于任何一个Windows系统,Windows子系统总是一个必须的组件,其进程被标记为关键进程(意味着一旦它由于某种原因退出,系统就会崩溃)。Windows子系统主要由以下组件构成:

        1)对于每个会话,环境子系统进程Crss.exe有一个实例加载3个dll(Basesrv.dll、Winsrv.dll和Csrsrv.dll),它们包含如下功能:创建或删除进程和线程、对16位DOS虚拟机VDM进程的部分支持(仅32位Windows)、Sxs/Fusion和清单文件(manifest)支持、其他一些函数如GetTmpFile、DefineDosDevice、ExitWindowsEx以及几个自然语言支持函数;

        2)内核模式设备驱动程序(Win32.sys),它包括如下支持:窗口管理程序(控制窗口显示、管理屏幕输出、采集来外设的输入、将用户消息传递给应用程序)、图形设备接口GDI(专门针对图形输出设备的函数库,包括线段、文本和图形的绘制函数以及图形控制函数)、Directx功能的包装函数(Windows对DirectX的支持是在另一个内核驱动程序(Dxgkml.sys)中实现的);

        3)控制台宿主进程(Conhost.exe),提供了对控制台(字符环境)应用程序的支持;

        4)子系统DLL(如Kernel32.dll、Advapi32.dll、User32.dll和Gdi32.dll):将已经文档化的WIndows API函数转译成Ntoskrnl.exe和Win32.sys中恰当的且绝大多数未文档化的内核模式系统服务调用。

        5)图形设别驱动程序:与硬件相关的图形显示器驱动程序、打印机驱动程序和视频微端口驱动程序;

        子系统大部分(尤其是显示IO的功能部分)运行在内核模式下。

8、控制台窗口宿主进程:在最初的WIndows子系统设计中,子系统进程Crss.exe负责管理控制台窗口,每个控制台应用程序与Crss进行通信。现在WIndows为每个控制台窗口使用了一个单独的进程:控制台窗口宿主进程(Conhost.exe)。

 9、Unix应用子系统SUA:使得可以在一台运行WIndows系统的上编译和运行Unix应用程序;

10、执行体:WIndows执行体是Ntoskrnl.exe中的上层(内核是其的下层),执行体包含以下类型的函数:

        1)系统服务:可在用户模式下导出的函数,通过Ntdll被导出,这些服务绝大多数可以通过WIndows API来访问,或者通过另一个子系统的API来访问;

        2)可通过DeviceIoControl函数来调用的设备驱动程序函数:这为从用户模式到内核模式提供了一个通用的接口;

        3)只能在内核模式下调用的导出函数,这些函数在WDK中已经被文档化;

        4)在内核模式下调用但未在WDK中文档化的导出函数;

        5)定义为全局符号但是未被导出的函数:包括在Ntoskrnl内部调用的支持函数,如以Iop或者Mi开头的那些函数(分别是IO管理器内部支持函数和内存管理内部支持函数);

        6)未定义全局符号而是在一个模块内部的函数;

执行体主要包含了以下主要组件:配置管理器(负责实现和管理系统的注册表)、进程管理器(创建和终止进程和线程。针对进程和线程的底层支持是Windows内核中实现的,而执行体在这些低层对象的基础上又加上了额外语义和功能)、安全引用监视器、IO管理器即插即用管理器、电源管理器、Windows驱动程序模型的WMI例程、缓存管理器、内存管理器、逻辑预取器、对象管理器、高级LPC设施、公共运行库函数、执行体支持例程以及其他多种基础设施例程。

11、内核:内核是由Ntoskrnl.exe中一组函数以及对硬件体系架构的低层支持(如中断和异常)构成的。Ntoskrnl.exe中的这组函数提供了一些最为基本的机制,如线程调度和同步服务,供执行体组件使用;内核中的许多函数也在WDK中有相应的文档描述(通过搜索以Ke打头的函数可以找到),因为在实现设备驱动程序的时候也需要用到他们。

12、内核对象:内核实现了操作系统的基本机制,并且避免各种策略决定,从而将自己与执行体的其余部分分离开。内核几乎将所有的策略决定都留给了执行体,唯一的例外是线程调度和分发,这是由内核自己来实现的。从内核外部来看,执行体将线程和其他可共享的资源都表示为对象,这些对象需要一些策略开销,比如用以维护他们的对象句柄以及保护他们的各种安全检查,还有相应的资源配额,这些开销在内核中是不存在的。内核实现了一组更为简单的对象称为内核对象,它们帮助内核控制好中心处理过程并支持执行体对象的创建工作。绝大多数执行体层的对象都封装了一个或者多个内核对象,把它们的内核属性合并在一起内核对象分为控制对象和分发器对象,控制对象建立了有关管控制各种操作系统功能的语义,包括APC对象、DPC(延迟过程调用)对象以及IO管理器使用的一些对象(如中断对象等);分发器对象融合了同步的能力,可以改变或者影响线程的调度。分发器对象包括内核线程、互斥体、事件、内核事件对、信号量、定时器以及可等待的定时器。执行体利用内核函数来创建和维护内核对象实例,并且构建更加复杂的、提供给用户模式的对象

13、内核处理器控制区和控制块(KPCR和KPRCB):内核使用一个称为处理器控制区KPCR的数据结构来存放与处理器有关的数据,KPCR包含了基本的信息,如处理器的中断分发表IDT、任务状态段TSS和全局描述附表GDT。它还包括了中断控制器的状态,这是内核与其他模块共享的数据。为了方便访问KPCR,在32位Windows上,指向KPCR的指针存放在fs寄存器上,在x64 Windows系统上,指向KPCR的指针存放在gs寄存器中。KPCR还包含了一个称为内核处理器控制块KPRCB的内嵌数据结构。KRCR已经被文档化,因此第三方的驱动程序和其他的Windows内核组件可以使用。但是KPRCB是一个私有的数据结构,仅仅Ntoskrnl.exe中的内核代码使用该结构。KPRCB包含了调度信息(该处理器上正在运行的线程、下一个执行的线程以及空闲线程)、该处理器的分发器数据库、DPC队列、CPU厂商和标识符信息、CPU和NUMA拓扑、缓存大小、时间计数信息、关于该处理器的所有统计信息(如IO统计、缓存管理器统计)以及内存管理器的统计等。

14、硬件抽象层HAL:HAL是一个可见在的内核模式模块,提供了针对Windows当前运行所在的硬件平台的低层接口并隐藏与硬件相关的细节。

参考链接:1、https://www.cnblogs.com/luzhlon/p/7055376.html

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值