您的位置:首页 > 其它

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

2014-04-15 22:01 344 查看
一、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,进入登陆界面。至此,引导过程基本结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: