Electronic Joint Business

Solution for E-Business

Windows 内部探秘:对象和对象管理器

内核需要维护有关众多资源的大量数据,如进程、线程、文件等等,为此内核使用了“内核数据结构”,即对象。从物理上看:每个内核对象只是内核分配的一个内存块,并只能给内核访问。从逻辑上看:该内存块是个数据结构,其数据成员维持有关该对象的信息。 在计算机术语中,“对象” 就是一个(或一组)数据结构以及定义于其上的若干操作,换句话说,想要对该数据结构有所动作,就必须通过定义的操作,别无它途。计算机历史上,“对象”这个概念出现于 Unix 之后,所以在 Unix 以及 Linux 中并没有明确的“对象”概念,Unix 把所有设备当成特殊文件,这已经是超越以往操作系统的一次飞跃,但是微软在设计 Windows 的时候,“对象”这个概念已经相当成熟,因此在设计中运用“对象”这个概念就成为顺理成章的事,所以这两种操作系统在设计理念上的显著不同在于:Unix 把设备看成是特殊文件, 而 Windows 把设备和文件都看成是对象。 对象和普通数据结构之间最根本的区别在于:对象的内部结构是被隐藏的,除了通过对象服务,否则无法直接读取或者改变对象的内部数据。请注意:为了兼顾可移植性,大部分操作系统代码都是用 C 语言编写的,因此在 Windows 内核中对象的“操作”与其数据结构的结合是松散的,并不具有封装、继承、多态等这些基本要素。 如果你编写 Windows 应用程序,你可能会遇到进程、线程、文件或者事件,这些都是对象的一些例子。反映到 Windows 内核中,任何一个进程都是进程对象类型的一个实例,文件是文件对象类型的一个实例,如此等等。这些对象又是以内核创建并管理的一些底层对象为基础的。这些顶层对象被称为“管理层对象 Executive Object”,底层的对象为“核心层对象 Kernel Object”。 核心层对象 核心层对象是在内核中实现的一些更加基础的对象,它实现了操作系统底层原语与机制。核心层对象对用户态代码是不可见的,只能在内核代码被创建与使用,核心层对象提供了操作系统的基础功能与机制比如同步、中断等等,在核心层对象之上再构建出管理层对象。每个管理层对象都包含一个或者多个核心层对象。 除了线程调度之外,核心层对象不涉及其他操作系统策略如安全、资源配额等等,Windows 把这些策略留给了管理层,体现了机制与策略分离的思想。 核心层对象可以分为两大类: 控制对象(Control Objects):控制内核的操作,但不影响线程调度,包括原始进程、 APC 对象、DPC 对象、profile对象、power notify对象以及 I/O 管理器使用的一些对象,比如中断对象等等。 调度对象(Dispatcher Objects):实现了各种同步功能的对象,包括内核线程、互斥体、事件、内核事件对、信号量、定时器等等。 每个调度对象有两种状态:“有信号”或“无信号”,内核模式线程借此状态来实现同步的功能。一旦某个调度对象的状态变为“有信号”,内核就会将等待该对象的线程的状态从“等待”变为“就绪”。1 注意:虽然 Scheduling 和 Dispatching 中文都是“调度”的意思,但二者在计算机上各有所指。2 管理层对象 管理层的设计目的是为每个 Windows 子系统的上层应用程序或者内核驱动程序提供可直接调用的功能和语义。管理层主要提供以下函数: […]

,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.