内核理论基础
1. 权限级别
系统内核层:ring0,应用层:ring3
CPU存在4个级别由高到底:R0(内核)、R1(驱动)、R2(驱动)、R3(应用)
操作系统的设计者为了简单,并未使用R1,R2
XP系统体系结构图:
2. 内存空间布局
x86系统内存布局图:
x86系统上最大寻址空间为4GB
Windows内存共包含4个部分:NULL空间,应用层空间,非法区域,内核空间
x64系统内存布局图:
x64系统上最大寻址空间理论上为16PB(2^64次方),但根本用不完
Windows最多支持2^44次方寻址空间,16TB
Linux最多支持2^64次方寻址空间,256TB
3. Windows与内核启动过程
包含以下阶段:
-
CPU启动自检阶段
打开电源时,CPU从BIOS中载入自检指令,执行这些指令进行自检操作,同时在屏幕上显示信息 -
初始化启动阶段
自检完成后,根据CMOS的设置,BIOS加载启动盘,将主引导记录MBR中的引导代码载入内存,并执行。MBR中的引导代码搜索MBR中的分区表,找出活动分区,将第一个扇区的中的引导代码载入内存,第一个扇区的中的引导代码检测当前使用的文件系统,查找ntldr文件,找到之后启动它,此后BIOS将控制权交给ntldr,由ntldr完成操作系统的启动工作(Windows 7使用的是Bootmgr) -
Boot加载阶段
对ntldr进行如下设置
①设置内存模式。如果是x86处理器,并且是32位系统,则设置“32-bit flat memory mode”;如果是x64处理器,并且是64位操作系统,则设置为64位内存模式
②启动一个简单的文件系统,以定位boot.ini、ntoskrnl、Hal等启动文件
③读取boot.ini文件 -
检测和配置硬件阶段
这个阶段会检查和配置一些硬件设备,如系统固件、总线和适配器、显示适配器、键盘、通信端口、磁盘、输入设备、并口、ISA总线上运行的设备等 -
内核加载阶段
ntldr将首先加载Windows内核Ntoskrnl.exe和硬件抽象层HAL。HAL会对硬件底层的特征进行隔离,并为操作系统提供统一的调用接口。接下来ntldr从注册表的HKEY_LOCAL_MACHINE\System\CurrentControlSet
键下读取这台机器安装的驱动程序,然后依次加载驱动程序。初始化底层设备驱动,在注册表的
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
键下查找”Start“键的值为0和1的设备驱动
Strat键的值可以为0、1、2、3、4数值越小,启动越早
0:内核刚刚初始化,此时加载的都是和系统核心有关的重要驱动程序
1:稍微晚一点
2:从登录界面出现时开始加载
3:在需要的时候手动加载
4:禁止架子啊 -
Windows会话管理启动
当驱动程序加载完成后,内核会启动会话管理器(smss.exe),是操作系统第一个创建的用户模式进程,作用如下:- 创建系统环境变量
- 加载win32k.sys,它是Windows子系统的内核模式部分
- 启动csrss.exe,它是Windows子系统的用户模式部分
- 启动winlogon.exe
- 创建虚拟内存页面文件
- 执行上次系统重启前未完成的重命名工作(PendingFileRename)
-
登录阶段
Windows子系统启动的winlogon.exe系统服务提供对Windows用户的登录和注销的支持- 启动服务子系统(services.exe),也叫服务控制器SCM
- 启动本地安全授权LSA过程(lsass.exe)
- 显示登录界面
Tips:Windows 7和Windows xp启动过程的区别?
- BIOS通过自检后,将MBR载入内存并执行,引导代码栈到启动管理器Bootmgr
- Bootmgr寻找活动分区boot文件夹中的启动配置数据BCD文件,读取并组成相应语言的启动菜单,然后再屏幕上显示多操作系统选择画面
- 选取Windows 7后,Bootmgr就会读取操作系统文件windows\system32\winload.exe,并将控制权交给winload.exe
- winload.exe加载Windows 7的内核、硬件、服务等,然后加载桌面等信息,从而启动整个Windows 7系统
Tips:BIOS+MBR与UEFI+GPT的区别?
BIOS+MBR是传统的启动方式,磁盘逻辑地址LEA是32位的,最多支持2TB的磁盘。
UEFI是BIOS的替换方案,本身相当于一个微型的操作系统,磁盘逻辑地址LEA是64位的。UEFI具有文件系统的能力,能够直接读取FAT分区中的文件。UEFI下不需要主引导记录,不需要活动分区,不需要任何工具,只要将安装文件复制到一个FAT32分区或U盘中,通过这个分区或U盘即可安装和启动Windows
直接在UEFI环境下运行的程序以.efi结尾
4. Windows R0与R3通信
本章后面的部分目前无法看懂,需要看完《windows内核编程》才能看懂