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

根据不同的产品类型,在启动时制定一些不同的资源分配策略(如操作系统堆的大小和数量,系统工作者线程的数量,数据缓存的大小)和一些运行时策略(如内存管理器对系统和进程内存的折中,线程调度等)本书如果没有特别声明,所讲述的内容一般适用于两个版本。
实验:根据授权策略确定已启用的功能
通过软件授权,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)和网络。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值