我对内核对象的理解
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的内核对象
- windows 内核对象理解
- 理解Windows OS的内核对象
- WINDOWS内核对象及其理解
- 内核对象理解
- 理解Windows OS的内核对象
- Windows内核对象的理解
- 线程与内核对象的同步
- 基类指针指向子类对象改如何理解
- 个人编程思想理解的片段(主要是面向对象的,参考了许多人的观点,还不成熟,没形成系统,请大家多指点)
- 如何在进程之间共享内核对象
- 我对面向对象设计的理解——Java接口和Java抽象类
- 《Windows核心编程》笔记1 --内核对象
- C#中,对象格式化的理解
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
- Gloomy对Windows内核的分析(对象管理器)
- 从 .NET 开发人员的角度理解 Excel 对象模型
- 理解对象/关系持久 hibernation 在行动阅读(一)
- 希望这篇文章对理解C#的对象模型有所帮助
- 跨越进程边界共享内核对象的三种方法