——杂言:最近升级了把山狮升级到了10.9mavericks,比较抓我注意力的就是新的活动监视器。新的监视器里对统计分类很严,双击某一进程,即可跳出一个详情对话框。其中里面就有记录着Mach相关的信息,这才查到了下文。

——正文

我们得先有这么一个基本的概念:
在UNIX下,调用内核的操作被称为一个系统调用(syscall)或陷阱(trap)。程序在共有的存储中存放数据,然后会导致中断(fault),或者说是某种类型的错误。当系统第一次启动时内核处理所有的异常,所以当某个程序产生了异常,内核接管该异常,检查传递来的异常信息,然后进行处理。

以下是我查了相关的文档之后的理解:
Mach系统:基于Unix内核,将内核中的部分源码拎出来,单独抽成了一个个进程模块(用户可以自主调用)
区别:
1)unix的ipc,也就是用户进程的调度是通过中断或者系统调用发生
2)mach的用户进程调度是通过端口实现。但是,当用户需要使用某个进程时,通常会先向内核申请一个port的访问申请,然后利用ipc机制控制消息的发送,进而调度执行用户进程。

以下来自维基百科:

  Mach继承了Accent IPC的理念,然其本身却扎根于UNIX,轻而易举即可移植UNIX下的程序。Mach引入了port的概念用以表示双向的IPC,它就像UNIX下的文件一样拥有权限信息,使得其安全模型非常接近UNIX。并且,Mach使得任何进程都可以拥有一般系统中内核才有的权限,从而允许用户进程实现与硬件交互等操作。
  同UNIX一样,Mach系统也包含了一组丰富的实用工具,并保留了unix中驱动程序的概念用以硬件交互。
  与UNIX的一大区别即在于,除了操作文件,Mach更可以操作一切“任务”。这一来大量的内核代码可以转移到用户空间,使内核变得更小,从此领发了微内核的思潮。与传统的系统不同,Mach下的进程(或者说“任务”)之下是多个线程。这在今天自已屡见不鲜,可是要知道,Mach正是如此定义任务与线程关系的第一人。内核的责任从总揽大局者精简为基础设施的提供者,并为其提供有限的调度。
  Port机制在IPC中的应用该是Mach与其他传统内核的一大分野。在UNIX下,用户进程调用内核只能通过系统调用或陷入(trap)。用户进程使用一个库安排好数据的位置,然后软件触发一个中断,内核在初始化时会为所有中断设置handler,因此程序触发中断的时候,控制权就转移到了内核,在一些必要的检查之后即可得以进一步操作。
在Mach下,这就交给了IPC系统。与直接系统调用不同,这里的用户进程是先向内核申请一个port的访问许可,然后利用IPC机制向这个port发送消息。虽说发送消息的操作同样是系统调用,但Mach内核的工作形式有些不同——handler的工作可以交由其他进程实现。
  IPC消息传递机制的应用为线程和并发提供了很好的支持。进程之下是多个线程,线程作为IPC机制的单元,Mach得以在消息被处理时控制线程睡眠或唤醒。这就允许系统将进程分布于多个处理器之上,消息直接通过共享内存实现也可,必要时为其它处理器复制一份也可。在传统内核中这很难实现:系统必须保证不同处理器上的的不同程序不会在同时访问同一块内存,在Mach中则要更容易的多。不同进程的内存访问互不干涉,一切交由port通信。
  早期的IPC系统有些性能问题,必须正视。同其前辈Accent一样,Mach使用一个共享内存机制以避免消息传递中低效的内存拷贝。它利用硬件的MMU实现数据共享,只在数据被修改的时候才执行拷贝,即写时复制。
  内核也必须检查消息的正确性。Port在设计上即取了UNIX文件系统的概念,这一来就允许用户使用现成的文件系统概念即可,权限、访问许可之类就都有了。
这样设计也简化了开发。传统的程序依然可以拿来,也可以再设计。单内核系统的一个bug就得让整个系统崩溃从而不得不重启,而Mach仅仅需要重新运行出问题的那个进程。操作系统即一组程序的集合,用户得以选择其系统的功能——只需管理当前运行的进程即可。

需要了解,Mach以上的所有特性皆为跨平台而设计。如下引用一段:

与UNIX最初无视多处理器的设计不同,Mach在设计伊始即将多处理器支持纳入考虑。它的扩展性也很好,UMA还是NUMA都能很好的支持。Mach是为千种不同的处理器而设计的,移植到其他体系结构很容易。其设计的一个关键目标即为各不相同的硬件平台上,实现可移植的分布式系统。(Appendix B, Operating System Concepts)
不足自然也不少。相对容易的一个问题是port的位置不明显,在UNIX下这样的问题通过文件系统提供一个大家都知道的名字来解决。虽说这一机制也可以拿来,但是Mach在设计上又恰恰尽力使得port保持透明。缺乏表示port位置的机制,使得其扩展性大打折扣。

Mach系统的更多相关文章

  1. BSD学习(BSD系统的历史和目标)

    UNIX系统的历史 unix系统的发展历程大概经历以下几个阶段: 贝尔实验室(Bell Laboratories)阶段,该实验室发明了UNIX 加州大学伯克利分校(University of Cali ...

  2. SI - 系统 - 操作系统简述 (Operating System)

    Unix 操作系统:System V.BSD Microsoft Windows Apple Mac OS Linux FreeBSD 安装 https://jingyan.baidu.com/art ...

  3. Mac OS X 背后的故事

    Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏]   ...

  4. Unix历史及相关概念回顾

    欢迎来到Unix的世界 很多人都用了很多年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各种概念,比如GCC.GNU.BSD.POSIX.GPL等等,也大都知道一些传奇的如雷贯耳的 ...

  5. 2012高校GIS论坛

    江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...

  6. ubuntu系统(华硕笔记本)屏幕亮度用Fn控制的调节设置

    亲测配置: 系统:Linux lite 3.2 x86_64(Ubuntu其他版本可参考修改) 笔记本:华硕(asus)1201N 达到的效果: 可以正常使用Fn+F5调暗,Fn+F6调亮. 设置步骤 ...

  7. iOS 系统架构及常用框架

    1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media l ...

  8. UNIX标准化及实现之UNIX标准化、UNIX系统实现、标准和实现的关系以及ISO C标准头文件

    一.UNIX标准化 1.ISO C (International Organization for Standardization) 2.IEEE POSIX (Institue of Electri ...

  9. ARM Linux系统的时钟机制

    1. Linux下有两类时钟: 1.1 实时钟RTC 它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...

随机推荐

  1. 学习使用MarkDown

    文本采用CuteMarkEd软件编写后复制到博客园(这个软件可以实时观看html效果,也可以打印pdf,挺好使.测试比sublime装插件要简单方便) MarkDown格式文本 名称 ======== ...

  2. JSON JsonArray和JsonObject学习资料

    资料地址: http://www.json.org/json-zh.html

  3. php面向对象加载类

    php加载类: 新建php文件用驼峰法命名类名: 每个单词首字母大写,后面加.class.php表示这是php类文件.例如: ClubMember.class.php 若为纯php页面,<?ph ...

  4. 2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家 【最短路】

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 AA的欧尼酱qwb是个考古学家,有一天qwb发 ...

  5. python详细目录

    python第一篇 第二篇.初识列表字典元祖循环 第三篇.内置方法 第四篇.编码解码 列表.元祖 第五篇.数据类型 第六篇 函数 第七篇.函数二 第八篇.递归.装饰器 第九篇 正则表达式 第十篇.模块 ...

  6. Docker DNS

    从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过“容器名”通信. 方法很简单,只要在启动时用 --name 为容器命名并且连 ...

  7. java深入探究07-jdbc下

    1.BeanUtils组件 1)使用:导入commons-beanutils-1.8.3.jar核心包,日志支持包: commons-logging-1.1.3.jar 缺少日志的jar文件报错:ja ...

  8. JVM中垃圾回收算法

    GC 算法与种类 GC的概念 Garbage Collection 垃圾收集1960年 List 使用了GCJava中,GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法通过引用计算来回收垃圾使 ...

  9. pyqt5开发之俄罗斯方块

    #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This is a Tetri ...

  10. linux系统配置之单一网卡配置多个不同网段IP(centos)

    1.用root权限的用户登录CENTOS,进入network-scripts文件夹下(本步骤可以省略,与二步骤一起完成): shell命令:cd /ect/sysconfig/network-scri ...