深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 第二章 系统结构 (一)

来源:互联网 发布:php网站设计毕业论文 编辑:程序博客网 时间:2024/05/18 01:43

 

2.1 需求和设计目标

Windows NT的最初需求:

l         32

l         抢先式

l         可重入

l         支持虚拟内存

l         支持多种硬件体系结构

l         支持多处理器

l         支持分布式计算

l         向后兼容

l         符合政府和业界安全性要求

l         支持UNICODE

从软件需求的角度来说,书中列出的需求属于业务需求的范畴。不知道Windows的功能需求文档有多少页、多少条。

 

Windows NT的设计目标:

l         可扩展性

l         可移植性

l         可靠性

l         健壮性

l         兼容性

l         性能

这些设计目标实际上也是大多数大型软件系统一致的目标。

 

2.2 操作系统模型

 

2.3 总体结构

 

总体结构分为用户模式和内核模式两块。

 

体系结构

 

 

 

用户模式进程有四类:

l         系统支持进程:如logon进程,会话管理器,它们不属于Windows服务。

l         服务进程:运行Windows服务的进程,如任务调度器和假脱机服务。

l         用户应用程序:可以分为六种类型,包括Windows 32位、Windows 64位、Windows 3.1 16位、MS-DOS 16位、POSIX 32位或OS/2 32位。

l         环境子系统服务器进程:环境子系统是指WindowsPOSIXOS/2,主要是为了兼容其他操作系统。实际上到了Windows XP只有Windows子系统随产品一起发布。

 

关于子系统DLLs:书中对这部分的描述是“子系统DLL的角色是,将一个己文档化的函数转化为一些内部(未文档化的)Windows系统服务调用。”也就是说,应用程序调用的API其实是调用子系统DLL里的函数,子系统DLL再调用Native API函数,最后到达系统服务。关于Native API,第一章里曾经有所提及。

 

内核模式组件:

l         Windows执行体:基本的操作系统服务,如内存管理、进程和线程管理、安全性、I/O、网络和跨进程通信。

l         Windows内核:更低层次的系统功能,如纯种调度、中断和异常分发、多处理器同步。执行体利用这些功能实现更高层次的功能。

l         设备驱动程序:包括硬件设备驱动程序、文件系统、网络驱动程序等。

l         硬件抽象层:隔离与平台相关的硬件差异。

l         窗口和图形系统:实现了GUI函数,如窗口的处理、界面控件、绘制功能等。(WindowsGUI在内核中实现,与Linux系统有所不同。)

 

下表列出了Windows核心组件的文件名:

Filename

Components

Ntoskrnl.exe

Executive and kernel

Ntkrnlpa.exe (32-bit systems only)

Executive and kernel with support for Physical Address Extension (PAE), which allows addressing of up to 64 GB of physical memory

Hal.dll

Hardware abstraction layer

Win32k.sys

Kernel-mode part of the Windows subsystem

Ntdll.dll

Internal support functions and system service dispatch stubs to executive functions

Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll

Core Windows subsystem DLLs

 

可移植性

Windows是如何实现可移植性的,即如何能够运行在不同的硬件体系结构上。实际上,Windows2000只支持x86体系结构,Windows XPWindows Server 2003增加了三种64位处理器族的支持:Intel Intanium IA-64族、AMD x86-64族、Intel针对x8664位扩展技术。

Windows通过以下两种方法实现可移植性:

l         分层设计,低层部分负责隔离硬件相关的差异,具体为内核(包含在Ntoskrnl.exe中)和硬件抽象层(HAL,包含在Hal.dll中)。

l         Windows绝大部分代码是用C语言编写,少部分是用C++编写。只有极少数代码是用汇编语言。(什么意思?似乎是想说C语言支持可移植性,因此Windows也支持可移植性。)

 

对称多处理

l         Windows是支持对称多处理的操作系统。

l         对称多处理(SMP):操作系统和用户线程可以被调度到任何一个处理器上运行。

l         非对称多处理(ASMP):操作系统选择一个处理器来执行操作系统内核代码,其他的处理器只运行用户代码。

l         由于性能的原因,内核和HAL有多处理器版本和单处理器版本。在安装Windows时,会从安装介质上拷贝相应版本的文件到系统盘。

l         /Windows/Repair/Setup.log中记录了安装过程中哪些文件被拷贝到系统盘。

 

实验:检查正在运行的ntoskrnl版本

l         可以从事件查看器里查看启动日志,ID6009的事件是启动事件。

l         可以从注册表里查看启动的是否是PAE内核:HKLM/SYSTEM/CurrentControlSet/Control/Session Management/PhysicalAddressExtension值为1

 

可伸缩性

多处理器系统的一个关键问题是可伸缩性(scalability)。Windows的可伸缩性体现在以下方面:

l         能够在任何一个可用的处理器上运行操作系统代码,也可以同时在多个处理器上运行系统代码。

l         单个进程内的多个线程可以在不同的处理器上并行执行。

l         内核内部的细粒度同步。

l         诸如I/O完成端口之类的机制,有助于实现高效的多线程服务器。

 

Windows版本:

Windows 2000客户版本:

Windows 2000 Professional

 

Windows 2000服务器版本:

Windows 2000 Server

Windows 2000 Advanced Server

Windows 2000 Datacenter Server

 

Windows XP 版本:

Home Edition

Professional

Starter Edition

Tablet PC Edition

Media Center Edition

Embedded Edition

 

Windows Server 2003版本:

Windows Server 2003 Web Edition

Standard Edition

Small Business Server

Storage Server

Enterprise Edition

Datacenter Edition

 

客户和服务器版本之间的差异

l         支持的处理器数目不同

l         支持的处理内存不同

l         支持的并行网络连接数量不同

l         服务器版本支持分层服务

 

查询版本信息

l         在注册表里可以查询当前系统类型:HKLM/SYSTEM/CurrentControlSet/Control/ProductOptions键下的ProductTypeProductSuite两个值。

l         应用程序可以调用VerifyVersionInfo函数。

l         设备驱动程序可以调用RtGetVersion函数。

 

客户和服务器版本之间的运行时差异:

默认配置下,服务器对系统吞吐量做了优化,客户版本针对交互式响应做了优化。系统启动时决定的几项资源分配策略也不同,如操作系统堆或池的大小、内部系统辅助线程数量、高速缓存的大小。系统运行时的策略如内存管理、线程调度等也有所不同。

 

检查版本

Windows的检查版本,或称调试版本,是在编译时定义了DBG标志,用于调试和跟踪的条件代码被包含进来,并且代码优化也没有执行。因此,检查版本有利于驱动开发人员调试或系统管理人员跟踪系统信息。

注:检查版本没有提供内核映像(Ntoskrnl.exe)的单处理器版本。