关键组件
HAL
内核
- 负责线程的调度中断,异常处理。核心任务是让系统中所有处理器尽可能的忙和高效
- 抢占式的调度机制
两种对象
执行体
图2.3中执行体下面的几种组件
设备驱动(.sys)
调用HAL与硬件打交道
即插即用:IO
内核扩展
文件系统
网络
windows子系统
环境子系统
环境子系统所扮演的角色是windows系统执行的服务和应用程序之间的桥梁。每个子系统都可给应用程序提供windows本地服务不同部分的访问。依托某个子系统建立的应用程序所完成的事情不会被依托另一个子系统的应用程序完成。比如,一个windows应用程序不能用SUA(基于unix应用程序的子系统) fork函数。
每个可执行程序的镜像(.exe)被限定在一个而且只是一个子系统中。
窗口管理
图形设备接口
系统线程与系统进程
system进程,带了一组系统辅助线程(system worker thread)
内核的基本概念
处理器模式
- 0 内核模式;io指令,曹总内部寄存器(GDT IDT MSR)指令,系统服务(SDT)
- 3 用户模式 只能访问当前进程的地址空间
内存管理
页式,段式或者段页式都管理属于离散存储管理中的一种 ,采用这种方式的主要目的是为了解决碎片问题,不用连续地分配内存,可以将一个进程/程序离散地装入到不连续的内存中。
页式和段式系统的区别
-
页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:
-
页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。
-
页的大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
-
页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
系统地址管理
进程地址管理
物理内存管理
进程线程管理
windows是一个多进程操作系统环境,但它对处理器资源的分配时按照线程来进行调度的
中断和异常
- 中断的发生与当前指令流并无实质联系
- 异常则是当前指令流执行的直接结果
- 中断是异步的
- 异常是同步的
中断
中断级别
异常
同步
- 大于APC_LEVEL的同步用
- 提升irql
- 互锁
- 无锁单链表
- 自旋锁
- PASSIVE_LEVEL的同步用 分发器对象
- 事件
- 突变体
- 信号量
- 队列对象:如io
- 进程对象:创建和结束有信号
- 线程对象:创建和结束有信号
- 定时器对象
- 门对象
windows内核中的公共管理设施
对象管理
内核包括:
- 执行体
- (微)内核
- HAL
对象管理器是执行体中的组件,主要管理执行体对象,执行体对象也可能封装了一个或多个内核对象
对象头包含了基本信息
指针计数:它记录了内核本身(包括驱动程序)引用该对象的次数
句柄计数:它记录了多少句柄应用此对象,这些句柄可能出现在不同的进程
对象构造
注册表和配置管理器
事件追踪(ETW)
安全性管理
windows引导过程
内核加载
- MBR: 主引导记录 (master boot record)
- 引导扇区:引导分区的第一个扇区
- ntldr:NT loader 引导程序
- 实模式:实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址
- 保护模式:物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问,程序对此一无所知。
- boot.ini
- 启动加载程序:
- 操作系统:部分包含计算机上安装的每个操作系统或可启动程序的一个或多个启动项
- NTDETECT.COM:硬件检测
- ntoskrnl.exe:内核调度系统