Linux设备驱动 (2)

继续


用户空间和内核空间



模块执行在所谓的“内核空间”上,而应用程序则在“用户空间”上执行。这个概念基于操作系统理论。从实践上说,操作系统的作用,是提供给程序一个关于计算机硬件的一致的视图。另外,操作系统还必须负责应用程序无关的操作并保护资源遭到未授权的访问。这样的任务只有当CPU将操作系统从一般应用程序中分离出来,并保护其特权的时候才可能实现。



所有的现代处理器都具有这样的能力。方法是CPU在内部实现不同的操作形态(或级别)。级别有不同的作用,有些操作在低级别上不被允许,程序代码要从一个级别转到另一个仅有通过有限种方法。Unix系统充分的利用了这种硬件特性,使用两种级别。所有现代的处理器至少都具有两个保护级别,有些(比如x86系列)有更多。当多个级别同时存在时,将使用最高和最低的级别。在Unix里,内核执行在最高级别上(也称为管理员模式),在那里所有的事情都是被允许的,而应用程序执行在最低的级别(也称为用户模式),处理器会控制对硬件的直接访问和对内存的未授权访问。



我们通常将执行模式称为“内核空间”和“用户空间”,这些词汇不仅仅表示两种模式下不同的特权级别,也表示他们拥有自己的不同的内存映射--它们独自的地址空间。



当应用程序提交了一个系统调用,或者被一个硬件中断暂停执行时,Unix会从用户空间的执行转到内核空间。处理系统调用的内核代码会工作在进程上下文中,代表调用进程执行操作,并且能够访问进程地址空间的数据。而处理中断的内核代码则和用户进程是异步执行的,他和任何特定的进程都没有关联。



模块的作用是扩展内核的功能,模块的代码运行在内核空间,并负责之前提到的这两种任务:某些模块的函数作为系统调用的一部分执行,某些则负责处理中断。



コメント

人気の投稿