您的位置:首页 > 其它

我对内核对象的理解

2017-03-13 17:04 176 查看

何为内核:

        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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内核对象 windows