Wilfredo Sanchez,Apple Computer Mac OS是在20世纪80年代初开发的,围绕着提供了最佳用户体验的想法。 Apple成功地修建了Mac OS,为个人计算机获得了最佳的操作系统:Mac OS设置了现代图形用户识别现在建模的标准。在轮胎上的Mac OS的主要替代品是Microsoft' s dos,它在IBM PC上运行。 Mac OS能够将DOS通过视觉模型提供的功能进行拓扑,该功能对于Play用户更容易理解DOS和其他系统所采用的TheCommand驱动的接口,如asat' s unix。与底层硬件紧密集成,允许麦金托斯平台扩展到TheSoftware的经验,并进入机器的实际管理,用力播放设备支持和"从框中开箱和#34;支持许多人。 Macintosh LED作为Desktoppublishing等技术的方式。
Unix已经从不同的目标集中演变。 Unix在学术和工程环境中已经过分,通常使用onh-end服务器和工作站。 U. C. Berkeley和其他学术机构的开发人员已经使用UNIX作为许多研究的测试平台,这导致了TCP / IP等重要计算技术。 UNIX机器通常是由Manyy用户共享的,需要支持各个用户帐户,该用户帐户可以在同一台计算机上同时使用。 UNIX' S早期exposureto所有这些进步导致深入了解各种系统如何互动,导致相对强大和模块化系统。 UNIX系统作为基础,并继续支持今天的基础设施。
unix衍生物如sun' s solaris,cal' s bsd unix和laterlinux已经生长为作为网络服务器的关键角色服务。 DOS是由Windows替换的,其中体育了一些由Mac OS这样的桌面开创的UserInterface的功能,以及unix背后的潜在想法,如PremptimeMultittitastastastastAstasking。虽然UNIX系统仍然是可靠性和可扩展性的领先优势,而Mac OS继续推送用户界面,Windows已成功缩小了Sputareas的差距。
Mac OS X是苹果公司'努力创建一个最佳的流产系统,该系统直接利用了用户体验竞技场和建立了良好的BSD的良好的进步和体验。 Mac OS X从名为Darwin的BSD基金会开始。 ondarwin我们从Mac OS构建了我们CallCarbon的编程工具包,这又使我们能够在新用户界面上层叠为Aqua。 Carbon还为我们现有的应用基础提供了直接的过渡族。我们还提供了一个工具包的可可,这是一个面向对象的API,它来自下一个' sopenstep。
这使得有趣的系统架构。 DeedResult是一种系统,可以是今天的可靠服务器平台威士忌,以托管大批量网站,文件服务,网球道和工程计算服务,同时也可以使用家用计算机平台。这是一个dauntingtask,因为服务器平台目标规定了一定程度的复杂性(高安全性,性能调整参数,各种网络服务器等),而对于大多数家庭用户,SimpliciteOvers其他问题。
UNIX和Mac OS彼此独立地发展,并且在一个系统中制作的基本假设,导致另一个系统中的无数。可用文件系统,网络协议和用户/系统模型的功能是深刻的,通常以无法纠正的方式而不改变系统组件的分组。此外,人们以非常不同的方式使用和系统,并期望不同的行为。
本文将讨论在组合这些不同环境的过程中出现的一些问题,这些问题和用于在麦斯科斯播放群体中运作良好的解决方案的过程中的一个问题。我们有许多这样的问题,以及您的兴趣,我们将访问以下两个关键区域:文件系统和多重支持。给出的例子不会进入大量细节,但提供了足够的信息,以使读者提出该问题的想法和我们在解决方案的尝试。
文件系统的使用展示了UNIX和MAC环境之间的实现和许可问题。我们' ll startwith实现问题,这是明显的材料。
Mac OS中使用的文件系统是Mac OS扩展文件系统,也称为HFS +及其前任Mac OS标准文件系统或HFS(分层文件系统)。两个文件系统都在Mac OS X中播出,尽管HFS是支持,但仅提供了载体,并鼓励用户使用HFS + for NewVolumes。
HFS +卷格式与HFS卷格式不同,幸运的是UNIX样式元数据的存储(例如,所有者和模式位)。这使得能够在Darwinen环境中使用HFS +更容易。但是,一些不兼容仍然存在。
HFS +是保留的案例,但不区分大小写的文件系统。 Chatis,记住文件名的情况,但是对不同案例的文件名称将产生相同的文件,并且在任何给定目录中不允许在任何情况下超越的文件名。相比之下,典型的UnixFilesystems的敏感性。在Proced Project开始的开始之前,它在当前的Mac OS X工作之前,我们陷入了困境,这将是一个大问题。后来,当我们在达尔文中的HFS +作为主要文件系统中,我们发现了这种行为产生的令人惊讶的问题,以及我们所做的那些才能微不足道的解决问题。我们尚未遇到该问题的问题,需要复杂的解决方案。
另一个显而易见的问题是HFS +(冒号,':')和UFS(斜线,' / ' ;).这也意味着HFS +文件名可能包含斜杠字符没有冒号,而对相反的是UFS文件名。虽然它涉及转换弦乐而易于解决。内核中的HFS +实现在内核和#39; S VFS层ConvertScolon中以抄袭和写入磁盘格式时的斜杠,反之亦然。所以在磁盘上,分隔符是一个冒号,但在vfslayer(因此,它以上的任何东西和内核,例如libc)它' s斜线。但是,传统的Mac OS工具包期望冒号,所以在BSD层上方,核心碳工具包又是另一个传播。结果是碳应用看到冒号,否则无用的人看到斜线。这可以在包含Coloncharacters的文件名的罕见情况下创建一个用户粘性奇妙,该文件名称为碳应用程序作为斜杠字符,而是将BSD程序和Cocoa应用程序作为冒号。
HFS +缺少硬链接的体积格式的支持,UFS的标准规范。最初,尝试创建一个文件的链接,从而产生A"不支持和#34;错误。我们讨论了一些" 80%"解决方案,例如创建符号链接,但符号链接的语义显着不同。对于故障排除,由于与这些语义差异有关的问题,因此优选在链接创建时间下失败。 TheProblear是有大量的软件,突破硬链接创建失败,如果不能使用硬链接,其中一些软件需要Beredesign。为了适应该软件,我们现在通过创建A"内核级别"符号链接只能由HFS +文件系统解释并解释的符号链接。由于缺乏以特定格式的支持,这是必要的。当从内核上方观看时,由此产生的行为与硬链接的行为非常相似,尽管它们相比相对相比。
另一方面,UFS不支持文件ID,这是HFS +的非法。文件ID是对文件的持久句柄,可以用来以类似于其中使用Pathsin UNIX的方式访问文件。关于文件ID的好处是,一旦获得了Fileis的ID,可以将文件重命名或移动到磁盘ANDSTILL上的任何位置,并由ID的持有者打开,并且文件访问比路径的访问更快,如它避免了路径查找。 MacOS别名与符号链接类似,添加了找到文件的替代方法。因为别名包括Thetarget文件' s ID,移动目标文件不会破坏别名,因为alit是一个符号链接。
最大的问题之一是缺少复杂的文件支持最重要的UNIX文件系统。 HFS +允许文件有多个数据汇流:一个,数据叉子包含实际文件数据,AndAnother,资源叉子包含其他资源数据。 (在Filesystem级别,这只是一个发生在Sharea名称的两个文件。)卷格式也允许任意名为FileAttributes(类似的支持是在UDF,NFSv4)中,尽管既不是MacOS 9也不是Mac OS X支持使用FileFormat中的此功能。
这通常是Mac Os和过去其他平台之间的兼容性问题的源。通过internet传输文件时,通常需要以诸如macbinary的格式编码,这将两个流组合成一个,以便它可以由Web或FTP服务器提供。 (根据需要在Mac OS上运行的服务器。)
有几个提案如何呈现复杂的文件ToBSD客户端,该客户端打开()。一个是将Thetwo Streams合并为Appledouble格式。这具有涉及复杂文件中所有数据的优势,并且CP等程序可以正常工作。然后问题是,如果operwere在emacs中打开一个复杂的c源文件,它们不仅看到了Program文本,还看到了一些奇怪的编码信息,以及通过碳应用置于那里的源泉数据。具有此方案的FATALPROBRABRABROBRABROBROBE文件数据(ENCODINGINFO)由文件系统创建,而ISN' t真正的FILEDATA的一部分,因此不可编辑。解决方案的非损失方面是吸引我们的是,但并发症变得太大了。
本机制将数据叉子呈现给BSD客户端的Afile按名称打开。如果需要资源叉程,它可以通过将已知字符串附加到文件路径来eread。例如和#34; foo / bar"为您提供文件栏的数据,但是#34; foo / bar / .namedfork /资源"将为您提供ResourceFork for Bar。 (实际附加的字符串可能会更改。)请注意,“文件”不某种方式作为目录;它不是lishable,stat()调用仍然将其作为文件显示。此机制可以带到具有复杂文件的其他文件系统,例如UDF。 (Udfalso允许属性用于目录。)
该计划中的缺陷也是如此。大多数UNIX软件都将仅对文件的数据叉,所以" CP Foo Bar"将导出一个新的文件栏,该栏缺少foo(ifthery的资源数据)。备份和存档软件也可能丢失数据。 WESTILL将文件与DON' TSUPPORT复杂文件的系统共享问题。 Mac OS X将继续支持ComplexFiles,但我们正在远离其使用,以提高在异构环境中运行的无可能性。
我们没有探索的第三种选项是展示两个叉子完全单独的文件。这类似于UNIX上的某些AppleShareImplementation,它将Unix文件系统导出为Anappleshare卷。当文件" Foo"由麦克斯客户端写的,从UNIX方面看,还有另一个文件(通常在类似于&#34的公约中确定; .foo.resource"或" .resources / foo>&# 34;)包含资源数据。如果服务器也是Unix客户端(包括本地访问),通常是这种情况,文件往往会在Unixside中移动,并且资源文件留在旧位置。结果是有效的资源数据丢失以及某种方式以某种方式管理(定期清理)这些解剖资源文件。 HFS +文件系统可以通过神奇地移动Theresource文件以及数据来解决这个问题,但是这种排序的奇怪行为来产生错误,而这种方法似乎可以提供优于替代方案的优势,但它被删除。
有趣的是,碳团队已经陷入了恰好这个问题Onufs,在那里没有明显的存储资源叉子,炭的实际实施使用类似的解决方案作为UNIX Appleshare服务器的Ioneypaly。
其他文件系统问题更加微妙,并且是由于Mac OS和UNIX系统所做的差异化的预期,以及兼容细节。
其中一个示例是Mac OS的删除语义,与UNIX的不同链接语义相比。在Mac OS中,如果您尝试删除其他人已打开的Afile,则删除失败。这可确保其他应用程序使用您的文件,在该应用程序下不会删除该文件。 UNIX通过前进和播放链接来实现这一目标,但是在它打开时,文件将继续存在(尽管不再是打开该文件的方法)。有任何方法都有要为任一方法制作,一些Mac OS程序relyon Mac OS行为(有时使用文件用作信号量),而许多UNIX程序则希望取消链接始终成功(一个技巧Inthe Unix World是打开文件用于写作,然后将其解释为SOA以获取到Scribbleon的文件系统备份内存的私有位置。
值得注意的是,差异是行为是部分Dueto相应文件系统的实现。在UFS中,Meta-Data与文件' s inode存储,并且inodes从文件数据中储存。在HFS +中,文件元数据与文件数据一起存储;没有inode。因此,在HFS +中删除文件意味着删除对文件的所有访问。 UFS中的unlinkbehavior自然地来自数据和inodes的分离;只要它使用它,您只需删除文件即可保持inode。另一方面,由于其存储方式铺设出来,可以真正快速搜索具有给定名称的文件中的文件。这里有趣的是,实施细节扫描导致思想和延伸,这可能不是理论设计的一部分。
为了处理不同的语义,将删除()系统调用添加到BSD中,以便我们具有可用的两个语义。纯版,UNIX程序将调用Unlink()和CarbalApplications将调用delete()。如果一个BSD ProgramsUnlinked,则取消链接将始终为碳应用程序仍然可以在关闭时丢失该文件。这是可以接受的,因为目标是允许碳化碳编程继续彼此合作,并将BSDPrograms Don' T通常删除属于碳计划的文件,索托软件往往会按预期工作。
我们还应该意识到这里的主要目标是使用这些不同的软件堆栈正确运行,威尔威尔有数百万的Classic Mac OS用户,这些用户需要带有新Mac OS X用户的Toshare文件和媒体。权力的一个示例是HFS +卷上的UNIX权限。 Mac OS 9不会读写UNIX META数据;虽然HFS +支持它,Mac OS 9将完全无知位。它可以接受,直到您在Mac OS 9和Mac OS X Systems之间开始移动Adisk(或者如果您是双引导您的系统以及较小程度,则在Mac OS X中运行Classicen环境)。
如果您希望执行权限为强制划衡系统,则这可能是一个问题,但如果您正在移交某人的磁盘或BootingInto另一个操作系统,则会最终才能失望。但是,在MacOS 9中创建的文件时,会发生更容感的情况,并在Mac OS X中稍后在稍后看到。文件没有UNIX元数据集,因此没有权限或所有者。用户0(root)和组0(滚轮)是合理的默认值,但0000的一致模式几乎肯定不是用户愿望。幸运的是,我们能够区分"没有元数据集"模式和所有者信息的零值。我们在此案例中所做的是所有者,组和模式作为某种合理的默认值,这是通过检查文件系统已安装的目录上的目录上的权限来确定。请注意,除非有人明确设置它们,否则实际的Permissonson磁盘仍保持未设置;卸载具有不同默认值的卸载将实现MuchFiles的模式。这允许灵活管理某些磁盘默认的默认模块,而不是其他磁盘默认为比其他磁盘更新。
如前所述,也支持HFS。这主要是为了传输数据和从可移动媒体和来自格式化HFS格式化的硬盘驱动器卷的拖延。这里找到了进一步的帧生,但这类似于Linux中的DOS FileSystemSupport,并且对于文件传输,HFS呈现了几个问题。因为HFS不存储模式位,所以使用默认值,以便在HFS +文件中用于未命令模式的方式相同的方式。这里的重要新问题是传输到ANHFS卷的文件将失去权限信息。
在内核之上,UNIX中存在文件名约定,哪个讨论为各种UNIX软件中的限制和错误。 UFSallows文件名中的任何可打印字符,但许多UNIX shellscripts和程序都有包含"特殊"字符,如空格和标点符号的疑问。在Mac OS中,用户在系统中避免了此限制,并且不应在Mac OS X中向其中留下它们。一个很好的例子是make命令,它使用空格作为文件namedelimiter,使得难以生产程序输出叫做,forexample,NetscapeNavigator®。没有理由为什么是这种情况,但它是一个不幸的历史神节,Unix如何长大。
如上所述,UNIX对文件路径具有沉重的依赖。许多这样的例子是Bourne shell:如果Shprogram不存在/箱,系统赢得了' terpoot。虽然Mac OS不受此类问题的免疫,但它允许用户重新定位或重命名为此重要的项目作为Th依此展示文件夹。这是一个特别重要的问题,因为我们使用BSD作为核心系统软件,但我们不希望我们的用户了解BSD如何工作。理想情况下,典型的macintosh用户甚至不知道BSD在那里。作为&#34这样的文件夹的徽章; USR"和#34; ETC"在磁盘上是尴尬的,我们隐藏在应用程序级别的这些目录和他们的文本,以避免混淆,因为它们在那里并且无法移动或删除。一个想法是将系统文件插入到Mac OS样式系统文件夹中,并使该文件夹对用户不透明。这要求管理系统软件的其他方法,而不是允许用户在此处戳戳,我们仍然存在标准UNIX路径在引导卷的根级别存在的问题。这是我们积极努力改善的静脉内部。
原始Mac OS具有一个精彩的功能,即应用程序是一个文件中的应用程序(虽然有时使用该文件的两个叉子)。因此,您可以将一个图标从安装软盘上拖到您的磁盘或其他软盘上。您可以将图标拖到垃圾桶,并摆脱该程序。多年来,我们已经进入了一个有几个文件来处理的模型。大多数应用程序文件都保存在一个文件夹中,但是也将各种文件放入零件中
......