我理解之windows的内核对象

作为一个程序员,其实任何东西我都想从程序的角度去思考它.因此,在我看来,内核对象就是一个结构体,一个struct.但它又不是普通的结构体,说它不普通是因为:

    1.它是由内核维护的.

    2.它只能被运行在内核模式下的代码访问,从写代码的角度而言,就是只能通过windows提供的API来访问它.

我们编写一个程序时,有时需要通过一些全局的变量来达到各个函数共享的目的,其实内核对象在一定程度上就相当于这个全局变量,把操作系统看作一个主程序,操作系统内核通过管理这些内核对象来使各个进程正常运作.综上,内核系统的作用有以下几个:

    (1)为系统资源提供可识别的名字。
    (2)在进程之间共享资源和数据。
    (3)保护资源不会被未经认可的代码访问。
    (4)跟踪对象的引用情况。这使得系统知道什么时候一个对象不再被使用了,以便释放

要更好地理解内核对象的作用,就需要多动手编写WINDOWS方面的多线程程序,个人认为这样理解起来更容易些

下面通过一个内核管理的线程内核对象来进一步理解内核对象的意义和作用:

  线程内核对象就是一个包含了线程状态信息的数据结构。每一次对CreateThread 函数的成功调用,系统都会在内部为新的线程分配一个内核对象。系统提供的管理线程的函数其实就是依靠访问线程内核对象来实现管理的。下面列出了这个结构的基本成员:
           线程内核对象(Thread Kernel Object)
   CONTEXT (上下文,即寄存器的状态)
   EAX
   EBX
   其他CPU 寄存器
   Usage Count 使用计数(2)
   Suspend Count 暂停次数(1)
   Exit Code 退出代码(STILL_ACTIVE)
   Signaled 是否受信(FALSE)

创建线程内核对象的时候,系统要对它的各个成员进行初始化,上面括号里的值就是各个成员的初始值.系统就是通过这个内核对象的各个成员来管理线各的.

  下面通过讲述上下文和使用计数这两个成员的作用来说明内核对象的作用

1.线程上下文CONTEXT
每个线程都有他自己的一组CPU 寄存器,称为线程的上下文。这组寄存器的值保存在一
个CONTEXT 结构里,反映了该线程上次运行时CPU 寄存器的状态。
2.使用计数Usage Count
Usage Count 成员记录了线程内核对象的使用计数,这个计数说明了此内核对象被打开的
次数。线程内核对象的存在与Usage Count 的值息息相关,当这个值是0 的时候,系统就认为
已经没有任何进程在引用此内核对象了,于是线程内核对象就要从内存中撤销。

 

通过以上分析,可以很容易理解内核对象就是一个系统定义的用来管理各种资源的使系统正常运行的数据结构而已.

   

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值