Windows操作系统的分层

一、层次结构
        Windows从总体上分为内核模式(Kernel Model)和用户模式(User Model)。谈到操作系统的内核模式和用户模式,一般会和CPU的特权层联系起来。CPU有多个特权层,例如,Intel的386CPU就有4个特权层,从第0层到第3层。其中第0层的特权最高,也就是可以执行任意代码,第3层特权最低,只能执行有限代码。
        Windows将内核模式运行在CPU的第0层,将用户模式运行在CPU的第3层。内核模式下运行的都是核心代码,这些代码是安全的,且不会受到恶意的攻击。而运行在用户模式下的应用程序是最不安全且容易受到攻击的,所以应用程序权限是受到限制的。如果应用程序进行一些诸如直接访问物理内存的动作,需要向内核模式下组件提出请求。
         Windows操作系统每层有若干组件组成,其作为一个整体,它的运行高度依赖于上层组件对下层组件的调用。每层组件都有固定的接口供上层调用,高层如果要进行更改权限操作需要向底层提出请求。结构如图所示:

Windows操作系统的分层_第1张图片

        Windows操作系统被划分为用户模式和内核模式两个部分。用户模式下,应用程序调用其对应的子系统中的API。这些子系统除了win32,还有POSIX、OS/2等,它们为了兼容16位应用程序或其他系统应用程序而设计,都是通过调用win32子系统来实现的,但很少被用到。Win32子系统将API函数转化为Native API。系统版本的变化只是Native API的改变,并没有修改Win32,即没有改变win32 API函数的名称和参数,实现了对应用程序的兼容。在Native API中的函数调用被转化为系统服务函数调用并进入内核模式,并进一步向下传递实现相应功能。

二、从应用程序到驱动程序
        根据上面所述Windows操作性的分层特性可知,应用程序对硬件操作的请求是从上而下一层层被交给硬件的。Windows的设计者为简化对不同设备的操作,将所有的设备都当作普通文件看待,用操作文件的方法来操作设备。这一点与Linux有很大相似之处。
        常用操作有Creatfile(),CloseHandle(),Readfile(),Writefile(),DeviceIoControl()等。以Creatfile()为例描述硬件操作过程。
Windows操作系统的分层_第2张图片
        应用程序调用Createfile() API后,Createfile()会在Native API中调用NtCreatefile()。NtCreatefile()会进入内核模式调用系统服务函数,该函数通过I/O管理器创建I/O请求包(I/O request package,IRP)并传递给驱动程序。IRP为Windows驱动中重要数据结构。驱动程序根据IRP判断操作类型并调用相应的派遣函数(同Linux中的接口函数)针对硬件抽象层进行操作。由于硬件抽象层由Windows操作系统实现且屏蔽了底层硬件的细节,驱动开发者无需关心硬件细节而只需清除如何与硬件抽象层交互即可。

(本文是将相关材料整理后写出的,来源:张帆. Windows驱动开发技术详解[M]. 北京:电子工业出版社,2008)

你可能感兴趣的:(Windows,Programming)