60(82)---windows internals 6 mark david alex

实验:查看KPCR和KPRCB
通过内核调试器的!pcr和!prcb可以分别查看KPCR和KPRCB
默认情况下展示处理器0的信息,加上参数可以查看任意cpu的信息(!prc 2 查看第3个cpu)。在作者的机器上,输出如下
lkd> !pcr
KPCR for Processor 0 at 81d09800:
Major 1 Minor 1
NtTib.ExceptionList: 9b31ca3c
NtTib.StackBase: 00000000
NtTib.StackLimit: 00000000
NtTib.SubSystemTib: 80150000
NtTib.Version: 1c47209e
NtTib.UserPointer: 00000001
NtTib.SelfTib: 7ffde000
SelfPcr: 81d09800
Prcb: 81d09920
Irql: 00000002
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 82fb8400
GDT: 82fb8000
TSS: 80150000
CurrentThread: 86d317e8
NextThread: 00000000
IdleThread: 81d0d640
DpcQueue:
lkd> !prcb
PRCB for Processor 0 at 81d09920:
Current IRQL -- 0
Threads-- Current 86d317e8 Next 00000000 Idle 81d0d640
Number 0 SetMember 1
Interrupt Count -- 294ccce0
Times -- Dpc 0002a87f Interrupt 00010b87
Kernel 026270a1 User 00140e5e
可以用dt来查看_KPCR 和 _KPRCB。查看cpu速度的方法如下
lkd> dt nt!_KPRCB 81d09920 MHz
+0x3c4 MHz : 0xbb4
lkd> ? bb4
Evaluate expression: 2996 = 00000bb4
这台机器的CPU是3ghz。
硬件支持
内核的一个主要工作是隔离执行体和驱动程序,使它们不需要知道不同硬件平台的差异,如中断处理,异常处理,多处理器同步。
对于这些硬件相关的功能,内核设计也尽量最大化公共代码。内核支持一组接口,这些接口在不同的架构上是可移植并且语义相同。大多数实现这些接口的代码在不同架构上都是相同的。
有些接口在不同平台上是不一样的,或者部分用架构相关的代码来实现。这些架构无关的代码可以在任何机器上被调用,接口的语义是不变的,不管实现细节是否改变。一些内核接口(如自旋锁例程,第三章介绍)在HAL(下节介绍)中实现,因为他们在同一架构的不同系统上会有变化。
内核也包含一部分x86相关的接口来支持老的MS-DOS程序。x86接口是不可移植的,在其他架构上,他们不能被调用。x86特定的代码,支持操作GDT和LDT,这些只在x86上才有的。
内核中架构相关的代码,如支持翻译缓冲区和CPU 缓存的接口。在不同的架构上,需要不同的代码,因为缓存的实现机制不一样。
另一个例子是上下文切换。线程选择和上下文切换是一样的(保存之前的上下文,加载新的上下文并运行),有很多架构不同在不同的处理器上。上下文根据处理器而有变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值