MACH详细资料大全

Mach是一个由卡内基梅隆大学开发的用于支持作业系统研究的作业系统核心,为了用于作业系统之研究,特别是在分散式与并行运算上。是最早实现微核心作业系统的例子之一,是许多其它相似的项目的标准。

基本介绍 外文名 :Mach 属性 :作业系统核心 Mach (kernel),mach 命令,Mach 马赫,简介,游戏,人名, Mach (kernel) Mach是一个由卡内基梅隆大学开发的用于支持作业系统研究的作业系统核心。

该项目在1985年启动,并且在1994年因为mach3.0的显著失败而告终。但是mach却是一个真正的微核。mach被开发成了UNIX中BSD的替代核心,所以没必要再开发设计他的衍生系统。 其他还有许多人继续Mach的研究包括犹他大学的Mach 4。Mach的开发是为了取代BSD的UNIX核心,所以是许多新的作业系统的设计基础。Mach的研究到至今似乎是退出,虽然有许多商业化作业系统,如NEXTSTEP与OPENSTEP,特别是Mac OS X(使用XNU核心)都是使用Mach或其派生系统。Mach的虚拟记忆体(VM)系统也被BSD的开发者用于CSRG,并出现在BSD派生的系统中,如FreeBSD。Mac OS X与FreeBSD并未保留Mach首倡的微核心结构,除了Mac OS X继续提供微核心于内部处理通信以及应用程式直接控制。 Mach继承卡内基梅隆大学的Aent kernel,Mach项目主导人理察·拉希德曾于微软的研究部门担任高级人员,后成为微软副总裁。另一Mach开发者阿瓦德斯·特凡尼安(Avie Tevanian)曾是NeXT首席程式设计师,之后担任苹果电脑软体技术部门主管直到2006年。 现在,一个名为GNU Mach的计画与GNU HURD联系紧密。Debian GNU/Hurd就是基于GNU Mach的。 今天,虽然mach及其衍生品在许多商业作业系统被广泛使用,但是对mach的进一步实验研究已经结束。例如,OPENSTEP NeXTSTEP,最明显的是Mac OS X作业系统核心,他使用XNU其中包括一个早期(非微核)mach作为主要组件。 历史 Mach概念

由于设计Mach的目的是作为一个“不速之客”替代传统的UNIX核心,对Mach的讨论重点是mach和UNIX的区别。由于马赫的目的是作为一个“降”替代传统的UNIX核心,这个讨论的重点是从UNIX的区别马赫。UNIX“把一切事物作为档案”的理念在现代系统上可能还没有普及,即使已经有一些系统,比如贝尔实验室的Plan 9,尝试了这种方式。然而,许多开发商感叹传统理念对于灵活性考虑的损失。寻求另一个层面的虚拟化应该也能使系统一如往常地工作。

在UNIX 中最关键的抽象是管(pipe)的概念。我们需要的是一个在一个更一般的水平上的管(pipe)的概念,从而使程式之间能传递各种各样的信息。这样的系统使用进程间通信(inter-process communication,IPC):一个管概念(pipe-like)的系统能在两个程式间交换信息,但不同于类似档案的信息。虽然有许多系统,包括大多数Unix系统中,在早先其仅作为单任务使用的专用库时就已经增加了不同的IPC实现。

卡内基-梅隆大学在Aent Kernel项目中开始沿着这些想法进行了实验,所使用的是基于***享记忆体的 IPC系统。Aent是一个许多功能的纯粹的实验性质的系统,以一种专有的方式在一段时间内伴随着不断变化的研究兴趣而不断发展。此外,雅绅特的用处是有限的,由于Aent不兼容UNIX,因此对于Aent的研究是受限的,当时UNIX已经是在几乎所有的作业系统研究的标准。最后,Aent和硬体平台是紧耦合的,而在20世纪80年代初,新的平台爆炸性的出现,其中许多是大规模并行性质的.

Mach开始主要是作为一个明确定义的,基于UNIX的,高度可移植的成果。其包含以下的一般概念:

1“ 任务 “是由一组对象组成的为”执行绪“提供运行能力的系统资源组成的

2“ 执行绪 “是一个单一的执行单元,存在于一个任务的上下文和***享任务的资源

3“ 连线埠 “是一个受保护的任务之间讯息伫列,任务之间的通信任务拥有每个连线埠的传送和接收的权利

4“ “讯息 “是数据对象的集合,他们只能被传送到连线埠,而不是特定的任务或执行绪

虽然马赫的开发是基于Aent的IPC的概念,但其使系统更加地类似于UNIX,甚至可以直接运行很少或根本没有修改的UNIX程式。要做到这一点,马赫引入了一个连线埠(port)的概念,其每个端点的双向IPC。连线埠如UNIX下的档案一样有安全性和许可权,允许类似UNIX的保护模式在其操作平台上套用。此外,,为了让用户程式如和硬体互动般处理任务,马赫允许任何程式处理任务。

和UNIX作业系统一样,Mach再次成为主要实用工具的集合。与UNIX相比,马赫保持了处理硬体驱动程式的概念。因此,所有的硬体的驱动程式都必须包含在微核心中。其他基于硬体抽象层或exokernels的架构能将驱动程式移出微核心。

和UNIX的主要区别是,Mach不是处理档案的实用工具,他们更多的用于处理任何“任务”。更多作业系统的代码被出核心放入到用户空间,从而产生了更小的核心及其崛起式的发展。与传统系统不同的是,在Mach中,程式或“任务”可以包含的多个执行绪。虽然在现代系统中,多执行绪是常见的,但马赫是第一个以多执行绪方式处理任务的系统。

连线埠概念和IPC的使用也许是马赫和传统的核心之间最根本的区别。在UNIX下,调用核心的操作被称为一个系统调用(syscall)或陷阱(trap)。程式在***有的存储中存放数据,然后会导致中断(fault),或者说是某种类型的错误。当系统第一次启动时核心处理所有的异常,所以当某个程式产生了异常,核心接管该异常,检查传递来的异常信息,然后进行处理。

IPC系统率先被使用于Mach核心。为了调用系统的功能,程式会向核心申请一个连线埠通道,然后使用IPC系统将讯息传送到该连线埠。

使用IPC传递讯息受益于执行绪和并发性。由于任务是由运用IPC方法的多执行绪组成的,马赫能冻结和解冻执行绪从而同时处理讯息。这使得系统能分布在多个处理器上,可以直接使用***享记忆体,或添加代码到另一个处理器。在传统的核心中这是很难实现的:系统必须确保不同的程式没有从不同的处理器尝试写入到相同的记忆体。在Mach中,这是定义良好,易于实现的:连线埠是一个良好的方法。

由于IPC系统最初的性能问题,所以一些战略发展的影响较小。和它的前辈Aent一样,Mach用一个单一的***享记忆体机制将讯息从一个程式传递到另一个程式。由于物理性地复制信息太慢,所以,马赫运用本机的存储器管理单元(MMU),快速在程式之间传递数据。只有当数据必须要求物理复制时,这个过程被称为写时复制(copy-on-write)的。

讯息也由核心进行有效性检查,以避免错误的数据使某个系统程式崩溃。连线埠(Port)是UNIX档案系统概念下严谨的模型。这允许用户利用现有的档案系统导航概念找到连线埠,就像在档案系统中分配权利和许可权一样。

这样的系统的发展会变得更容易。代码不仅能使用现有的工具在传统的系统中工作,也以相同的方式被运行,调试及关闭。在monokernel中新的代码中的错误可能导致整个机器需要重新启动,而在Mach下,这将只需要重新启动程式。此外,用户可以定制系统,添加或排除他们需要的功能。由于作业系统是一个简单的程式集合,他们通过运行或关闭程式从而添加或删除部分内容。

最后,Mach的所有这些功能都是被刻意设计的以实现中立的平台的作用。但无疑Mach有许多缺点。其中一个相对一般的缺陷是还不清楚如何找到连线埠。在UNIX下,解决这个问题是程式设计师同达成一致划出一些“众所周知”在档案系统中的位置,各司其职。当Mach中的连线埠也以同样的方法处理这个问题时,在Mach核心下的作业系统被认为是更为流畅的,由于管道(port)的良好性能。如果没有某种机制来查找连线埠和他们所代表的服务,这种灵活性将丢失。

名称由来

据Tevanian说,MACH,源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避著路上的泥水坑,一边讨论著新核心的事,Tevanian开玩笑地建议他们的新微核命名为MUCK,意为“多用户通信核心”(Multi-User Communication Kernel)或“多通用通讯核心”(Multiprocessor Universal Communication Kernel)。而一个义大利同事错将MUCK发错音为MACH后,拉希德觉的不错并采用了MACH。

发展

Mach最初是作为附加支持编写的代码直接进入现有的4.2 BSD核心,允许团队工作在系统很早之前完成。工作开始于语音IPC /连线埠,并转移到其他作业系统的关键部分,任务和执行绪和虚拟记忆体。为完成部分的各个部分被重写,BSD系统调用Mach,一个变化到4.3 BSD也在这个过程。

在1986年之前Mach系统被完成以便能够独立在DEC VAX上运行。虽然几乎没有实用价值,制造一个微核心的目标还是实现了。不久之后,借鉴学习Mach的IBM PC / RT上以及以SunMicrosystems68030为基础的工作站,证明了这个系统的可移植性。到1987年,包括 Encore Multimax和Sequent Balancemachines,它们检验了Mach在多处理器系统上运行的能力。那一年公开发行了Mach第一版,并在第二年发布了第二版。

在这段时间内,一个“真正的”微核心的目的并没有被实现。这些早期的Mach的版本包括了大多数基于核心的4.3BSD——一个被称作POE伺服器的系统,从而导致了核心要远远大于它在UNIX中的时候。然而这个想法将UNIX层从核心移动到用户空间,使它能够更轻易的工作甚至被完全地取代。不幸的是,性能成为了一个主要的问题,同时人们为了解决这一问题也做了许多构造上的改变来。笨重的UNIX的许可问题也在折磨著研究者们。所以这个早期的为提供一个非许可类的类似于UNIX的系统环境而做的努力顺利的进入Mach的进一步发展。

由此产生的Mach3在1990年发布,并且引起了当时很多人的兴趣。一个小的团队已经建立了Mach并且将它移植到一些平台上,其中包括为老式核心造成严重问题的复杂的多核处理器。这在当时的商业市场上产生了相当大的反响,其中一些公司正在纠结是否要改变硬体平台。如果现有的系统能够在Mach上面运行,改变下面的平台似乎会变得容易。

当开放软体基金会(OSF)宣布他们将在Mach 2.5上运行未来的OSF/1版本的时候,Mach的知名度有了一个重要的提高,并且同时也在研究Mach3。Mach 2.5 还被 NeXTSTEP系统以及许多商业的多核处理器供应商所选择。Mach 3 使许多人努力将其他的系统部分移植到微核上,包括IBM的Workplace OS 以及苹果公司努力建造一个跨平台版本的MAC OS。

性能问题

Mach原本是打算要取代经典的UNIX核心,基于这个原因,也包含了许多UNIX-like 的想法。例如,MACH使用了许可权管理和基于UNIX档案系统的安全系统。由于核心(运行在核心空间 kernel-space)对其他作业系统的伺服器和软体拥有特权,而这可能可能引发故障或恶意程式传送命令导致系统损坏,出于这个原因核心会检查每条讯息的有效性。另外,大多数作业系统的功能是在用户空间user-space运行,这就意味着,需要为核心提供某种方式以为这些计画授予额外的许可权,例如在硬体上运行。

Mach的一些更高级功能也是基于这个相同的IPC机制。例如,Mach能够轻松支持多处理器的机器。对于传统核心,大量的工作需要进行时,使其重入或中断 ,在不同的处理器上运行的程式可以同时被核心调用。而在Mach核心中,位的作业系统能像任何其他程式一样,独立地运行在任何处理器上,因为它们是被隔离在伺服器中的。虽然在理论上Mach核心也必须是可重入的,在实际中,这是不是一个问题,因为它的回响时间是如此之快,它可以简单地等待服务请求转。Mach还包括一个伺服器,不仅可以在程式之间将讯息转发,甚至是在网路上,这在20世纪80年代末和90年代初是一个蓬勃发展的领域。

不幸的是,将IPC用于几乎所有的任务对性能产生了严重影响。于1997年进行的硬体基准测试表明,基于UNIX的Mach 3.0单台伺服器实现,比原生UNIX慢了约50%。研究显示,绝大多数的性能使用,73%是由于IPC的开销引起的,这是在单一大型伺服器提供作业系统的系统上的结果,而在较小的伺服器上问题只会变得更糟。用它实现一个集合的伺服器更是根本不可能的目标。

尽管进行了许多努力,以改善Mach,Mach-like微核心的性能,到了20世纪90年代中期,大部分早期对MACH的浓厚的兴趣已经消失殆尽。基于IPC的作业系统的概念死掉了,这个想法本身有着缺陷。事实上,对确切性能问题的进一步研究揭示了一系列有趣的事实。其中之一是,IPC本身并不是问题所在:尽管有一些开销与需要来支持它的存储器映射,但是,这仅仅增加了少量的时间需求。其余80%的时间,是由于核心上运行的讯息产生的额外的任务。其中主要是连线埠的许可权检查和信息的有效性。在486 DX-50的基准测试中,标准的UNIX系统平均使用了21 微秒完成,而相同的操作Mach IPC平均花费114微秒。其中与硬体相关的仅18微秒,其余的是Mach核心上运行的程式的各种讯息。在什么也不做的情况下,一个完整的BSD系统调用需要大约40微秒的时间,而在用户空间Mach系统下不足500微秒。

Mach第一次严格地套用是在2.x版本,性能比传统的单片作业系统慢,可能高达25%,但是并未令人担忧,=,因为该系统还提供支持多处理器支持以及具备较高的可移植性。许多人认为这是一个预期内可接受的成本开销。Mach 3 版本时,试图移动作业系统的大部分到用户空间,但是开销仍然较高:在一个MIPS R3000上进心的基准测试表明Mach和UNIX之间存在着极大地效能差异,因某些工作负载中能高达67%。

例如,获取系统时间的操作就涉及一个IPC调用维持系统时钟的用户空间服务。调用者第一次进入核心,引起上下文切换和记忆体映射。核心随后会检查调用者的访问许可权,以及该讯息是否有效。如果是,还有另外一个上下文切换和记忆体映射以完成对用户空间服务的调用。过程中必须重复返回结果,总***达4次的上下文切换和记忆体映射,再加上两个讯息验证。这样的开销又迅速结合更复杂的往往是通过多台伺服器代码路径的服务。

这不是唯一的性能问题的根源。另一个集中的问题发生在试记忆体降低而分页必须进行时如何正确处理操作记忆体。在传统的单片作业系统核心部分,核心的各部分调用的分页区域都十分明确,使其能够调整调用避开将要使用的分页部分。在Mach,这是不可能的,因为核心并不知道作业系统真正包括了些什么。因此,作为替代,他们不得不使用了一个单一的一刀切的方案作为性能问题解决方案。Mach 3试图通过提供一个简单的分页机解决这个问题,依靠用户空间的分页机具有更好的针对性。但事实证明,这没有什么效果。在实践中,它的任何好处都被昂贵的IPC调用开销所抹灭了。

其它影响性能的问题在于Mach的多处理器支持。从20世纪80年代中期到90年代初,商用CPU的性能约以60%的速度增长,但记忆体读取速度只有7%的增长。这意味着访问记忆体的成本在此期间大大增加,因为基于映射记忆体的MACH程式,任何“高速快取未命中”都会导致IPC调用变慢。

无论Mach的方法有着怎样的优点,其现实世界中的性能表现是不能被接受的。当其团队也得出同样的结果后,早期在Mach上热情很快就消失了。在很短的里,很多的发社区似乎就得出了这样的结论:以IPC为基础的作业系统的整个概念有着天生的缺陷。

潜在的解决方案

对于Mach 3系统来说IPC的开销是一个主要的问题。然而,一个多伺服器的作业系统的概念仍然是有希望的,但是,这仍需要进行一些研究。开发人员需要很小心的不从伺服器到伺服器的将代码分离成块。例如,大多数网路代码会被放在一个单独的伺服器里,从而最大限度地减少IPC正常的网路任务。大多数开发人员坚持用原先的一个单一的大型伺服器提供作业系统功能的POE概念。为了简化开发,他们允许作业系统伺服器在用户空间或者核心空间上运行。这也使他们在用户空间发展并且能够拥有原先Mach思想的所有优势,然后再把调试伺服器移动到核心空间里面从而得到更好的性能表现。一些作业系统至今还在沿用这个被称为“co-location”的思想,其中包括 Lites, MkLinux, OSF/1 和NeXTSTEP/OPENSTEP/Mac OS X. Chorus microkernel通过运用内置的机制允许伺服器被提升进核心空间,这也成为了一个基本系统的特色。

Mach 4 试图解决这些问题,这次运用了更彻底的升级。特别地,人们发现,程式代码通常是不可写的,由于边复制边写是罕见的,因而是如此潜在的冲击。因此它使得别人认为在IPC的程式间不需要详细的规划记忆体,而是移动那些被用在程式中当地空间的程式代码。由此产生了“shuttles”的概念,并且看上去性能也有所提升。然而,开发者们继续在一个半可用状态的系统上工作。Mach 4 同时也介绍了内置co-location的说法,使它成为核心本身的一个部分。

到了20世纪90年代中期,微核系统上的工作大部分都结束了,尽管市场普遍相信所有的现代作业系统在90年代结束之前会成为基于微核的系统。剩下的唯一使用到Mach 核心的地方是在苹果的Mac OS X以及IOS上面,它们运行在经过重大修改的Mach 3 核心之上。

第二代微核心

进一步的分析表明,IPC的性能问题并没有那么明显。回想一下,一个系统调用的单侧在BSD下花了20μs ,然而在同样的系统中Mach用了114μs 。在这114μs中,11μs是由于上下文的转换,这个与BSD是相同的。额外的18μs被MMU用来映射用户空间和核心空间之间的信息。这个只增加了31μs,比传统的系统调用用时久,但是并不是很久。

其余的多数的实际问题,是由于核心的执行任务,例如为连线埠的访问许可权检查信息。虽然这似乎是一个重要的安全问题,但是,实际上它只在UNIX-like系统中起作用。例如,一个在手机或者机器人上运行的单用户作业系统也许不需要任何这些特色,同时这确实是那种能使Mach的pick-and-choose 作业系统达到最大价值的系统。同样当记忆体被另一个只在系统有超过一个地址空间时才真正起作用的作业系统移动时Mach产生了问题。DOS和早期的Mac OS有一个单独的大的地址空间由所有的程式所***享,所以在这些系统中映射并没有提供任何好处。

这些认识带来了一系列的第二代微核心,更进一步的减少了系统的复杂性并且几乎代替了用户空间中所有的功能。例如,L4核心(版本2)只包括七个系统调用,使用了12k的记忆体,而Mach3包括月140个功能,使用了约330k的记忆体。在L4中一个486DX-50的IPC调用只花了5μs,比在同样系统中的运行的UNIX系统调用快超过20倍。当然这个忽略了L4没有解决全县管理或者安全问题的事实,他们可以根据他们的需要选择尽可能多或尽可能少的开销。

L4潜在的性能提升被用户空间应用程式经常需要提供许多由核心提供的功能这个事实所证明。为了测试‘end-to-end’的性能,co-located 代码上的MkLinux被拿来与在用户空间上运行的L4连线埠作比较。与Mach的15%比较吗,L4增加了大约5%–10%的开销。

这些更新的微核心整体上振兴了这个产业,同时诸如GNU Hurd之类的计画最终获得了新的关注。 mach 命令 用途 显示当前主机的处理器类型。 语法 mach 描述 mach 命令显示系统处理器的体系结构。 退出状态 0 命令已经成功完成。 >0 发生错误。 示例 1. 要显示当前主机的处理器类型,请按以下方式使用 mach 命令: mach 档案 /usr/bin/mach 包含 System V mach 命令。 mach3软体 在很多控制领域很流行 Mach 马赫 简介 马赫数--Mach Number是以奥地利物理学家马赫命名的用来定义物体速度与音速之比的值,即音速倍数。其中又有细分多种马赫数,如飞行器在空中飞行使用的飞行马赫数、气流速度之气流马赫数、复杂流场中某点流速之局部马赫数等等。 一般标注方法为Mach或者M后加上数值,例如: Mach2表示两马赫,即两倍音速;M3.1则是3.1马赫;M5+表示五马赫以上. 游戏 在飞行游戏中,例如著名的鹰击长空. 鹰击长空里有一个CE5,即Campaign Expert战役专家任务5,任务要求是在Mach2+飞行达到一小时. 由于音速是声音的速度,受很多因素影响,在不同环境下速度不一致,也就是没有固定值. 一般来讲默认音速为340米/秒,换算过来就是1224千米/小时,那么两马赫就是2448KM/H, 但是专业空军仪器换算中,M2应该是2450.16公里/小时, 所以想要完成任务,最后是保持在2450km/h以上,或者MPH在1523以上. 人名 著名的奥地利物理学家、哲学家、音乐家--恩斯特·马赫(Ernst Mach,1838-1916)