您好、欢迎来到现金彩票网!
当前位置:21点 > 子例程 >

深入解析Windows操作系统笔记——CH2系统结构

发布时间:2019-07-18 08:38 来源:未知 编辑:admin

  在大多数用户操作系统中,应用程序与操作系统本身是隔离的:操作系统代码在内核模式下执行,可以访问系统数据和硬件,应用程序代码运行在用户模式下,只有有限的接口可以使用,对系统数据访问受限,无法直接访问硬件。

  和unix一样,windows系统大部分代码和驱动程序都是共享相同的受保护的内核模式空间。意味着操作系统任何组件,都可以破坏其他组件的数据。

  当然用户程序和操作系统所有组件是隔离的。应用程序无法直接访问系统中特权部分的数据和代码。

  windows内核模式组件也体现了基本的面向对象设计原则。如他们不会直接进入另一个组件的数据结构来访问该组件维护的数据。相反是利用正式的接口来传递参数,访问和修改相应的数据接口。

  但是严格上来说windows并不是一个面向对象系统。windows内部使用c语言,并不是面向对象系统,c语言对象实现,只是借用了面向对象语言的特性。

  本节介绍windows的设计目标和包装方式,如下图windows总体结构中的关键系统组件。

  下,用户程序不能直接访问原始的windows服务,要通过一个或者多个子系统动态链接库。

  执行体,包含基本的操作系统服务,如内存管理,进程和线程管理,安全性,I/O,网络,跨进程通信。2.windows

  内核,是由一组底层的操作系统功能构成,如线程调度,终端和异常处理分发。以及处理器同步。提供了一组例程和基础对象。执行体的其他部分利用这些例程和对象实现更高层次的功能。3.

  设备驱动程序,硬件设备驱动程序,也包含文件系统和网络驱动程序。其中硬件设备驱动程序将用户的I/O函数调用转化为特定的硬件设备请求。4.

  硬件抽象层,指一层特殊代码,它把内核,设备驱动程序和windows执行体其他部分跟与平台相关的硬件差异隔离开来。5.

  c语言编写的,少部分是使用c++编写的,只有那些需要直接与系统硬件通信的部分或者对性能极端敏感的操作系统部分,才是用汇编语言编写的。a2.3.2

  的设计目标。windows是一个对称多处理(SMP)操作系统。没有主处理器,操作系统和用户线程可以被调度到任何一个处理器上运行,而且所有的处理器共享唯一的内存空间。

  对称处理和非对称处理不同,操作系统选一个处理器运行系统内核代码。而其他处理器运行用户代码。

  2003支持2中新的多处理器系统:超线程(hyperthreading),NUMA(非一致性的内存结构)。超线程是

  一个技术,可以一个物理处理器上有多个逻辑处理器,是的一个逻辑cpu可以在其他逻辑cpu正在忙着的时候继续运行。

  系统中,处理器被组织成更小的单元,成为node,每个结点都有自己的处理器和内存,并同一个一个缓存一致(cache-cohernet)的互联总线连接到更大的系统上。NUMA系统上的windows仍然作为一个smp系统运行。所有的处理器可以访问所有内存。不过本地结点比其他节点速度要快,系统想要提高性能做法是,根据现场用到的内存所在的节点,讲现场调度到同一个处理器上。

  的最初设计上32位最多只支持32个cpu,64位支持64个cpu。并没有本质的因素来限制处理器个数。注册表LocensedProcessors可以限制处理器个数。

  有以下功能这些功能对windows作为一个多处理器起到关键性的作用:1.

  (如自旋锁,排队自旋锁以及压栈锁)以及设备驱动程序和服务器进程内部的细粒度同步,是的多个组件可以并行在多个处理器上运行。4.

  I/O完成端口之类的编程机制,是的可以实现高效的多线程进程,并且这样的程序再多处理系统上有很好的伸缩性。a2.3.4

  使用的主要控制机制(如中断,对象管理器)。第五章启动和关闭windows的过程。第四章介绍各个管理机制(注册表,服务进程,WMI)。剩余的章节更加详细的讨论各个关键区域内存结构和操作(进程,线程,内存管理,安全性,I/O,存储管理,高速缓存管理器,windos文件系统和网络)。

  值表示了启动要加载的子系统,如上图,值为Debug和Windows。Window值包含了windows子系统的文件规范,csrss.exe它代表了客户/服务器运行时的子系统。Debug为空。Optional值为Os2,Posix表示这2个子系统,被按需启动。Kmode表示windows子系统的内核环境下运行的部分为win32k.sys。

  基础系统服务暴露给应用程序。每个子系统都提供了对于windows原生服务不同部分的访问能力。也就是说建立在某个子系统上的应用程序可以做到的,是另一个建立在不同子系统的应用程序无法做到的。如posix的fork。

  可以执行映像被绑定到一个子系统上,如VC++ link命令/SUBSYSTEM可以指定类型代码,可以使用Exetype工具查看此类型代码。

  unix的可移植的操作系统接口。值的是正对unix风格的操作系统接口的一组国际标准。posix鼓励厂商实现unix风格,编译在系统之间迁移。需要使用

  子系统,要求使用platform sdk中使用posix的头文件和库文件。posix是按需启动的当第一次启动posix,psxss.exe要运行起来。posix的映像文件不是直接运行的。一个特殊的称为posix.exe的支持映像文件被启动起来,然后再创建一个子程序来运行posix应用程序。a2.4.1.3 OS/2

  执行体系服务提供接口,在用户模式下可以通过接口函数调用windows执行体的系统服务,如(NtCreatefile,NtSetEvent)

  包含了一个同名入口,函数内部的代码包含了与处理器体系接口相关的模式切换指令,通过该指令可转换到内核模式下,从而调用系统服务分发器。分发器检查某些参数后,再调用真正的内核模式系统服务,其中包含ntoskrnl.exe内部实现代码。

  (以ldr开头的函数)、对管理器、Windows子系统进程通信函数(Csr开头的函数)、以及一般运行库(Rtl开头的函数)、也包含了异步调用(APC)分发器和异常分发器。a2.4.3

  Ntoskrnl.exe中的上层,内核是其下层。执行体包含以下几类函数:1.

  Iop或者Mi开头的函数(分别是内部IO管理器支持函数和内部内存管理器支持函数)。6.

  :实现了设备无关的I/O,负责将这些操作分发到恰当的设备驱动程序做进一步处理。5.即插即用(pnp)

  管理器:为了支持一个特定的设备,确定驱动,并加载这些驱动。6.电源管理器

  负责协调事件,并且向设备驱动程序产生电源管理I/O通知。如电源管理器设备为系统空间,通过将cpu置于睡眠来降低电源电耗。7.WDM Windows管理规范例程

  :允许设备驱动发布有关性能和配置信息以及接受来自用户模式的WMI服务命令。8.高速缓存管理器

  I/O操作的性能,其做法是让最近引用过磁盘数据留在主内存中以便快速访问。(并且延迟了写操作,在将更新数据发送到磁盘前先在内存中停留一小段时间。)9.内存管理器

  Windows执行体对象和抽象数据类型,这些对象和数据类型代表了操作系统资源。2.LPC设施

  中的这组函数提供了一些最基本的机制。内核代码使用C编写,并不容易在C中访问的任务,则保留使用汇编。大部分函数都已经文档化,以Ke开头。a2.4.5内核对象

  。把各种策略决定留给了执行体。内核外看来,执行体将线程和其他可共享资源都表示为对象。这些对象要求一些策略开销。这些开销在内核中不存在,内核实现了一组更简单的对象,称为内核对象,帮助内核控制好中心处理过程,并且支持执行体对象的创建工作。执行体层的绝大多数对象包装了一个或者多个内核对象,把他们的内核属性合并起来。一组内核对象建立了有关控制各种操作系统功能叫做控制对象

  分发器对象。分发器对象包含了内核线程,互斥体,事件,内核事件对,信号量,定时器,等待定时器。

  执行体通过内核函数创建内核对象实例,维护对象实例。构建更加复杂的对象提供给用户。a2.4.6

  在内核设计是竟可能的使用公共代码最大化。内核支持的可移植性接口,在不同的体系结构上是等同的。而且实现这组接口的大部分代码,在不同的结构体系上也是相同的。但是有些代码和体系结构有关,如上下文切换。从高层看线程选择和上下文切换可以使用相同的算法

  ,但在不同的处理器上,实现还是有差异的。执行上下文是由处理器的寄存器来描述的,所以要保存和加载哪些数据还是有差别的。a2.4.7硬件抽象层(HAL)

  当前运行平台的低层接口。它隐藏了与硬件相关的细节,如I/O接口,中断控制器,以及多处理器通信机制等,体系结构或者机器相关的功能。windows内部组件以及用户编写的设备驱动并不直接访问硬件,当它们需要获得与平台相关的信息时,它们可以通过调用HAL

  但是安装时只能有一个被选中,并且copy到系统磁盘,其文件名为hal.dll。a2.4.8设备驱动程序

  结尾),他们在I/O管理器和相应的硬件之间建立链接。驱动在内核模式下,位于以下3个环境之一:1.在发起I/O

  在内核模式系统线.作为一个中断的结果(因此不存在任何特定的进程或者线程执行环境中

  ,因此驱动程序可以在windows支持的cpu体系结构上代码级移植,在同一个体系结构族内是二进制可移植的。

  设备驱动有以下几类:1.硬件设备驱动程序,通过HAL操作硬件,从而输出到设备或者网络,或者从设备或者网络中输入。硬件设备驱动也有很多类型如,总线驱动,人机界面驱动等。

  文件系统过滤器驱动程序:如截取了I/O请求并且执行某些增值处理之后再传递给下一层驱动(执行磁盘镜像,加密的驱动程序)

  4.网络重定向器和服务器指文件系统I/O请求传递给网络上的某一台机器。或者从网络上接收此类请求的文件系统驱动程序。5.协议驱动程序,如

  之类的网络协议6.内核流式过滤器驱动程序:这样的驱动被串接起来,以便对流数据进行信号处理。

  空闲进程是第一个进程,并没有在用户模式下的实际映像文件。a2.4.9.2

  a2.4.9.3 system进程和系统进程system进程是一种特殊线程的母体。这些特殊线程只能运行在内核模式哦。系统线程有普通线程所有属性和环境,但是只运行系统空间中加载的代码。系统线程没有地址空间,因此动态存储空间,都必须从系统中内存堆分配,比如换页或者非换页池。系统线程是由

  功能。在排查问题是,知道系统线程映射到某个驱动程序中,甚至映射到包含改代码的子例程中,一定非常有用。所以如果system进程中的线程正在运行,首先要确定哪些线程在运行。通过线程看哪个驱动开始的或者检查调用栈,得知在运行到哪里了。a2.4.9.4

  会话管理器(smss.exe)是系统中第一个创建的用户模式进程,由负责完成执行体和内核初始化工作的内核模式系统线程最后创建实际的smss.exe

  启动过程中,会话管理器负责许多比较重要的步骤,如打开页面文件,执行延迟文件改名,删除操作,创建环境变量。将子系统程序(csrss.exe)和winlogon.exe启动起来。

  进程依次启动其他系统进程。smss.exe的主线程执行以上步骤后,一直在csrss.exe和winlogon的进程上等待。如果这2

  NtSetSystemInformation,请求建立内核模式数据结构。又调用内部的内存管理函数

  该函数建立起会话虚拟地址空间,改地址空间包含会话中的换页池以及由win32子系统的内核模式部分和其他的会话空间设备驱动程序所分配,属于某个会话的数据结构,然后会为该会话创建winlogon和csrss实例。a2.4.9.5 Winlogon,lsass和Userinitwinlogon

  登陆过程的身份识别和认证是在一个名为GINA(图形识别和认证)的可替换DLL中,

  的标准为GINA为Msgina.dll实现了默认的windows登陆界面。然而开发人员可以提供他们自己的GINA DLL来实现其他的身份识别和认证机制如:基于声波的方法。一旦用户名和口令捕捉到了就可以送到本地安全认证服务器进程(lsass.exe)进行认证。lsass调用适当的认证包,以执行实际的验证操作,比如口令是否符合存储在活动目录或者sam中的口令信息。

  在成功完成验证后,lsass调用安全引用监视器中的一个函数(如:NtCreateToken)创建一个访问令牌对象。对象包含当前用户的安全范围。

  利用此访问令牌来创建该用户会话中的初始进程默认为userinit.exe。userinit执行该用户环境的一些初始化工作,然后再查找注册表winlogon下的shell并且创建一个进程来运行系统定义的外壳程序(

  是活动的。关于登陆过程各个步骤的完整秒死可以看第5章。有关安全认证可以查看第八章。a2.4.9.6服务控制器管理windows中的服务可以自一个服务器进程,也可以是一个驱动程序。这一指的是用户模式进程(如:

  服务控制器是一个特殊的系统进程,用于启动,停止服务进程也复制服务进程之间的交互。服务有3个民粹:运行中进程名,注册表内名称以及管理器的显示名。在服务进程和所运行的服务之间并不是一一对应的,因为有些服务和其他共享一个进程。注册表服务类型代码指明了共享还是独占进程。许多

  和多个网络组件。a2.5总结本章主要概括的介绍了一遍windows体系结构,检查了一遍关键的组件,他们之间是如何联系起来的。

http://korinkorin.com/zilicheng/202.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有