Enterprise Just Builder

Solution for Enterprise Software Architecture

vfs

Linux和Windows设备驱动架构比较

本文将考查最为广泛使用的 Windows 和 Linux 操作系统的设备驱动架构。我们首先将展示并比较在这些操作系统中实现设备驱动所需的组件,然后讨论实现驱动程序的过程,包括对内核缓冲区执行 I/O 操作。在文章的末尾我们还将了解这些操作系统所提供的开发环境和基础工具。1

1.引言
现代操作系统一般都包含多个模块,如内存管理器、进程调度器、硬件抽象层和安全管理器等等。想进一步了解这两种操作系统的内核,这里有一些参考资料:关于 Windows 内核的细节,可翻阅 Russinovich 著的《Windows Internal》一书;而 Linux 内核则可以参考 Rusling 的《The Linux Kernel》或者 Beck et al 等合著的《Linux Kernel Internals》。对和各类型硬件设备交互来说,内核可被视为一个黑盒。那么能否将和所有已知设备交互的功能内建到内核中呢?有可能,但没有实际意义,因为这会无谓地消耗太多系统资源。

内核模块化
对于各种新设备,内核无法在创建时就预知如何与之交互。现代操作系统的内核允许通过运行时添加设备驱动模块来扩展系统功能,该模块实现的功能使得内核可以与某种特定的新设备交互。这些模块通常都会实现一个例程供内核在模块被加载时调用,此外还有例程则在模块被移除时调用。模块还会实现各种不同的例程以便实现 I/O 功能,如将数据传送到设备或从设备接收数据;同时还有例程以便向设备发送 I/O 控制指令。以上所述对 Linux 和 Windows 两种驱动架构均适用。

本文的组织结构
本论文分成下面几节:

  • 对两种驱动架构的一般介绍 (第二节)
  • 详细论述两种驱动架构的各个组件 (第三节)
  • 驱动程序范例,包括如何对内核缓冲区执行 I/O 操作(第四节)
  • 相关驱动开发环境和基础工具(第五节)

相关著作
Windows 设备驱动架构相关文档可在 Windows 驱动开发包(DDK)中找到. 此外 Walter Oney 和Chris Cant 在 《Writing Windows WDM Device Drivers》一书中对 Windows 驱动架构进行了详细介绍。Linux 设备驱动架构可以参考 Rubini 的《Linux Device Drivers》,该书可免费获取。

>>> 阅读全文

 

, , , , ,

Linux 内核简介之虚拟文件系统

虚拟文件系统又称虚拟文件系统交换器(Virual Filesystem Switch ,简称 VFS)。之所以说是“虚拟”,是因为VFS是一个抽象层,其所有数据结构都是在运行以后才建立,并在卸载时删除,磁盘上并不实际存储这些数据结构。VFS 提供了操作文件 目录和对象的统一方法,即通用文件模型。但显然如果只有 VFS,系统是无法工作的,因为这些数据结构只有和实际的文件系统,如 Ext2、Minix、VFAT 等相结合才有意义。相对的, Ext2、Minix、VFAT 等则称为“具体文件系统”。具体文件系统必须提供与 VFS 定义的结构适配的例程。所以对于基于完全不同概念的文件系统如XFS或Reiser,适配会相当困难,而如 EXT2 则会有性能提升。

Linux 内核可以支持40多种文件系统,主要分为三大类 磁盘文件系统,虚拟文件系统 如 proc 文件系统 及网络文件系统。

VFS 是 Linux 内核的一个子系统,内核中的其它子系统只与 VFS 打交道,而并不与具体文件系统发生联系。对具体文件系统来说,VFS 是一个管理者,而对内核的其它子系统来说,VFS 是它们与具体文件系统的接口,整个 Linux 中文件系统的逻辑关系如图1-1所示:

VFS 提供了一个统一的接口(实际上就是 file_operatoin 数据结构,稍后介绍)。一个具体文件系统要想为 Linux 所支持,就必须按该接口编写自己的操作函数,从而将细节对内核其它子系统隐藏起来。因此对内核其它子系统以及运行在操作系统之上的用户程序而言,所有的文件系统都是透明的。实际上,要支持一种新的文件系统,主要任务就是实现这些接口函数。

总的来看 VFS 主要作用有:

>>> 阅读全文

 

, ,

了解Linux操作系统 (三) Linux文件系统

文章评分:

作为开源操作系统,Linux 一个很大优势就是支持多种文件系统。现代 Linux 内核几乎支持计算机系统曾使用过每一款文件系统,从基本的FAT到诸如JFS(Journaling File System)之类的高性能文件系统。不过,因为Ext2、Ext3和ReiserFS是大多数 Linux 发行版的原生文件系统(ReiserFS只有使用在Novell SUSE Linux上才能获得商业支持),所以在本文中我们主要了解这些文件系统的有关特性,其它鲜少使用的文件系统只略作说明。关于文件系统和硬盘子系统,参见 “调优硬盘子系统”

虚拟文件系统 VFS
虚拟文件系统VFS它是内核的一个子系统,提供了一个通用文件系统模型,该模型囊括了所能见到的文件系统常用功能和行为,并为应用程序提供一致性的文件系统接口,安装的所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。

虚拟文件系统位于用户进程与各种Linux文件系统之间,作为一个抽象接口层,它提供用于访问文件系统对象的通用对象模型(如i-node、文件对象、页缓存、目录条目等等)和方法,对于用户进程来说,它屏蔽了文件系统之间的差异。用户进程不需要知道使用的是哪个文件系统,也不需要了解不同的文件系统需要呼叫哪个系统调用。

图14 阐明了VFS的概念。

>>> 阅读全文

 

, , ,