我对内核对象的理解

何为内核:

        1、内核是操作系统最基本的部分。
        2、内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础, 它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
        3、现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来, 使之常驻内存,并对他们进行保护。    
        也就是说:内核是操作系统进行管理的一块区域(内存),对于应用程序是不可见的。

内核对象

说完内核,再说内核对象就容易理解了:
       内核对象 就是在操作系统内核中进行资源分配和管理的一种数据结构。
       应用程序是无法在其管理的内存中找到这些资源并改变的。
       也就是说内核对象不是属于某个进程的,而是属于操作系统的。

内核对内核对象的维护:

   一个内核对象可能同时被多个进程调用,操作系统内核为了维护内核对象,引入引用计数机制,当一个进程创建内核对象时,其引用计数为1,其他进程引用时,引用计数+1, 到进程调用CloseHandle时,引用计数-1, 当引用计数为0时,内核会销毁该内核对象资源。

内核对象的创建:

  虽然内核对象是属于操作系统的,到操作系统为我们提供的一些API, 我们可以在应用程序中调用系统给我们创建内核对象的API, 来让操作系统在内核中给我们创建此内核对象。(在32位系统中,内核对象的内容被保存在0x80000000至0xFFFFFFFF的这个内核地址空间中)

  例如:

           CreateProcess//创建进程内核对象

           CreateEvent//创建Event事件内核对象

           int socket(int domain, int type, int protocol) //创建socket套接字内核对象
    这些对象的具体数据结构,用户是不知道的,API只给用户返回一个int型的 句柄(文件描述符)。

进程句柄表

进程句柄表(Handle Table) 参见: http://www.cnblogs.com/5iedu/p/4649809.html
           进程句柄表(Handle Table)是进程维护其使用的内核对象索引的表。当一个进程被初始化时,系统要为他分配一个句柄表
           其数据结构由:索引值、该索引对应对象指针等组成
          当通过系统API创建内核对象后,会返回一个句柄(索引),就是该内核对象在句柄表中的索引(注意因句柄表可能会分层,所以该句柄最后两位(共32位)表示该对象在句柄表中所在的层数,因此如果要得到实际的索引值, 必将该句柄值右移2位,见《Windows内核原理与实现·潘爱民》,p131图3.4)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值