《windows内核原理与实现》笔记
title:《windows内核原理与实现》笔记
一. 计算机系统的硬件资源管理
1.计算机提供时钟中断:每隔一定时间,硬件系统触发一个中断,操作系统截获此中断,暂停当前任务,选择一个新任务。从而实现任务的切换。多个任务可以在一个CPU中轮换执行。
2.对于32位系统,内核代码可以访问进程整个4G空间。每个任务具有独立的4G内存。“”虚拟内存“”。32bit
3.CPU通过特定的指令来控制I\O设备。
4.进程空间隔离:用硬件的虚拟内存映射机制来隔离每个进程的内存空间。
5.同步机制和跨进程地共享内存是典型的进程间通信。(IPC)。
6.操作系统通常以句柄来代表一个可访问的抽象设备。
7.应用程序与系统设备交互:打开设备获得句柄,想设备发送命令,读或写设备,以及关闭设备。
二.Windows系统结构
1.windows采用双模式结构来保护操作系统本身,以避免被应用程序的错误所影响。操作系统核心运行在内核模式下,应用程序的代码运行在用户模式下。
2.windows内核结构(3层):
2.1 HALL:硬件抽象层,与硬件打交道;
2.2 内核层:线程和进程、线程调度、中断、异常处理等;
2.3 执行层:提供应用程序直接调用的功能。
3.windows内核中的关键组件
3.1 HAL:提供一个抽象的资源模型,使得上层模块无需考虑硬件的差异,直接通过HAL而不是直接访问硬件。在win中,是一个独立的动态链接库。
3.2 内核:系统进程、线程调度切换。
3.3 执行体:提供一系列函数执行内核响应的任务。
3.4 其他一些文件系统ntfs.sys. 网络接口socketAPI
4.windows子系统:
4.1用户模式部分:csrss.exe负责控制台窗口功能,以及创建或删除线程与进程;smss.exe 回话管理器;winlogo.exe 登录进程;lsass.exe本地安全进程;explorer.exe交互式shell进程;services.exe 服务控制管理;
5.关于WINDOWS内核研究:
5.1 wrk:微软开源的用于教育研究的windows源代码。
5.2 ntfs:驱动程序->ntfs.sys
5.3 分区:存储设备连续存储区域(连续扇区)、卷:扇区逻辑集合,文件系统是卷内部的逻辑结构。
6.网络:
6.1 winsock: 实现拓展BSD套接字标准。异步网络I/O,服务质量规范,可扩展名字空间,多点消息传输等。
6.2 winInet : 支持ftp,http,IE使用其完成数据传输。用户模式中包含ws2_32.dll,定义一个可扩展框架,允许第三方插入传输服务提供者和名字空间服务提供者。默认支持tcp/ip,ipx/spx,ATM等协议。提供的传输服务和名字空间服务通过内核模式驱动程序afd.sys实现网络通信。
6.3 NetBios:早期API。为了兼容老程序。
6.4 RPC:一个网络编程标准。分布式系统基础设备重要组件。建立在其他API基础上。支持一步调用方式
6.5:都提供用户模式动态链接库,将接受的请求传递给内核模式下相应的驱动程序,由i/o管理器和对象管理器将网络请求传送之对应的驱动程序中。
6.6 afd.sys:网络api驱动程序通过接口TDI与协议驱动程序进行通信。TDI描述了各种网络请求,包含名称解析,建立连接,发送和接受数据。
7.系统线程和系统进程
7.1:System进程:windows内核出接受来自应用程序的系统服务调用,它自己也有一些线程用于各种用途,这些线程运行在一个特殊的进程环境中。就是system进程。id=4.
7.2:Idle:系统空闲进程,id=0。
7.3:smss.exe:会话管理器,系统第一个创建的用户模式进程,创建环境变量。启动了子系统进程csrss.exe和登录进程winlogon.exe。创建新的终端服务会话,包括建立会话的数据结构,然后位新建的终端服务器会话加载子系统。启动csrss.exe和winlogon.exe、
7.4:winlogon.exe:负责处理交互用户的登录和注销。当用户按下ctrl+alt+del(安全注意序列)时,激发安全认真过长。winlogon会接到登录请求。提供一个安全对话框。
7.5:lsass.exe:负责本地系统安全策略,例如允许那些用户登录到本地系统中,口令策略,授予用户和用户组的权限,以及系统安全审计设置。认证用户身份,将安全审计消息发送到系统的时间日志中。
7.6:explorer.exe:默认shell,提供系统与用户交互的各种界面,开始菜单、任务栏等。
7.7:services.exe:系统服务。被配置成可以在系统引导时自动启动,无须交互登录过程。
8.内核基本概念
8.1:处理器模式:处理器在运行程序所处的状态用段描述符来区分。windows用0和3特权级。0表示cpu处于内核模式。3表示用户模式。
8.2: 从用户模式切换到内核模式,通常使用sysexit,iret/iretd指令。
9.内存管理:
9.1:使用intel x86的二级或多级页表机制来访问虚拟内存。处理器在执行内存访问指令时,将虚拟地址翻译成物理地址。翻译过程设计查询页目录和页表。如果页表项指示一个页面未在物理内存中。触发页面错误异常。虚拟内存管理器便将换出到磁盘上的数据或代码重新带入物理内存,供当前火雨的程序访问。当物理内存紧张,便会将不常用的页面换出到磁盘上。利用了此页表机制,实现灵活的页面交换算法。
9.2:用户模式代码通过VirtualAlloc和VirtualFree来申请释放地址范围。而内核模式的内存管理器通过平衡二叉搜索树来管理进程地址空间。
10 进程和线程管理:
10.1:进程创建通过内核函数PspCreateProcess创建一个执行体进程对象。然后初始化状态,建立一个地址空间。线程PspCreateThread创建执行体线程对象,初始化其中域,维护好新线程和宿主进程的关系。
10.2:优先级:0~31之间。最大数字获得处理器执行权越高。
11 中断和异常:
11.1:中断:处理器与外部设备打交道的重要途径;异常:处理器正常指令在执行过程中产生的一些特殊时间。需要紧急处理才能继续原来的指令流。x86处理器使用IDT(中断描述符)来处理中断和异常。
12 注册表和配置管理器:
12.1:注册表:windows用此中心存储设备作为系统的配置和管理中想。应用程序和内核通过访问注册表来读写各种设备。 内核中,windows利用配置管理器实现注册表。其等同于一个文件系统驱动程序。用户通过regedit.exe访问注册表。而软件安装程序用过调用系统api来读写注册表软件设置。 大多数注册表值类型是REG_DWORD(32位整数)、REG_BINARY(二进制数据)、REG_SZ(字符串)。
13 Windows引导过程: