精华内容
下载资源
问答
  • Windows操作系统结构

    千次阅读 2014-03-14 16:22:12
    谈到操作系统的内核模式和用户模式,一般会和CPU的特权层联系起来。CPU有多个特权层,例如,Intel的386CPU就有4个特权层,从第0层到第3层。其中第0层的特权最高,也就是可以执行任意代码,第3层特权最低,只能执行...

    一、层次结构

            Windows从总体上分为内核模式(Kernel Model)和用户模式(User Model)。谈到操作系统的内核模式和用户模式,一般会和CPU的特权层联系起来。CPU有多个特权层,例如,Intel的386CPU就有4个特权层,从第0层到第3层。其中第0层的特权最高,也就是可以执行任意代码,第3层特权最低,只能执行有限代码。

            Windows将内核模式运行在CPU的第0层,将用户模式运行在CPU的第3层。内核模式下运行的都是核心代码,这些代码是安全的,且不会受到恶意的攻击。而运行在用户模式下的应用程序是最不安全且容易受到攻击的,所以应用程序权限是受到限制的。如果应用程序进行一些诸如直接访问物理内存的动作,需要向,需要内核模式下组件提出请求。

            Windows操作系统每层有若干组件组成,其作为一个整体,它的运行高度依赖于上层组件对下层组件的调用。每层组件都有固定的接口供上层调用,高层如果要进行更改权限操作需要向底层提出请求。结构如图所示:



            Windows操作系统被划分为用户模式和内核模式两个部分。用户模式下,应用程序调用其对应的子系统中的API。这些子系统除了win32,还有POSIX、OS/2等,它们为了兼容16位应用程序或其他系统应用程序而设计,都是通过调用win32子系统来实现的,但很少被用到。Win32子系统将API函数转化为Native API。系统版本的变化只是Native API的改变,并没有修改Win32,即没有改变win32 API函数的名称和参数,实现了对应用程序的兼容。在Native API中的函数调用被转化为系统服务函数调用并进入内核模式,并进一步向下传递实现相应功能。

    二、从应用程序到驱动程序

            根据上面所述Windows操作性的分层特性可知,应用程序对硬件操作的请求是从上而下一层层被交给硬件的。Windows的设计者为简化对不同设备的操作,将所有的设备都当作普通文件看待,用操作文件的方法来操作设备。这一点与Linux有很大相似之处。

            常用操作有Creatfile(),CloseHandle(),Readfile(),Writefile(),DeviceIoControl()等。以Creatfile()为例描述硬件操作过程。


            应用程序调用Createfile() API后,Createfile()会在Native API中调用NtCreatefile()。NtCreatefile()会进入内核模式调用系统服务函数,该函数通过I/O管理器创建I/O请求包(I/O request package,IRP)并传递给驱动程序。IRP为Windows驱动中重要数据结构。驱动程序根据IRP判断操作类型并调用相应的派遣函数针对硬件抽象层进行操作。由于硬件抽象层由Windows操作系统实现且屏蔽了底层硬件的细节,驱动开发者无需关心硬件细节而只需清除如何与硬件抽象层交互即可。

    (本文是将相关材料整理后写出的,来源:张帆. Windows驱动开发技术详解[M]. 北京:电子工业出版社,2008)
    展开全文
  • 第二章 Windows操作系统 的体系结构下;陷阱调度;异常和中断 中断是异步事件可能随时发生与处理器正在执行的内容无关中断主要由I/O设备处理器时钟或定时器产生可以被启用或禁用 异常是同步事件它是某一特定指令执行的...
  • 深入解析Windows操作系统笔记——CH2系统结构 2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境。 2.系统结构... 1 2.1 需求和设计目标... 1 2.2 操作系统模型.....

    2.系统结构

    本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境。

    2.系统结构... 1

    2.1 需求和设计目标... 1

    2.2 操作系统模型... 2

    2.3 总体结构... 2

    2.3.1 可移植性... 3

    2.3.2 对称多处理... 3

    2.3.3 可伸缩性()5

    2.3.4 客户和服务器版本的区别... 5

    2.3.5 版本检查... 5

    2.4 关键的系统组件... 5

    2.4.1 环境子系统和子系统dll6

    2.4.1.1 Windows子系统... 7

    2.4.1.2 POSIX子系统... 7

    2.4.1.3 OS/2子系统... 8

    2.4.2 NTDLL.DLL. 8

    2.4.3 执行体... 8

    2.4.4 内核... 9

    2.4.5 内核对象... 9

    2.4.6 硬件支持... 9

    2.4.7 硬件抽象层(HAL)10

    2.4.8 设备驱动程序... 10

    2.4.9 系统进程... 10

    2.4.9.1 空闲进... 11

    2.4.9.2 中断和DPC. 11

    2.4.9.3 system进程和系统进程... 11

    2.4.9.4 会话管理器... 11

    2.4.9.5 Winlogon,lsassUserinit. 12

    2.4.9.6 服务控制器管理... 12

    2.5 总结... 13

     

    2.1 需求和设计目标

    2.2 操作系统模型

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

     

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

     

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

     

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

     

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

    2.3 总体结构

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

    4中用户模式进程:

    1.固定的系统支持进程,如登陆进程,会话管理器进程。

    2.服务进程,宿纳了windows服务,如进程管理器和假脱机服务。

    3.用户应用程序,有6个类型:windows32位,windows64位,windows3.1 16位,ms-dos 16位,posix32位或者OS/2 32位。

    4.环境子系统服务进程,实现了操作系统环境的部分支持。这里的环境是指操作系统展示给用户或者程序员的个性化部分。

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

     

    windows内核组件包含:

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

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

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

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

    5.窗口和图形系统:实现了图形用户界面函数。

    文件名

    组件

    Ntoskrnl.exe

    执行体和内核

    Ntkrnlpa.exe

    执行体和内核,支持物理地址扩展,是的系统可寻址64GB物理内存

    Hal.dll

    硬件抽象层

    Win32k.sys

    Windows子系统的内核模式部分

    Ntdll.dll

    内部支持函数,以及执行体函数和系统服务分发存根(stub)

    Kernerl32.dll,Advapi32.dll,User32.dll,Gdi32.dll

    Windows的核心子系统DLL

    2.3.1 可移植性

    windows的一个设计目标是要能够运行在各种不同的硬件体系结构上。

    windows2中方式支持可移植性以支持多种硬件体系结构和平台:

    1.windows有一个分层设计,系统底层部分与处理器体系结构相关,或与平台相关的,这些部分被隔离到独立的模块中,所以搞成不需要考虑体系结构的区别。有2个组件为系统提供了可移植性:内核和硬件抽象层。

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

    2.3.2 对称多处理

    多任务是值多个执行线程之间共享同一个处理器的操作技术。

     

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

     

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

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

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

     

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

     

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

     

    考虑到性能问题内核和HAL分为2个版本,单处理器和多处理器版本。

    在系统磁盘上的文件名

    在发布介质上单处理器版本的名称

    在发布介质上多处理器版本的名称

    Ntoskrnl.exe

    Ntoskrnl.exe

    Ntkrnlmp.exe

    Ntkrnlpa.exe

    Ntkrnlpa.exe in \windows\<arch>\Driver.cab

    Ntkrpamp.exe in \windows\<arch>\Driver.cab

    Hal.dll

    取决于系统类型

    取决于系统类型

    以下只针对2000系统

     

     

    Win32.sys

    \I386\UNIPROC\Win32k.sys

    \I386\Driver.cabWin32.sys

    Ntdll.dll

    \I386\UNIPROC\Ntdll.dll

    \I386\Ntdll.dll

    Kernel32.dll

    \I386\UNIPROC\Kernel32.dll

    \I386\Kernel32.dll

    2.3.3 可伸缩性()

    多处理器系统下,管家你的问题是可伸缩性。windows有以下功能这些功能对windows作为一个多处理器起到关键性的作用:

    1.能一个处理器上运行系统代码,也可以在多个处理器上运行。

    2.在单个进程内执行多个线程,这些线程可以在不同的处理器上运行。

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

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

    2.3.4 客户和服务器版本的区别

    客户版和服务器版主要区别是有:

    支持的处理器个数不同。

    支持的物理内存不同。

    所支持的并发网络连接数不同。

    2.3.5 版本检查

    2.4 关键的系统组件

    已经看过上面的简易的结构图,了解了高层的结构体系。

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

    2.4.1 环境子系统和子系统dll

    如上图,最初windows3个子系统,os/2,posixwondowsos/2最后一次发布和Windows2000。到了xp posix也不发布了。3个子系统中windows子系统比较特别,是必须启动的。

    查看注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems下面有子系统的信息。

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

     

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

     

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

     

    用户程序不能直接调用windows服务而是通过dll来调用如windows子系统dll(kernel32.dlladvapi32.dlluser32.dllGdi32.dll)POSIX子系统DLL(psxdll.dll)。当一个应用程序调用子系统可能会发生3中情况:

    1.函数完全在该子系统dll中实现的,在用户模式下运行。

    2.该函数要求调用windows执行一次或多次。

    3.改函数要求在环境子系统中完成某个工作。

    2.4.1.1 Windows子系统

    Windows子系统有一下几个主要组件构成:

    1.环境子系统进程(Csrss.exe),包含下列支持:

             a.控制台(文本)窗口

             b.创建或删除进程和线程

             c.16为虚拟DOS(VDM)进程的一部分支持。

    d.其他一些函数,比如GetTempFile,DefineDosDevice,ExitWindowsEx,以及几个自然语言函数支持。

    2.内核模式驱动程序(win32k.sys)包含:

    a.窗口管理器,它控制窗口显示管理屏幕输出,采集来自键盘,鼠标,和其他设别的输入,同时也负责将用户的消息传递给应用程序。

             b.图形设备接口,他是专门正对图形输出设备的函数库。

    3.子系统dll

    子系统dll,如Kernel32.dll,Advapi32.dll,User32.dll,Gdi32.dll,将windows api文档化,对应到Ntoskrnl.exeWin32k.sys大多数未文档化的系统服务调用。

    4.图形设备驱动

             指硬件香瓜你的图形显示器驱动程序,答应及驱动程序和视频微端口驱动程序。

    2.4.1.2 POSIX子系统

    posix可以看成是一个基于unix的可移植的操作系统接口。值的是正对unix风格的操作系统接口的一组国际标准。posix鼓励厂商实现unix风格,编译在系统之间迁移。

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

    2.4.1.3 OS/2子系统

    posix一样,有用性很有限,而且OS/2已经不在适用于windows了。

    2.4.2 NTDLL.DLL

    NTDLL.DLL是一个特殊的系统支持库,主要用于子系统DLL。包含两个类型函数:

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

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

     

    第一组函数是为windows执行体系服务提供接口,在用户模式下可以通过接口函数调用windows执行体的系统服务,如(NtCreatefileNtSetEvent)

     

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

     

    NTDLL.DLL也包含了许多支持函数,比如映像文件加载器(ldr开头的函数)、对管理器、Windows子系统进程通信函数(Csr开头的函数)、以及一般运行库(Rtl开头的函数)、也包含了异步调用(APC)分发器和异常分发器。

    2.4.3 执行体

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

    1.可在用户模式下调用的导出函数。这些函数成为(系统服务)并通过ntdll导出。还有一些未文档化的如LPCNtQueryInformationProcess

    2.可通过DeviceIoControl函数调用设备驱动器函数。

    3.只能在内核模式下导出的函数,并且这儿写函数在Windows DDK或者Windows IFS Kit已经文档化。

    4.在内核模式下调用,未在Windows DDK或者IFS Kit中文档化的导出函数。

    5.定义为全局符号,但是未被导出的函数。如以Iop或者Mi开头的函数(分别是内部IO管理器支持函数和内部内存管理器支持函数)

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

     

    Windows执行体还包含以下组件:

    1.配置管理器,复制系统注册表的实现和管理

    2.进程和线程管理器,创建或者终止进程和线程。

    3.安全应用监视器,强制在本地计算机上实行安全策略,它守护着系统资源执行对运行时对象的保护和审计。

    4.I/O管理器:实现了设备无关的I/O,负责将这些操作分发到恰当的设备驱动程序做进一步处理。

    5.即插即用(pnp)管理器:为了支持一个特定的设备,确定驱动,并加载这些驱动。

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

    7.WDM Windows管理规范例程:允许设备驱动发布有关性能和配置信息以及接受来自用户模式的WMI服务命令。

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

    9.内存管理器:实现了虚拟内存

    10.逻辑预取器:加速系统和进程启动过程

     

    另外Windows执行提还包含了4组主要支持函数:

    1.对象管理器,创建,管理,删除Windows执行体对象和抽象数据类型,这些对象和数据类型代表了操作系统资源。

    2.LPC设施,在同一台机器上用户进程和服务器进程之间传递消息。

    3.公共运行库,字符串处理,算术操作等函数。

    4.执行体支持例程:如系统内存分配,互锁的内存访问,以及2中特殊的同步对象:资源和快速互斥体。

    2.4.4 内核

    内核是由Ntoskrnl.exe中的一组函数以及对硬件体系结构的低层支持构成的。Ntoskrnl.exe中的这组函数提供了一些最基本的机制。内核代码使用C编写,并不容易在C中访问的任务,则保留使用汇编。大部分函数都已经文档化,以Ke开头。

    2.4.5 内核对象

    内核给高层做支持。内核实现了操作系统最基本的机制(调度,分发)。把各种策略决定留给了执行体。

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

    一组内核对象建立了有关控制各种操作系统功能叫做控制对象,另一组内核对象融合了同步的能力,改变或者影响线程调度叫分发器对象。分发器对象包含了内核线程,互斥体,事件,内核事件对,信号量,定时器,等待定时器。

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

    2.4.6 硬件支持

    内核的另一个主要功能是将执行体和设备驱动程序从windows所支持的各种硬件体系结构中抽象出来,或者隔离出来变化的差异。

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

    从高层看线程选择和上下文切换可以使用相同的算法(上一个线程的执行上下文被保存起来,新线程的环境被加载进来),但在不同的处理器上,实现还是有差异的。执行上下文是由处理器的寄存器来描述的,所以要保存和加载哪些数据还是有差别的。

    2.4.7 硬件抽象层(HAL)

    硬件抽象层是系统可移植的关键。HAL是一个可加载的,内模式模块提供了windows当前运行平台的低层接口。它隐藏了与硬件相关的细节,如I/O接口,中断控制器,以及多处理器通信机制等,体系结构或者机器相关的功能。

    windows内部组件以及用户编写的设备驱动并不直接访问硬件,当它们需要获得与平台相关的信息时,它们可以通过调用HAL例程来保存可移植性。DDK中能找到很多有关HAL在驱动中的用法。

    虽然windows带了几个HAL,但是安装时只能有一个被选中,并且copy到系统磁盘,其文件名为hal.dll

    2.4.8 设备驱动程序

    设备驱动程序是可加载的内核模式(.sys结尾),他们在I/O管理器和相应的硬件之间建立链接。驱动在内核模式下,位于以下3个环境之一:

    1.在发起I/O功能的用户线程环境中

    2.在内核模式系统线程的环境中

    3.作为一个中断的结果(因此不存在任何特定的进程或者线程执行环境中)

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

    设备驱动有以下几类:

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

    2.文件系统驱动程序是指可以接受面向文件的I/O请求,并将这些请求转化成针对某一特定设备的I/O请求。

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

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

    5.协议驱动程序,如TCP/IP,NetBEUI,IPX/SPX之类的网络协议

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

    驱动程序是内核模式中添加代码的唯一方式。

    2.4.9 系统进程

    以下系统进程会出现在每个windows系统中(其中空闲进程,system进程并不是完整的过程,因为它们不是运行在用户模式的可执行文件):

    1.空闲进程

    2.system进程

    3.会话管理器(smss.exe)

    4.windows子系统(csrss.exe)

    5.登陆进程(winlogon.exe)

    6.服务控制管理器(services.exe)和它创建的子服务进程(如系统提供通用服务宿主进程svrhost.exe)

    7.本地安全认证服务器(lsass.exe)

    2.4.9.1 空闲进程

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

    2.4.9.2 中断和DPC

    标记为中断和DPC(分发过程调用)用于中断和延迟过程调用的时间,他们并不是进程,列在这里是因为他们都会消耗cpu,并没有计算在任何一个进程中,而是被算在系统空闲中。

    2.4.9.3 system进程和系统进程

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

    系统线程是由PsCreateSystemThread来创建的,这个函数只能在内核环境下才能被调用。

    内核会创建一个称为平衡集管理器的系统线程,每秒没唤醒一次,可能发出调度和内存管理相关事件。告诉缓存管理器也使用系统线程来实现预读延迟写功能。

    在排查问题是,知道系统线程映射到某个驱动程序中,甚至映射到包含改代码的子例程中,一定非常有用。

    所以如果system进程中的线程正在运行,首先要确定哪些线程在运行。通过线程看哪个驱动开始的或者检查调用栈,得知在运行到哪里了。

    2.4.9.4 会话管理器

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

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

    smss.exe的主线程执行以上步骤后,一直在csrss.exewinlogon的进程上等待。如果这2个进程中任何一个非正常终止了,则ssms.exe让系统崩溃,(崩溃代码:status_system_process_terminated0xc000021a)因为windows依赖这2个进程才能运行。

     

    smss等待加载子系统的请求,调式事件,以创建新的终端服务器会话的请求。

    终端服务会话是由smss来完成的。当smss接到一个创建会话的请求时,先调用NtSetSystemInformation,请求建立内核模式数据结构。又调用内部的内存管理函数MmSessionCreate该函数建立起会话虚拟地址空间,改地址空间包含会话中的换页池以及由win32子系统的内核模式部分和其他的会话空间设备驱动程序所分配,属于某个会话的数据结构,然后会为该会话创建winlogoncsrss实例。

     

    2.4.9.5 Winlogon,lsassUserinit

    winlogon登陆进程处理交互式用户的登陆和注销,当sas被按下(ctrl+atl+del)winlogon接到一个用户登陆请求。

    登陆过程的身份识别和认证是在一个名为GINA(图形识别和认证)的可替换DLL中,windows的标准为GINAMsgina.dll实现了默认的windows登陆界面。然而开发人员可以提供他们自己的GINA DLL来实现其他的身份识别和认证机制如:基于声波的方法。

    一旦用户名和口令捕捉到了就可以送到本地安全认证服务器进程(lsass.exe)进行认证。lsass调用适当的认证包,以执行实际的验证操作,比如口令是否符合存储在活动目录或者sam中的口令信息。

    在成功完成验证后,lsass调用安全引用监视器中的一个函数(:NtCreateToken)创建一个访问令牌对象。对象包含当前用户的安全范围。winlogon利用此访问令牌来创建该用户会话中的初始进程默认为userinit.exe

    userinit执行该用户环境的一些初始化工作,然后再查找注册表winlogon下的shell并且创建一个进程来运行系统定义的外壳程序(默认explorer.exe)

    然后userinit退出,这就是explorer.exe没有父进程的原因。winlogon在注销,登陆,sas winlogon是活动的。关于登陆过程各个步骤的完整秒死可以看第5章。有关安全认证可以查看第八章。

    2.4.9.6 服务控制器管理

    windows中的服务可以自一个服务器进程,也可以是一个驱动程序。这一指的是用户模式进程(如:unix的守护进程),这些进程可以在系统引导是自动启动起来,而无需交互式的登陆过程。也可以被配置为手动启动。

    服务控制器是一个特殊的系统进程,用于启动,停止服务进程也复制服务进程之间的交互。服务有3个民粹:运行中进程名,注册表内名称以及管理器的显示名。

    在服务进程和所运行的服务之间并不是一一对应的,因为有些服务和其他共享一个进程。注册表服务类型代码指明了共享还是独占进程。

    许多windows组件使用系统服务实现如Spoolerevent logTask Scheduler和多个网络组件。

    2.5 总结

    本章主要概括的介绍了一遍windows体系结构,检查了一遍关键的组件,他们之间是如何联系起来的。

    posted on 2014-10-21 15:18 Fanr_Zh 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/Amaranthus/p/4040449.html

    展开全文
  • 目录结构差异  Linux与Windows都是目前主流的操作系统。笔者在此总结了两个操作系统在目录结构上的主要差异。  一、系统默认目录的差异  虽然两个系统安装成功后,都会创建...通常情况下,windows操作系统安装完

    目录结构差异

         Linux与Windows都是目前主流的操作系统。笔者在此总结了两个操作系统在目录结构上的主要差异。

     一、系统默认目录的差异

            虽然两个系统安装成功后,都会创建一些系统目录,供操作系统程序使用。通常情况下,windows操作系统安装完成后,建立三个默认目录,分别为C:\Documents and Settings、C:\Program Files、C:\WINDOWS。而Linux系统安装完成后,会创建较多的默认目录。Linux系统下会根据不同的用户创建不同的目录,在各用户的目录中放置一些特定的文件。相比之下,Linux系统默认目录是根据用途来分的,而且分类很细。 Linux下每个用户都会有一个专属的目录,称为主目录,供用户摆放自己的文件。/home目录就是用来放置每个帐户的主目录的。如果是系统管理员root用户,其主目录是不放置在这里的。当新建一个用户,在这个用户首次登陆系统时,操作系统会在这个/home目录下为这个用户创建一个以用户名命名的专属文件夹。其他用户除非有授权,否则无法查看非该用户专属目录中的文件。微软操作系统安装完成后,也会为每个用户在C:\Documents and Settings文件夹下创建用户专属的目录。这一点上,windows和linux有相似之处。但是两者有一个很大的差异。在windows操作系统中,系统管理员Administrator的个人专属目录也是在这个文件夹下。而Linux操作系统中,默认情况下系统管理员账户专属文件夹跟普通帐户的专属文件夹是分开的。系统会专门建立一个/root目录作为系统管理员的专属目录。相比windows系统来说,这就大大提高了linux环境下系统管理员帐户的安全性。 Linux 操作系统是一个多用户操作系统,因此,不同用户之间的文件管理就显得尤为的重要。Linux操作系统会在/home这个目录下为每个用户建立一个专属的文件夹。每个用户在日常工作中,最好尽可能的将个人文件、数据存放在自己的专属目录下,以方便管理,同时可以提高用户个人数据安全性,防止意外破坏。 linux下默认有/cdrom 与 /floppy两个子目录,用来存放光盘与软件的数据。从这个目录我们可以看出两个操作系统的差异。windows系统中把光驱或者软驱都当作一个独立的盘或者分区来对待。但是在Linux系统中,则把他们当作一个目录来对待。不仅如此,在Linux系统下,也没有windows系统磁盘驱动器的概念,也就是说不会看到C:、D:等磁盘标识符。所有分区都被当作目录使用,分别被加载与根目录下。简单来说,Linux下只有一个单独的树状结构。但是在windows系统中,每个分区下都有一个独立的树状结构

          Linux系统下,/tmp是供全部用户临时放置文件的目录,又叫做临时目录。一些应用程序运行中产生的临时文件,也会保存在这个目录中。例如,用户在网络上看电影,播放器的缓冲文件保存在这个临时文件夹中。等到影片播放结束后,这个临时文件夹中的信息就会被清除。通常情况下,重新启动系统后这个临时文件夹中的内容就会被清空。在windows系统中,也有一个临时目录,只是他存储的路径与名字不同而已。两者在临时目录功能上没有本质的差异。

     二、“/”与“\”两个符号的差异 

          上文中已经提到,Linux系统中并没有磁盘驱动器的概念,所有的分区都被当作目录来使用。在Linux下目录是利用“/”来表示的。在Linux操作系统中无论将硬盘分为多少个区,每个分区中的文件及目录,都可以在根目录中找到。 但是,在Windows系统中,要表示文件或者目录的路径时,目录名称之间是以“\”作为表示的。如C:\Documents and Settings目录,它就是以“\”作为标示。

     三、大小写的差异以及查询上的不同

           在windows系统中,c:\U01与c:\u02这两个目录是等价的。但是,在Linux系统中,/u01与/U02两个目录就代表不同的目录。Linux下,/u01与/U02两个目录因为字母大小写不同,所以目录代表的内容不同。但是在windows系统中,则没有这方面的区分。文件或者文件夹大小写是不区分的。 因此,为了便于管理,在Linux下面建立文件夹时,最好都能够采用小写字母。大写字母主要用来表示一些特殊的文件夹。如Desktop,它表示用户的桌面文件。这个文件夹是系统自动建立的。系统在对其命名的时候,把第一个字母大写了,以跟其他文件夹进行区分。所以除非是为了起到一个强调或者区分的作用,最好把文件夹的名字都设置为小写。 另外,在文件查询的时候,文件名字要注意大小写的差异。在搜索文件的时候,Linux系统中主要调用了locate命令。这个命令是从系统中存储文件以及目录名的数据库中搜索文件,查找的速度会比较快。但是它有一个缺点,就是这个数据库中的信息跟实际的情况可能会存在一个时间差。对于刚刚新建的文件、目录,很可能会因为这个数据库尚未更新信息而找不到文件。在这种情况下,往往需要管理员利用updatedb命令来更新该数据库,然后重新进行查询。而在微软的操作系统中不会遇到这种情况。

    展开全文
  • 嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统Windows CE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm OS、Symbian等。从实时性的角度看,大致可以...
  • Windows系统结构

    2020-12-07 19:38:34
    Windows系统结构 Windows系统结构,如图: Windows 采用了双模式结构来保护操作系统本身。操作系统核心运行在内核模式,应用程序的代码运行在用户模式下。每当应用程序需要用到系统内核或内核的扩展模块...

      Windows系统结构

    Windows系统结构,如图:

    Windows 采用了双模式结构来保护操作系统本身。操作系统核心运行在内核模式,应用程序的代码运行在用户模式下。每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务时,应用程序通过硬件指令从用户模式切换到内核模式中;当系统内核完成了所请求的服务以后,控制权又回到用户模式代码。

    一、  Windows内核结构

    Windows内核分为三层,硬件抽象层(Hardware Abstraction Layer ,简称HAL), HAL之上是内核层,有时候也称为微内核,在内核层之上则是执行体(executive)层。

    硬件抽象层的用意是把所有与硬件相关联的代码逻辑隔离到一个专门的模块中,从而使上面的层次可能做到独立于硬件平台。

    内核层和执行层的分工是,内核层实现操作系统的基本机制,而所有的策略决定则留个执行体。

    Windows 内核的组成结构,如图:

    应用程序最终通过ntdll.dll 切换到内核模式下的执行API函数中,以调用内核中的系统服务。Ntdll.dll 是连接用户模式代码和内核模式系统服务的桥梁。

    1.1  Windows内核中的关键组件

    1.HAL(硬件抽象层)

    Windows Server 2003 的HAL 列表(Intel X86 处理器)

    HAL 文件

    所支持的硬件系统

    Hal.dll

    标准PC

    Halacpi.dll

    ACPI(高级配置和电源接口)PC

    Halapic.dll

    APIC(高级可编程中断控制器)PC

    Halaacpi.dll

    APIC ACPI PC

    Halmaps.dll

    多处理器PC

    Halmacpi.dll

    多处理器ACPI PC

    2. 内核(或微内核)

    它是内核模块ntoskrml.exe 中的下层部分(上层部分为执行体),最接近HAL层,负责现场调度和中断、异常的处理;对于多处理器系统,还负责同步处理器之间的行为。

    Windows 内核实现了抢占式线程调度机制。

    Windows内核管理两种类型的对象:分发器对象(dispatcher object) 和控制对象。分发器对象实现了各种同步功能。Windows内核实现的分发器对象包括事件(event)、突变体(mutant)、信号量(semaphore)、进程(process)、线程(thread)、队列(queue)、门(gate)和定时器(timer)。控制对象被用于内核的操作,包括异步过程调用(APC)、延迟过程调用(DPC)、中断对象等。

    3. 执行体

    执行体是内核模块ntoskrnl.exe 的上层部分,包含5种类型的函数

    1. 被导出的、可在用户模式下调用的函数。如ntdll.dll。
    2. 虽已被到处并且可在用户模式下调用,但无法通过任何一个Windows API调用的函数。
    3. 只能在内核模式下调用的导出函数,并且在Windows DDK/WDK中有关这些函数的文档。
    4. 供执行体组件之间相互调用,但未被文档化的函数。
    5. 属于一个组件的内部函数。

    执行体包含以下组件:

    1. 进程和线程管理器。负责创建进程和线程,以及终止进程和线程。
    2. 内存管理器。实现了虚拟内存管理,负责系统地址空间的内存管理,为每个进程提供了一个私有的地址空间,并且支持进程之间内存共享。
    3. 安全引用监视器(SRM,Security Reference Monitor)。强制在本地计算机上实施安全策略,守护着操作系统的资源,执行对象的保护和审计。
    4. I/O 管理器。实现了与设置无关的输入和输出的功能,负责将I/O请求分发给正确的设备驱动程序以便进一步处理。
    5. 缓存管理器。为文件系统提供了统一的数据缓存支持,允许文件系统驱动程序将磁盘上的数据映射到内存中,并通过内存管理器来协调物理内存的分配。
    6. 配置管理器。负责系统注册表的实现和管理。
    7. 即插即用管理器。负责列举设备,并为每个列举到的设备确定哪些驱动程序是必需的,然后加载并初始化这些驱动程序。
    8. 电源管理器。负责协调电源事件,向设备驱动程序发生电源I/O通知。

    执行体还包含4组主要的支持函数,如下:

    1. 对象管理器。负责创建、管理和删除Windows执行体对象,以及用于表达操作系统吸引的抽象数据类型,比如进程、线程和各种同步对象。
    2. LPC设施。负责同一台机器上的客户进程和服务器进程之间传递消息。
    3. 一组运行时库函数。
    4. 执行体支持例程。例如系统内存分配、互锁的内存访问,两种同步对象(资源和互斥体)的支持。

    4. 设备驱动程序

    设备驱动程式可以懂得加载到系统的模块,其文件扩展名为.sys,是标准的PE文件格式。

    设备驱动程序有三种基本类型:

    1. 即插即用驱动程序(即WDM驱动程序)。
    2. 内核扩展驱动程序(非即插即用驱动程序)。
    3. 文件系统驱动程序。

    5. 文件系统/存储管理

    Windows的原生文件系统是NTFS(NT File System),驱动程序为ntfs.sys。还有一个文件系统格式是FAT(File Allocation Table),是DOS时代发展的文件系统格式。

    Windows支持两种形式的过滤驱动程序:一种直接插入到设备栈中,能够看到每个经过设备栈的文件I/O请求;另一种基于Windows提供的过滤管理器驱动程序(FltMgr)的I/O过滤框架,称为文件系统小过滤驱动程序,以回到方式来想要FltMgr的事件。

    6.网络

    Windows 主要的网络API:

    1. Windows 套接字,简称Winsock。实现并扩展了BSD套接字标准。
    2. WinInet 。一个高层网络API,支持Gopher、FTP、HTTP等多个协议。
    3. 命名管道(named pipe)和邮件槽(mailslot)。用于不同进程之间进行通信。支持不同机器上的进程之间相互通信。命名管道支持连接方式的通信模型;邮件槽支持非链接方式的通信模型,客户进程可以发送广播信息。
    4. NetBIOS 。
    5. RPC。

     

    二、 Windows子系统

    Windows子系统包含内核模式和用户模式,内核模式部分核心是Win32k.sys ,包含2部分,窗口管理和图形设备接口,窗口管理负责收集分发消息,控制窗口显示和管理屏幕输出。图形设备接口部分包含各种形状绘制及文本输出功能。用户模式部分包括Windows子系统csrss.exe 以及一组动态链接库(DLL)。Csrss.exe 进程主要负责控制台窗口的功能,以及创建或删除进程和线程等。子系统Dll 则被直接链接到应用程序中,包括kernel32.dll ,user32.dll,

    gdi32.dll,advapi.dll等,负责实现已经文档化的Windows API函数。

    窗口管理:

    Windows 子系统的用户界面管理有一个层次结构,通常应用程序只是在一个默认的桌面上运行。Windows子系统窗口管理层次结构:

    每个子系统会话都有自己的会话空间,属于某一个会话的资源将从该会话空间中分配。当用户登录到Windows时,操作系统将为该用户建立一个会话;即使用户通过远程桌面或终端服务连接到一个系统中,系统也会为该用户建立一个单独的会话。

    在一个会话中,有一个交互式窗口站,可能还有非交互式窗口站。交互式窗口站中通常有三个桌面:登录桌面、默认桌面和屏幕保护桌面。

    图形设备接口:

    Windows子系统的图形模块结构

    Windows的图形引擎有两方面的特点

    首先,它提供了一套与设备无关的编程接口,即GDI,这使得应用程序可以使用各种底层显示设备的差异;

    其次,应用程序与图形设备驱动程序之间的通信足够高兴,从而即使在频繁的输出和刷新图形元素的情况下,Windows也能够为用户提供良好的视觉效果。

     系统线程和系统进程

    Windows 关键系统进程介绍:

    系统空闲进程(Idle),PID为0,每个处理器或核对应有一个线程

    System进程,xp,server2003 PID 为4,包含了内核模式系统线程

    会话管理器(Session manager smss.exe),这是Windows系统中第一个创建的用户模式进程。启动了子系统进程csrss.exe 和winlogon.exe。

    登录进程winlogon.exe,负责处理交互用户的登录和注销。

    Windows 子系统进程csrss.exe , 负责为用户提供一个子系统环境,包括提供控制台窗口的功能,以及创建和删除进程和线程等。

    本地安全权威子系统进程(lsass.exe),负责本地系统安全策略。

    Shell 进程explorer.exe 。windows 默认Shell,提供了系统与用户打交道的各种界面,包括开始菜单,任务栏等。

    服务控制管理器services.exe ,负责管理Windows的系统服务。

    展开全文
  • Windows操作系统的体系结构

    千次阅读 2011-09-11 09:58:03
    下面是windows的体系结构:   这是整个windows的体系结构的总览。从图上可以看出系统被分成内核模式和用户模式。 内核模式的构成文件是系统的核心文件她包含: hal.dll ntoskrnl.exe 设备驱动 ...
  • 第二章 Windows操作系统 的体系结构上;操作系统结构设计;操作系统的设计目标;Windows 2000/XP的设计目标;可扩充性当市场需求变化时代码必须易于扩充改动 可移植性系统必须能够在多种硬件体系结构中运行和相对简单地...
  • * Windows操作系统设计模型 融合了分层操作系统和微内核操作系统的设计思想 Windows通过硬件机制实现了核心态以及用户态两个特权级别对性能影响很大的操作系统组件运行在核心态核心内没有保护 设计充分体现了机制与...
  • windows操作系统

    2014-05-10 21:19:35
    操作系统中的两个核心概念:进程和线程,包括它们所涉及的内核数据结构和一些关键 算法。本节为大家介绍ProcMon 使用示例。 标签:Windows Windows内核原理与实现 3.6 进程和线程运行状态监视工具
  • 嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统Windows CE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm OS、Symbian等。从实时性的角度看,大致可以...
  • 硬盘分区结构及windows文件系统结构

    千次阅读 2015-09-29 11:20:06
    硬盘分区结构及windows文件系统结构 关于硬盘分区 关于INT 13 硬盘分区结构及windows文件系统结构 1.关于硬盘分区:   IDE接口硬盘中,不管什么操作系统,都有如下结构: MBR(Master ...
  • 比较Windows 2000/XP,Windows NT 4,Windows 9x和windows CE在体系结构上的共同点和差异。想一想为什么会有这样的差异?
  • Windows操作系统课件

    2012-12-30 13:18:11
    本资源对Windows操作系统原理与应用进行了详细的讲述,主要内容包括:操作系统概述,Windows操作系统的体系结构,处理机管理,存储管理,文件管理,设备管理,计算机网络管理。
  • 线上面的方框代表了用户的进程,线下面的组件是内核模式的操作系统。用户模式的线程在一个受保护的进程地址空间中执行,因此系统支持进程、服务进程、用户应用程序和环境子系统都有它们各自的私有进程地址空间。 1)...
  • 深入研究Windows系统内部原理系列之二PDF Windows体系结构-从操作系统的角度
  • Windows操作系统原理

    2012-11-06 16:45:36
    windows操作系统讲解,主要是结构的叙述,我还没来得及看。
  • Windows系统结构

    千次阅读 2017-01-24 12:45:34
    2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称多处理 2.3.3 可伸缩性() 2.3.4 客户和服务器版本的区别 2.3.5 版本检查 2.4 关键的系统组件 2.4.1 环境子系统和...
  • Windows CE操作系统简介, 系统结构和功能三
  • Windows CE 系统操作系统简介,结构和功能一
  • 系统程序有对系统数据和硬件的操作权,而用户程序要想操作系统数据或者硬件就只能通过系统程序。系统程序在windows2000中是以服务的形式给出。当一个用户程序要访问系统数据时,通过向相应的服务发出请求而实现,而...
  • Windows操作系统核心技术 Windows 2000XP的体系结构 进程、线程和处理机管理 存储体系 Windows 文件系统 设备管理 Windows的网络 Windows应用程序设计 Windows设备驱动程序设计 Windows 的安全
  • Windows CE 操作系统简介,系统结构和功能二

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,091
精华内容 3,636
热门标签
关键字:

windows操作系统结构