"Windows Internals" 1 - System Architecture

用户模式/内核模式

指的是处理器的访问模式。内核模式可以访问所有内存和处理器指令。内核模式的操作系统和驱动程序共享一个虚拟内存空间。
对虚拟内存来讲,系统空间只能由内核模式访问,用户空间在用户模式下可以访问,只读页面(包含可执行代码的页面)在任何模式下都不可写!
32位系统,未设置3GB引导选项,用户进程空间(0x00000000~0x7FFFFFFF)2G, 系统空间(0x8000000~0xFFFFFFFF) 2G
操作系统和驱动程序运行在内核模式,用户程序运行在用户模式。
当用户模式程序调用一个系统服务时,处理器捕获到该调用,然后将调用线程切换到内核模式,当系统服务完成后,操作系统将线程环境切换到用户模式,并允许调用者继续执行。

Windows Symbols设置

srv*c:\symbolCache*http://msdl.microsoft.com/download/symbols

Windows API/系统服务/内核支持函数

windows API指的是文档化的windows API,如CreateProcess,CreateFile, GetMessage等
系统服务指的是未被文档化的,在用户模式可以调用的底层服务,如NtCreateProcess(CreateProcess会调用该底层服务)
内核支持函数指的是只能在内核模式被调用的服务,如ExAllocatePool,驱动程序调用这个可以向系统堆申请内存。

总体结构

一个简化版的windows总体结构如下图所示:

image

用户模式:
1. 系统支持进程,比如登录(logon), 会话管理(session manager)等;
2. 服务进程, 比如Task Schedule等windows服务;
3. 环境子系统,windows NT发布的时候,带有三个环境子系统,windows、POSIX、OS/2, 后来就只有windows了;
4. 子系统DLL,作用是,用户程序对系统服务调用的中介,将一个文档化的函数转换为未被文档化的windows系统服务调用;

内核模式:
1. 执行体,包含基本的操作系统服务,比如内存管理、进程和线程管理、安全性、I/O、网络和跨进程通信;
2. 内核,由一组低层次的操作系统功能组成,比如thread scheduling, interrupt, exception dispatching (线程调度,中断,异常分发), 多处理器同步;
3. 设备驱动程序,比如将用户的I/O函数转换为特定的硬件设备I/O请求;
4. 硬件抽象层,把内核、驱动和执行体与平台隔离(如不同主板差异);
5. 窗口和图形,实现了GUI函数,绘制,处理窗口控件等;

Windows核心系统文件
Ntoskrnl.exe               执行体和内核;
Ntkrnlpa.exe               (PAE内核,32位系统才有) PAE物理地址扩展,支持64G内存;
Hal.dll                         硬件抽象层;
Win32k.sys                 windows子系统的内核模式部分
Ntdll.dll                       内部支持函数
Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll Window                   核心子系统Dll

可移植性:
windows对x86,AMD64,Intel Itanium IA64的支持,可移植性的实现是通过分层来实现。实现可移植性关键的模块是底层的内核Ntoskrnl.exe和HAL,与体系结构相关的功能比如线程环境切换(thread context switching)和陷阱分发(trap dispatching)在内核实现,而同样体系结构下有所差异的是在HAL中实现。
Windows绝大部分代码都是C,少部分由C++写的,那些需要与硬件设备直接通信的如中断陷阱处理(interrupt trap handler)或者对性能敏感的部分比如环境切换(context switching)用汇编代码。

对称多处器
windows是对称多处理(SMP, symmetric multiprocessing)操作系统,没有主处理器,操作系统和用户线程可以被调度到任何一个处理器上执行,所有处理器共享唯一的内存空间。
Windows支持超线程(hyperthreading) 一个物理处理器被分成多个逻辑处理器的技术。
image

你可能感兴趣的:(Architecture)