11.7 Windows Vista的输入/输出

Windows I/O管理器提供了灵活的、可扩展的基础框架,以便有效地管理非常广泛的I/O设备和服务,支持自动的设备识别和驱动程序安装(即插即用)及用于设备和CPU的电源管理——以上均基于异步结构使得计算可以与I/O传输重叠。大约有数以十万计的设备在Windows Vista上工作。一大批常用设备甚至不需要安装驱动程序,因为Windows操作系统已附带其驱动程序。但即使如此,考虑到所有的版本,也有将近100万种不同的驱动程序在Windows Vista上运行。以下各节中,我们将探讨一些I/O相关的问题。

11.7.1 基本概念

I/O管理器与即插即用管理器紧密联系。即插即用背后的基本思想是一条可枚举总线。许多总线的设计,包括PC卡、PCI、PCI-x、AGP、USB、IEEE 1394、EIDE和SATA,都支持即插即用管理器向每个插槽发送请求,并要求每个插槽上的设备表明身份。即插即用管理器发现设备的存在以后,就为其分配硬件资源,如中断等级,找到适当的驱动程序,并加载到内存中。每个驱动程序加载时,就为其创建一个驱动程序对象(driver object)。每个设备至少分配一个设备对象。对于一些总线,如SCSI,枚举只发生在启动时间,但对于其他总线,如USB,枚举可以在任何时间发生,这就需要即插即用管理器,总线驱动程序(确实在枚举的总线),和I/O管理器之间的密切协作。

在Windows中,所有与硬件无关的程序,如文件系统、反病毒过滤器、卷管理器、网络协议栈,甚至内核服务,都是用I/O驱动程序来实现的。系统配置必须设置成能够加载这些驱动程序,因为在总线上不存在可枚举相关的设备。其他如文件系统,在需要时由特殊代码加载,例如文件系统识别器查看裸卷,以及辨别文件系统格式的时侯。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

Windows的一个有趣的特点是支持动态磁盘(dynamic disk)。这些磁盘可以跨越多个分区,或多个磁盘,甚至无需重新启动在使用中就可以重新配置。通过这种方式,逻辑卷不再被限制在一个单一的分区或磁盘内,一个单一的文件系统也可以透明地跨越多个驱动器。

从I/O到卷可被一个特殊的Windows驱动程序过滤产生卷阴影副本(Volume Shadow Copies)。过滤驱动程序创建一个可单独挂载的,并代表某一特定时间点的卷快照。为此,它会跟踪快照点后的变化。这对恢复被意外删除的文件或根据定期生成的卷快照查看文件过去的状态非常方便。

阴影副本对精确备份服务器系统也很有价值。在该系统上运行服务器应用程序,它们可以在合适的时机制作一个干净的持久备份。一旦所有的应用程序准备就绪,系统初始化卷快照,然后通知应用程序继续执行。备份由卷快照组成。这与备份期间不得不脱机相比,应用程序只是被阻塞了很短的时间。

应用程序参与快照过程,因此一旦发生故障,备份反映的是一个非常易于恢复的状态。否则,就算备份仍然有用,但抓取的状态将更像是系统崩溃时的状态。而从崩溃点恢复系统更加困难,甚至是不可能的,因为崩溃可能在应用程序执行过程的任意时刻发生。墨菲定律说,故障最有可能在最坏的时候发生,也就是说,故障可能在应用程序的数据正处于不可恢复的状态时发生。

另一方面,Windows支持异步I/O。一个线程启动一个I/O操作,然后与该I/O操作并行执行。这项功能对服务器来说特别重要。有各种不同的方法使线程可以发现该I/O操作是否已经完成。一是启动I/O操作的同时指定一个事件对象,然后等待它结束。另一种方法是指定一个队列,当I/O操作完成时,系统将一个完成事件插入到队列中。三是提供一个回调函数,I/O操作完成时供系统调用。四是在内存中开辟一块区域,当I/O操作完成时由I/O管理器更新该区域。

我们要讨论的最后一个方面,是由Windows Vista提出的I/O优先级。I/O优先级是由发起I/O操作的线程来确定的,或者也可以明确指定。共有5个优先级别,分别是:关键、高、正常、低、非常低。关键级别为内存管理器预留,以避免系统经历极端内存压力时出现死锁现象。低和非常低的优先级为后台进程所使用,例如磁盘碎片整理服务、间谍软件扫描器和桌面搜索,以免干扰正常操作。大部分I/O操作的优先级是正常级别,但是为避免小故障,多媒体应用程序也可标记它们的I/O优先级为高。多媒体应用可有选择地使用带宽预留模式获得带宽保证以访问时间敏感的文件,如音乐或视频。I/O系统将给应用程序提供最优的传输大小和显式I/O操作的数目,从而维持应用程序向I/O系统请求的带宽保证。