您的位置:首页 > 其它

48(70)---windows internals mark david alex

2013-01-25 06:45 453 查看
根据不同的产品类型,在启动时制定一些不同的资源分配策略(如操作系统堆的大小和数量,系统工作者线程的数量,数据缓存的大小)和一些运行时策略(如内存管理器对系统和进程内存的折中,线程调度等)本书如果没有特别声明,所讲述的内容一般适用于两个版本。
实验:根据授权策略确定已启用的功能
通过软件授权,windows支持100多项特性。这些策略决定了客户端和服务端的差别,也决定了不同版本的差别。可以从www.winsiderss.com/tools/slpolicy.htm下载slpolicy来查看策略值。
策略设置以facility来组织,facility是指策略应用的模块。-f可以展示facility列表。
C:\>SlPolicy.exe -f

SlPolicy v1.05 - Show Software Licensing Policies

Copyright (C) 2008-2011 Winsider Seminars & Solutions Inc.

www.winsiderss.com

Software Licensing Facilities:

Kernel

Licensing and Activation

Core

DWM

SMB

IIS

.

.
参数中指定facility的名字,可以展示facility下的所有值。比如说,通过kernel可以查看CPU和内存限制。
C:\>SlPolicy.exe -f Kernel

SlPolicy v1.05 - Show Software Licensing Policies

Copyright (C) 2008-2011 Winsider Seminars & Solutions Inc.

www.winsiderss.com

Kernel

------

Processor Limit: 2

Maximum Memory Allowed (x86): 4096

Maximum Memory Allowed (x64): 196608

Maximum Memory Allowed (IA64): 196608

Maximum Physical Page: 4096

Addition of Physical Memory Allowed: No

Addition of Physical Memory Allowed, if virtualized: Yes

Product Information: 1

Dynamic Partitioning Supported: No

Virtual Dynamic Partitioning Supported: No

Memory Mirroring Supported: No

Native VHD Boot Supported: Yes

Bad Memory List Persistance Supported: No

Number of MUI Languages Allowed: 1000

List of Allowed Languages: EMPTY

List of Disallowed Languages: EMPTY

MUI Language SKU:

Expiration Date: 0
检查版本
windows有一个调试版,被称为检查版本。它是windows源码通过“DBG"宏定义来重新编译的。为了便于理解机器语言,windows没有执行优化。(查看windbg的帮助Debugging Performance-Optimized Code”)
检查版本主要用于帮助驱动开发者,它对系统函数调用做了更严格的监察。如果做了无效调用,系统会立刻崩溃,从而防止数据被破坏而在稍后崩溃的情况,这会导致极其隐蔽的错误。
实验:你是否在运行检查版本
windows没有提供内置工具来查看当前系统是否为检查版本。可以通过WMI的Win32_OperatingSystem 类的 “Debug"属性来确定。vbscript代码如下
strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _

("SELECT * FROM Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems

Wscript.Echo "Caption: " & objOperatingSystem.Caption

Wscript.Echo "Debug: " & objOperatingSystem.Debug

Wscript.Echo "Version: " & objOperatingSystem.Version

Next
运行如下
C:\>cscript osversion.vbs

Microsoft (R) Windows Script Host Version 5.8

Copyright (C) Microsoft Corporation. All rights reserved.

Caption: Microsoft Windows Server 2008 R2 Enterprise

Debug: False

Version: 6.1.7600
检查版本中开启了WDK中定义的ASSERT或者NT_ASSERT宏。如果条件不满足,会调用RtlAssert,它调用DbgPrintEx向调试信息缓冲区发送一个调试消息。如果当时有内核调试器连接,这个消息会自动显示,同时会询问用户怎么办(中断,忽略,种植进程,终止线程)。如果系统没有内核调试器连接,会导致蓝屏。具体情况参见WDK中的”Checked Build Assert"。
检查版本对系统管理员也是有用的,可以获取更多跟踪消息。(参考知识库314743)。这些信息也通过DbgprintEX发送到调试信息缓冲区。可以通过dbgview(www.microsoft.com/technet/sysinternals).),本地内核调试状态下的!dbgprint命令或者连接内核调试器来查看(目标系统以debug方式启动).
通过把ntoskrnl.exe和对应的HAL拷贝到普通版本,不需要安装整个检查版本,也能享用检查系统的优点。这样,驱动程序和系统代码得到了严格限制,同时其他组件也没有因为使用所有的检查版本而出现速度变慢的情况。具体参见WDK中的Installing Just the Checked Operating System and HAL。
检查版本也可以用来帮助用户态应用程序,因为检查版本下系统计时是不同的。内核有了很多验证,组件也没有优化。多线程程序大多和时间有关,通过在检查版本运行,可能会发现一些额外的bug。
关键系统组件
我们已经看过了windows的高层架构,下面来看看内部结构和核心组件的功能。2-3显示了更详尽的windows架构和组件图,注意这里也并非全部(网络没有包含,参见第7章)
下面会介绍图中的主要元素。第3章介绍了系统的主要控制机制(对象管理器,中断等),第二部分第13章,“开机和关机”介绍了系统开关机的详细过程。第4章介绍了管理机制,如注册表,服务进程,WMI。其他章节详细介绍了 进程管理,安全,io管理器,存储管理,缓存管理,文件系统(NTFS)和网络。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: