Apple版 - Snow Leopard:文件系统API的整合与统一【7/23】 |
|
|
|
|
|
a****a 发帖数: 5763 | 1 http://bbs.weiphone.com/read-htm-tid-501021.html
Mac OS X 10.6即所谓的Snow Leopard操作系统已正式发售。一如既往,Apple
产品光鲜的外表下凝聚了太多艰辛的劳作。ArsTechnic的John Siracusa以其独特的、
专业的、全面的视角深入翔实地体验这款最新的操作系统。
Weiphone.com将对该综述进行翻译整理并独家连载。欢迎关注。
在文件系统方面,Mac OS X历史性地提供了多种应用程序内调用文件的方式。
操作系统为传统的路径模式(例如,/Users/john/Documents/myfile)提供最底层支持。
这种方式具有简单明了的特点,但是如果作为应用程序追踪文件的唯一方式显然不是很
合适。设想一下,如果一个应用程序打开了一个文件,然后用户在编辑这个文件的时候
将其移动到了其他地方,当该程序试图保存该文件时,源文件并不在原始路径,因此程
序会在原始位置上重新创建一个新的文件——显然这不是用户期望的。
经典的Mac OS内部拥有一种很巧妙的文件描述方式,允许独立追踪文件在磁盘
上的实际位置,这种概念是通过一种由HFS/HFS+支持的、独有的ids来实现。Mac OS X
则通过FSRef数据类型来实现这一概念。(译注:HFS(Hierarchical File System,分级
文件系统)是Apple Inc.研发的一种应用在Mac OS上的文件系统。最初设计用与软盘或
硬盘,也可用于一些只读媒体譬如CD-ROM。随着Mac OS 10.6的推出,Apple放弃了对
HFS磁盘的格式化或写操作的支持,仅支持只读卷。更多信息请参考Wikipedia。HFS+也
是由Apple Inc.开发的一种文件系统,用来代替原有的HFS,同时也是iPod数码音乐播
放器上使用的格式。与HFS相比,HFS+支持更大的文件(块地址由先前的16bit扩展为
32bit),同时使用Unicode来命名文件、文件夹等。更多信息请参考Widipedia。FSRef
是一种指向现有文件对象(诸如文件、目录、卷等)的不透明数据结构,同时也是
CoreServices文件管理系统的一部分。更多信息请参考CocoaDev。)
随着互联网的发展,URL已成为引导非本地文件存储位置的重要途径。当然URL
也可以用来引导本地文件,但是这样的话URL也具有和文件路径相同的一些缺陷和问题。
这种数据类型的多样性也反映在Mac OS X文件系统的API上。有些功能使用文
件路径作为参数,有些则希望不透明引用文件,而有些只使用URL。使用这些API的程序
往往需要花费大量时间来转换文件的引用形式。
在获取文件信息时也有类似的状况。在操作系统的各个级别中都有大量的文件
系统元数据检索功能,但是其中没有一个是全面的。想要得到磁盘上的某个文件的全部
可用信息,需要许多独立的访问,而每种可能都需要不同类型的引用文件的方式作为参
数。
Apple在WWDC上举了个例子。用Leopard版的图像浏览程序Preview中打开一个
文件:
将FSRef转换为文件路径需要4次转换
将文件路径转换为FSRef需要10次转换
12次访问getattrilist()
8次访问stat()或者lstat()
4次访问open()或者close()
在Snow Leopard中,Apple采用了一种全新的、统一的、全面的文件系统API,
基于单一的数据类型:URL。但是这里指的是URL“对象”已被赋予了FSRef所需的所有
属性。
Apple之所以采用这些数据类型是缘于其不透明的属性,同时也是由于大量现
有的API正在使用它们。URL同时也是最能够适应未来发展需要的,为新的数据类型和访
问机制提供了相当大的灵活性。这种基于不透明URL类型的新的文件系统API支持高速缓
存(caching)和元数据预读取(prefetching),从而为性能的进一步提升提供了可能。
此外,还有一种新的磁盘文件表述方式称为Bookmark(不要与浏览器里的书签
儿混淆了^_^),类似于Mac OS经典的alias(译注:在Mac OS System 7及以后的系统中
,alias是一个能够表征存在于本地、远程或可移动系统上的对象(object)的文件。
alias作为一切对象的“替身”存在于文件系统中,这些对象包括文档、应用程序、文
件夹、硬盘、打印机、网络共享或可移动媒体等。alias的目的在于帮助用户管理海量
的文件,提供了多种方式读取文件而无须拷贝文件本身。在经典的Mac OS中,一个典型
的alias文件大概只有1k~5k,而在Mac OS X中,alias文件可能会相当大,譬如一个文
件夹的alias文件可能会超过500kb。有了alias文件,原始即使被移动到其他地方,链
接也不会中断。系统会在alias文件的资源分支(resource fork)中储存多种类型的信息
,譬如路径、文件ID、目录ID、文件大小等。更多信息请参考Wikipedia)。Bookmark是
在文件内部引用另一个文件的最有力的方式。同时,还可以为每一个Bookmark任意附加
元数据。例如,如果一个应用程序想持久性地保存一个“最喜爱的文件”的名单,并为
这个名单附加一些该应用程序专有的信息,那么Bookmark则是最好的选择。
上面之所以零零总总提到了这么多,并不是因为希望我所感兴趣的这部分内容
能够迎合所有用户的需要,而是想表明,Mac OS X正在逐步成长为一个真正的平台。此
前,尽管Mac OS X已经推出了很多版本,然而某种程度上说它依旧难以摆脱几位仙人的
阴影——它们是NeXTSTEP,经典的Mac OS,以及BSD Unix。当然,也可能是Apple负责
核心操作系统研发的小组被迫用更为现代的API替代先前的旧版本。至于压力源于何方
,这就无从知晓了。
当然,这些改变要真正在终端用户群体中发挥其优势(Mac应用程序编写或改动
过程中应用到这些全新的API),可能还需要很长一段时间。然而一些设计精良的程序已
经能够体现这些宝贵的优势了。例如,Leopard中的TextEdit程序能够成功地检测到一
个正在编辑的文件被移动到其他地方。
毋庸置疑,直接面对这些系统层面的变化的不是用户而是程序开发者,只有“
设计精良”的程序才能充分发挥这些优势。 优化文件系统API意味着更多的开发者希望
为广大用户提供更加友好和优异的体验。随之而来的性能方面的提升只是锦上添花(
icing on the cake),也是开发者选择在他们现有的程序中使用这些API所导致的结果。 |
|
|
|
|
|