你好:

     感谢你访问我的 Blog ,本博客只提供博主的技术经验分享,你可以在此做简单的留言和评论,我会抽空回复你;若是要深入交流探讨,请联系QQ:47853253或者加QQ群:12012081


 

Windows内核原理与实现--Windows基本结构概述

一、Windows系统结构概述

1、Windows采用双模式来保护操作系统本身,内核模式和用户模式。在Windows中,用户代码和内核代码有各自的运行环境,而且它们可以访问的内存空间也并不相同。在x86中,内核代码可以访问当前进程的4GB虚拟地址空间,而用户代码只能访问底端2GB虚拟地址(一般情况下)。

2、Windows子系统与系统内核一起构成了用户程序的执行环境。Windows子系统既有内核模式部分,也有用户模式部分。用户模式部分包括一个单独的子系统进程和一组链接到各个应用进程中的系统DLL。

3、Windows还包括一组系统进程和服务进程。

 

二、Windows内核结构概述

1、Windows操作系统的内核分为三层。HAL层,HAL之上的内核层(微内核 micro-kernel,这层包含操作系统原语和功能,例如线程和进程,线程调度,中断和异常处理,同步对象和各种同步机制),执行体(executive)层(这一层提供一些可供上层应用程序或内核驱动程序直接调用的功能和语义)。Windows内核的执行体包含一个对象管理器,用于一致地管理执行体中的对象。执行体层和内核层位于同一个二进制模块中,即内核基本模块ntoskrnl.exe。

 

 

2、在Windows 32位中用户模式代码只能访问2GB一下的虚拟内存地址孔家,而内核模式代码可以访问当前进程整个4GB虚拟地址范围。两者间有一个特殊的64KB地址空间位于0x7FFF0000-0x7FFFFFFF,两种模式下都不能访问。这块地址是给ProbeForRead服务的。

 

三、Windows内核中的关键组件概述

1、HAL hal.dll 支持标准PC HAL的设计是将硬件的差别隐藏起来,给OS提供一个抽象的资源模型

2、微内核 

3、执行体 

4、设备驱动程序

5、文件系统

NTFS是给Windows设计的文件系统支持。每个文件系统都有自己的设备栈,因而可以通过过滤驱动程序来过滤I/O请求。文件系统底层是对存储设备的管理,存储设备以partition和volume来管理整个存储空间。

6、网络 

Winsock WinInet 命名管道 邮件槽(广播消息) RPC

在Windows中,网络协议与网络适配器驱动程序是分开的,协议驱动程序独立于任何一个网络适配器,真正发送和接受数据是通过网络适配器进行的。协议驱动程序通过统一的接口与适配器驱动程序进行通信,此接口是NDIS。

 

四、内存管理

在系统地址空间中,不同的区域使用并不完全相同的内存页面管理算法,较为典型的有以下三种:

非换页内存池。系统用空闲链表的方法,将空闲页面链接起来。

换页内存池。通过位图来管理页面的分配。

系统PTE区域。这表示这部分地址是以PTE形式管理的。当内核需要一段虚拟地址来映射物理页面时,它可以使用系统PTE区域中的地址。

 

进程地址空间是随进程一起被创建的,每个进程都有它自己的页目录页面,其中有一半PDE是共享的,另一半初始化为0。用户模式代码通过VirtualAlloc和VirtualFree来申请或释放地址范围,内核通过一颗平衡二叉搜索树来管理进程地址空间被使用的情况。树的每个节点为VAD(虚拟地址描述符),描述一段连续地址的范围。

内存管理器除了管理系统地址空间和进程地址空间以外,还要管理有限的物理内存。PFN数据库是Windows系统空间中被保留的一块区域。每个物理页面对应于PFN数据库中的一项。当系统进程需要大量工作时,内存管理器需要使用Windows工作集管理器。工作集(也就是熟知的WorkingSet)是指一个进程当前正在使用的物理页面的集合。工作集分为进程工作集,系统工作集,会话工作集。此外,每个进程都有一个工作集链表。

 

五、进程和线程管理

进程定义一个执行环境,包括它自己私有的地址空间,一个句柄表以及一个安全环境。线程则是一个控制流,有自己的调用栈。在Windows内核体系中,进程和线程的核心机制是在微内核实现的,管理机制是在执行体中实现的。对于线程,Windows实现了基于优先级的抢占式(preemptive)线程调度算法。

 

六、中断和异常

IDT ISR IRQL

 

七、Windows内核中的公共管理设施

1、Windows内核中的对象管理

2、注册表和配置管理器 HIVE

3、事件追踪(ETW)

4、安全性管理

5、Windows引导过程

 

内核加载

MBR(硬盘主引导记录)包含代码和数据,Windows从MBR中的引导代码读入Windows的加载程序,即ntldr文件,然后将控制权交给ntldr的入口函数。ntldr从实模式跳到保护模式后,将控制权交给os loader(包含在ntldr中).loader首先建立内存描述符,开始构造页表和页目录,初始化一系列设备。接着检测是否当前为休眠系统的恢复过程(检查是否有一个有效的hiberfil.sys),如果不是,解析boot.ini中,引导各种参数,执行NTDETECT.COM程序。然后loader加载ntoskrnl.exe及HAL.dll,注册表 SYSTEM HIVE,加载设备驱动。最后,loader将控制权交给内核模块的入口函数,接下来引导过程由内核模块继续进行,loader使命已经完成。

 

内核初始化

非常非常复杂的过程。这段旅程从KiSystemStartup出发。

 

建立用户登录会话

会话管理器子系统smss smss相当依赖于注册表

首先建立全局变量,加载Windows子系统内核模式模块win32k.sys,启动Windows子系统进程csrss.exe,创建LPC端口对象,启动winlogon.exe,创建窗口站、桌面,启动SCM和lsass,进入登陆界面。至此,引导过程基本结束。

 

 

---------------------------------------------------------------------

  操作系统本身属于软件的范畴,但它与底层硬件打交道,为上层应用软件或应用程序提供了一层抽象,专门负责硬件资源的管理与分配。应用软件不直接使用硬件,而是通过操作系统提供的功能来实现各种应用任务。

 

  LPC:进程间通信

 

  现代操作系统的基本结构:

应用环境-----------系统环境----------硬件设备

                    |                     |

              系统服务             硬件抽象

 

  现代计算机系统中,设备的即插即用(PnP)和电源管理越来越重要

 

Windows系统结构

  双模式:内核模式与用户模式。应用程序通过硬件指令从用户模式切换到内核模式。

 

  Windows子系统与Windows内核共同构成了应用程序的执行环境。Windows子系统包含了内核模式部分(图形和窗口管理),也有用户模式部分。用户模式部分包含了一个单独的子系统进程和一组链接到各个应用程序中的系统DLL。

 

Windows内核结构

         内核分为三层:硬件抽象层(HAL)、内核层、执行体层(包含一个对象管理器)。执行体层和内核层位于同一个二进制模块中,名称是ntoskrnl.exe。

  Windows内核为应用程序提供了一组系统调用,但用户程序不直接调用这些系统服务,而是通过一组系统DLL,最终通过ntdll.dll切换到内核模式下的执行体API函数中,以调用内核中的系统服务。Ntdll.dll是连接用户模式代码和内核模式系统服务的桥梁。

  NTdll.dll中,Nt前缀:系统服务的存根函数;Ldr:映像加载器函数;Csr:Windows子系统进程通信函数、Dbg:调试函数;Etw:系统事件函数,Rtl:一般的运行支持函数和字符串支持函数。

  Windows内核是抢占式的进程调度。每一个线程都有一个基本优先级值(base priority),每个线程还有一个动态优先级值,目的是让系统更快响应用户的动作,以及在系统服务和其他低优先级进程之间平衡处理器资源的分配。

  Windows内核管理两类对象:分发器对象和控制对象。分发器对象实现了各种同步功能,这些对象会影响线程的调度:事件、突发体、信号量、进程、线程、队列、门、定时器。控制对象被用于控制内核的操作,但是不影响线程的调度,它包括异步过程调用、延迟过程调用以及中断对象。

  执行体包括:进程和线程管理器、内存管理器、安全引用监视器、I/0管理器、缓存管理器、配置管理器、即插即用管理器、电源管理器。

  Windows驱动程序包括了3类:即插即用驱动程序(WDM驱动程序)、内核扩展驱动程序与文件系统驱动程序。

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

  大容量存储设备以分区和卷来管理整个存储空间,分区是指存储设备上连续的存储区域(连续的扇区)。而卷是指扇区的逻辑集合。一个卷内部的扇区可能来自于一个分区,也可能来自多个分区。文件系统是卷内部的逻辑结构。

  最接近于应用程序的是文件系统,接下来是卷管理部分,最接近于存储设备的是分区管理和磁盘驱动程序。

 

网络

  Winsock是Windows最重要的网络API,它的用户模式部分包含了ws2_32.dll,还定义了一个可扩展的框架。在内核部分,网络API驱动程序afd.sys通过传输驱动程序接口(TDI,transport Driver Interface)与协议驱动程序进行通信。TDI实际上是一组预定义的I/O请求,它描述了各种网络请求,包括名称解析、建立连接、发送和接收数据等。网络API驱动程序是TDI客户,而传输协议驱动程序实现了TDI接口,称为TDI传输器。

  协议驱动程序通过统一的接口与适配器驱动进行通信,此接口是NDIS(Network Driver Interface),符合NDIS的网络适配器驱动程序称为NDIS驱动程序,或NDIS小端口驱动程序。

  NDIS客户(即TDI传输器)利用NDIS库提供的功能,对将要发送给NDIS驱动程序的命令进行格式化,并发送给NDIS驱动程序;NDIS驱动程序则利用NDIS库,接收请求和发送应答。

 

Windows子系统,内核部分win32k.sys,包含了大量的系统调用,主要负责窗口管理和图形设备接口(GDI)

 

Windows窗口的编程模型是消息驱动的,每个窗口对象根据其窗口类指定的窗口过程来响应各种消息。

 

图形设备接口

图像引擎在Windows子系统中提供,有两方面的优点:

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

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

 

线程与进程

  每个线程代表了一个指令执行序列,同时也是一个调度单元;进程定义了一个执行环境,有自己独立的地址空间,每个线程都必定依附于一个进程。System进程的线程被称为系统线程。

 

 

 



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 361
发表评论
你没有权限发表留言!