内核空间:
从职能角度看,内核空间主要包括以下部件:
1. 硬件抽象层,hardware abstraction layer,简称HAL。主要作用是隔离硬件差异性,使内核和顶层模块可以通过统一的方式来访问硬件。
2. 操作系统内核,负责线程调度、中断处理、异常分发、多处理器同步等关键任务,是操作系统最核心的部分。
3. 执行体executive,包含了操作系统的基本服务,包括内存管理、进程管理、输入输出、 络和进程间通信等。
4. 内核态驱动程序,包括文件系统和图形显示驱动程序,以及用于其他硬件的驱动程序,有些是WINDOWS自带的,有些是其他厂商开发的。是对内核功能的补充。
5. WINDOWS 子系统驱动程序Win32K.SYS,包括USER和GDI两大部分,USER负责窗口管理,用户输入等,GDI负责显示输出和各种图形操作。
6.内核支持模块,包括内核调试的KDCOM.DLL, 用于启动阶段的显示驱动BOOTVID.DLL, 检查模块完好性的DI.DLL, 支持日志功能的CLFS.SYS等。
内核文件:
从文件角度看,内核和执行体都位于一个文件,即通常所说的NT内核文件,NT内核文件有几种版本,它们是使用同一套源代码通过不同编译选项编译出来的。
1. 针对单处理器系统优化的单处理器版本
2. 可用于多处理器系统的多处理器版本
那么系统是如何决定使用哪一个版本的呢strong>
首先安装程序在安装的时候会根据系统中处理器个数,选择单处理器还是多处理器版本中的一个复制到用户系统中system32目录。如果复制的是多处理器版本,那么会将其改为与单处理器版本相同的名字。多处理器版本可以运行在单处理器系统中,只是多处理器必须有的同步措施是没必要的,也会牺牲依稀一些性能。
系统和IDLE进程:
系统进程system process和空闲进程idle process是两个特殊的进程,具有以下特征:
1. 普通的WINDOWS进程都是通过使用CreateProcess或类似的API并指定一个可执行映像文件而创建的,但这两个进程不是,它们没有对应的磁盘映像文件,是在系统启动的时候”捏造”出来的。
2。 普通的进程都有内核态和用户态两个部分,这两个只有内核态。
3. 有固定的进程ID,IDLE是0, 系统的是8或者4.
系统进程是系统内核和大多数系统线程的宿主和载体,在一个典型的系统中,系统进程中有几十个乃至上百个系统线程在工作。
可以使用!process来观察系统进程,

类似的,IDLE进程是IDLE线程的载体,IDLE线程的个数与系统中启用的处理器个数一致。当CPU没有其他线程需要执行时,CPU会执行IDLE线程。
用户空间:
用户空间是应用程序代码和各种用户态模块运行的主要场所,运行以下进程:
1. 会话管理器进程SMSS.EXE, 它是系统中第一个根据映像文件创建的进程,是在系统启动后期由执行体的初始化函数创建的。运行后,会加载和初始化WIN32子系统的内核模块,创建Win32子系统服务器进程,并创建登录进程。
2. WIndows子系统服务器进程,负责维护WINDOWS子系统的日常事务,为子系统中各个进程提供服务,比如登记进程和线程,管理控制台窗口,管理DOS程序虚拟机进程等。
3. 登录进程,负责用户登录和安全相关事务。
4. 本地安全和认证进程,负责用户身份验证。
5. 服务管理进程,负责启动和管理系统服务程序。
6. OS/2子系统和POSIX子系统服务进程,用于在WINDOWS后台运行OS/2和符合POSIX标准的程序。
7. 壳进程Shell,默认为Explorer.exe,负责显示开始菜单,任务栏和桌面图标等。
8. 用户安装的各种应用程序和服务。
NTDLL.DLL:
是沟通用户空间和内核空间的桥梁,用户空间的代码通过它调用内核空间的系统服务。同时也是操作系统内核在用户模式下的“代理”,系统会在启动阶段把它加载到内存中,并把它映射到所有用户进程的进程空间,而且是映射在相同的虚拟地址位置。当内核需要用户空间的配合时,会使用它,因为它存在于每个用户空间的固定位置。它还包含了很多支持例程,比如程序映像加载,运行时函数,异常分发和调试支持等。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!