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

《深入解析Windows操作系统第4版》随笔记录02

2018年02月07日 ⁄ 综合 ⁄ 共 3244字 ⁄ 字号 评论关闭

条目1、当用户模式程序调用一个系统服务时,处理器捕获到该调用,然后将调用线程切换到内核模式。当该系统服务完成时,操作系统将线程环境切换回用户模式,并允许调用者继续执行。(P36)

条目2、Windows的内核模式组件也体现了基本的面向对象设计原则。它们利用正式的接口来传递参数,访问或修改相应的数据,而非直接访问组件的操作数据结构。(P37)

条目3、Windows总体结构中的关键系统组件图。(P38)

条目4、子系统DLL的角色是,将一个已文档化的函数转化为一些适当的内部Windows系统服务调用。(P39)

条目5、Windows的核心系统文件列表(P39)

   Ntoskrnl.exe  -- 执行体和内核。

   NtKrnlpa.exe -- 执行体和内核,支持物理地址扩展(PAE),使得系统可寻址多大64GB物理内存。

   Hal.dll            -- 硬件抽象层。

   Win32k.sys    -- Windows子系统的内核模式部分。

   Ntdll.dll          -- 内部支持函数,以及执行体函数的系统服务分发存根(stub)。

   Kernel32.dll,Advapi32.dll,User32.dll,Gdi32.dll  -- Windows的核心子系统DLL。

条目6、Windows是一个对称处理器(SMP symmetric multiprocessing)操作系统。对称多处理操作系统中,操作系统和用户线程可以被调度到任何一个处理器上运行。非对称多处理(ASMP asymmetric multiprocessing)操作系统中,操作系统选择其中一个处理器来执行操作系统内核代码,而其他的处理器只运行用户代码。(P41)

条目7、超线程是Intel引入的一项技术,它可以在一个物理处理器上提供多个逻辑处理器。每个逻辑处理器有它自己的CPU状态,但是执行引擎和芯片上的高速缓存则是共享的。(P42)

条目8、在非一致的内存结构NUMA系统中,处理器被组织成更小的单元,称为节点(nodes)。每个节点有它自己的处理器和内存,并且通过一个缓存一致(cache-coherent)的互联总线连接到更大的系统上。(P42)

条目9、能支持的处理器的实际数目取决于所用的Windows的版本。该数据被存放在注册表值HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager下的LicensedProcessors中。(P42)

条目10、查看与多处理器相关的系统文件

 (1) 打开设备管理器(右击[我的电脑]->[属性]->[硬件]->[设备管理器])。

 (2) 查看[计算机]下节点的属性。

 (3) 点击[驱动程序]->[驱动程序详细信息]。

 本机XP2操作系统下与多处理器相关的系统文件如下:

这些关键的系统文件之所以有单处理器版本,是因为性能的原因 --- 相比单处理器系统而言,多处理器的同步本质是非常复杂和耗时的。Windows的其他系统文件都只有一个版本,不区分单处理系统和多处理器系统。(P44)

条目11、[事件查看器]中系统事件ID为6009的日志项是系统启动时写入的,其记录了加载进来的内核映像的类型:单处理器或多处理器,free (即:发布版本) 或 checked (即:调试版本) 版本。(P45)

条目12、查看系统是否引导了内核映像的PAE版本(Ntkrnlpa.exe,支持大于4GB的物理内存)。

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management中的PhysicalAddressExtension值为1,代表引导了PAE内核。(P46)

条目13、通过检查Ntoskrnl.exe(在windows/system32下)文件属性确定是否安装了多处理器版本。

条目14、Windows系统的核心文件在客户版本和服务器版本中本质上是相同的。(P49)

条目15、环境子系统的角色是,将Windows基本系统服务的部分子集暴露给应用程序。每个子系统都提供了对于Windows原生服务不同部分的访问能力。(P53)

条目16、每一个可执行的EXE被绑定到一个(且是唯一的)子系统上。当一个EXE文件被运行时,创建进程的代码会检查映像头部的子系统类型代码,以通知正确的子系统。(P53)

条目17、默认情况下,Windows被配置成按需启动POSIX子系统,所以当你第一次运行一个POSIX应用程序的时候,POSIX子系统进程(即:Psxss.exe)必须被启动起来。(P61)

条目18、Windows系统核心结构和组件

条目19、Ntdll.dll是一个特殊的系统支持库,主要用于子系统DLL。它包含两种类型的函数:(P63)

   (1)系统服务分发存根(stubs),它们会调用Windows执行体系统服务分发器。

   (2)内部支持函数,供子系统、子系统DLL以及其他的原生影像文件使用。

 条目20、Windows执行体是Ntoskrnl.exe中的上层(内核是其下层)。执行体包含以下类型的函数:(P63-P64)

   (1)可在用户模式下调用的导出函数。这些函数称为系统服务,并且通过Ntdll被导出。

   (2)可通过DeviceIoControl函数来调用的设备驱动器函数。

   (3)只能在内核模式下调用的导出函数,并且这些函数在Windows DDK中已经文档化。

   (4)在内核模式下调用,但未在Windows DDK中文档化的导出函数。

   (5)定义为全局符号但是未被导出的函数,包括在Ntoskrnl内调用的内部支持函数。

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

条目21、内核是由Ntoskrnl.exe中的一组函数以及对于硬件体系结构的底层支持(比如中断和异常分发)构成的。(P65)

条目22、硬件抽象层(HAL)是一个可加载的、内核模式的模块,它提供了针对Windows当前运行所在的硬件平台的底层接口。Windows内部组件以及用户编写的设备驱动程序并不直接访问硬件,它们可以通过调用HAL例程来保存可移植性。(P67)

条目23、查看Windows当前HAL的原始版本。(P68)

条目24、利用Depends.exe查看NTOSKRNL和HAL的映像相依性。(P69)

 

条目25、通过msinfo32.exe查看已安装的设备驱动程序。

条目26、在默认情况下,系统线程是属于System进程的,但是,一个设备驱动程序可以在任何的进程中创建系统线程。在诊断或者检查一个系统的时候,若能够将单独的系统线程的执行过程映射到驱动程序中,甚至映射到包含该代码的子例程中,则一定非常有用。(P77)

条目27、Windows登陆进程(/Windows/System32/Winlogon.exe)处理交互式用户的登陆和注销。登陆过程的身份识别和认证时在一个名为GINA(Graphical Identification and Authentication 图形识别和认证)的可替换的DLL中实现的。标准的Windows GINA,即Msgina.dll,实现了默认的Windows登陆界面。

条目28、服务控制管理器是一个特殊的系统进程,它运行的映像文件时/Windows/System32/Services.exe,它负责启动、停止服务进程,也负责与这些服务进程进行交互。(P82)

条目29、服务进程和所运行的服务之间并不总是一一对应的,因为有的服务和其他服务共享一个进程。在注册表中(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services),一个服务的类型代码指明了该服务时运行它自己的进程,还是与同一映像中的其他服务共享一个进程。(P82)

抱歉!评论已关闭.