关于 Mac OS X 内核技术来源

Mach(Multiple Asynchronously Communication Hosts) 是一个由卡内基梅隆大学开发的操作系统内核,Mach的开发是为了取代BSD的UNIX核心。

Mach 内核的设计目标之一是要兼容 Unix 系统。
当初他们的设想是,真正的操作系统可以作为一个用户态的程序跑在 Mach 内核上。
Mach 内核开发的时候以 4.3BSD 为基础进行开发。
他们在论文上称这是”为 UNIX 开发的一个新内核”。
Mach 内核开源且无任何 licensing 约束。这意味着任何人都可以免费发行 Mach 内核。

嫌弃传统 UNIX 内核什么都干,过于臃肿。所以 Mark 的设计目标是要取代 UNIX 内核,让 UNIX 跑在 Mach 内核的用户空间里。这个特性在 Mach 3.0 真正实现了。但是众所周知 Mach 内核并不提供文件系统和网络实现,所以依然需要和 UNIX 做大量的数据交换。这种交换的方式就是通过 Mach 的 IPC 通信。而让几乎所有进程都在两个空间之间做 IPC 通信是非常低效的。

所以 NEXTSTEP 系统修改了 Mach 内核的实现,让 Mach 和 BSD 都跑在同样的内核空间上,所谓的混合内核 XNU 出现了,同时让用户空间发起的文件、网络请求等本来要通过 IPC 调用的接口都改成 system call。

Mach 继承卡内基梅隆大学的 Accent kernel,Mach 项目主导人理查德·拉希德曾于微软的研究部门担任高级人员,后成为微软副总裁。另一位 Mach 开发者阿瓦德斯·特凡尼安(Avie Tevanian)曾是 NeXT 首席程序员,之后担任苹果电脑软件技术部门主管直到2006年。

该项目在1985年启动,并且在1994年因为 mach3.0 的显著失败而告终。但是 Mach 却是一个真正的微核。GNU Mach 就是 Mach 的延续,现在 GNU Mach的计划与GNU HURD联系紧密。Debian GNU/Hurd 就是基于 GNU Mach 的。

史蒂夫·乔布斯(Steve Jobs) 1985 年创办的 NeXT 团队使用了卡耐基梅隆大学的 Mach 内核和部分 BSD 代码库来创建 NeXTSTEP 操作系统。

苹果计算机在 1997 年 2 月将 NeXT 买下,NeXTSTEP 成为 Mac OS X 的基础。

Apple 的工程师们开始使用 NeXTSTEP 4.2 作为新 Macintosh OS 的起点,并开始了为期三年的研发,将 Unix 核心的 OS 转变为一般消费者使用的作业系统。此计画的第一个专案的代号为“Rhapsody”。

1999 年 3 月发布 Mac OS X Server 1.0,这是第一个、也是唯一一个商业版本的 Rhapsody,系统核心技术则来自 NeXTSTEP。

2001 年 3 月 24 日,Apple 开始发售第一个正式版本的 Mac OS X v 10.0,由 Yellow Box 为基础开发的“Cocoa”API、图形显示技术“Quartz”以及其他来自 NeXT 的技术,最后与 Rhapsody 整合得到 Mac OS X v 10.0,Rhapsody 演化为 OS X

Darwin 是一种 类 Unix 的操作系统,整合数种的技术,包含开放源码的 XNU 核心 和 Mach 微核心,操作系统的服务和 userland 工具是以 4.4BSD,特别是以 FreeBSD 为基础。Darwin 软件本身来自于 NeXT 公司开发的 NextStep 操作系统的 BSD 层。

2005年5月苹果公司关闭了基于 Intel 架构的 Darwin 的源代码。苹果公司同时宣布,他们将继续完全开放基于PowerPC架构的Darwin的源代码。

Mac OS X 的内核中含有早期 Mach 的组件,Mac OS X 使用混合内核 XNU,XNU 是将卡耐基梅隆大学开发的 Mach 内核和 FreeBSD 组件整合而成的混合内核。

NeXT 不久后释出了NEXTSTEP系统程序开发中用到的API,NeXT将这个组API命名为 OPENSTEP。随后NeXT在1993年中止了硬件业务,转为专注于 OPENSTEP 的软件市场开发上。这里有疑问,到底是命名为 OpenStep 还是 OPENSTEP?

OpenStep 是一组面向对象的 API。1993年,NeXT 和 Sun 公司联合发布的一个针对 NEXTSTEP 系统的标准规范。OpenStep 在自由软件基金会的实现名称称为 GNUStep。此外还有一个 Linux 版本,命名为 LinuxSTEP。

OPENSTEP 是由 NeXT 开发的一个 OpenStep 的特殊实现。OPENSTEP 作为 NeXT 的主要作业系统产品,直到 1997 年被苹果电脑收购。接下来,OPENSTEP 与现存的 Mac OS 的相关技术相结合,产生了 Mac OS X。

NEXTSTEP(官方写法很多种,一开始叫做 NextStep、NeXTstep、 NeXTSTEP,最后才叫做 NEXTSTEP。)是由 NeXT 所开发的操作系统。

NEXTSTEP 是操作系统,又它衍生了一组面向对象的 API,是一种操作系统的标准规范,叫 OpenStep。

OPENSTEP 是操作系统,它是一个 OpenStep 的特殊实现。

Mac OS X 就是奠基于 OPENSTEP 和 NEXTSTEP 的基础上。

XNU 是内核,由 Mark 和 BSD 系统内核混合构建而成。XNU 最早出现在 NEXTSTEP 中,后来的 OPENSTEP 也是以 XNU 为内核。

Darwin 是操作系统,而且是最为底层的操作系统,称为核心操作系统,由 XNU 和其它苹果技术及相关工具构建而成。Darwin 是在 Mac OS X 中才出现的。

Darwin 首次出现在 1999 发布的 Mac OS X Server 1.0 中,以 XNU 为核心,但是把 4.4BSD 更新成了 FreeBSD 的代码,把 Mark 更新成了OSFMK 的 Mach 3.0 和部分来自 University of Utah 的 Mach 4 项目。

早期苹果甚至提供了 Darwin 安装包,可以作为一个独立系统安装到 x86 和 PowerPC 机器上。不过现在只开放源代码了。

严格来说现在我们接触到的 macOS 内核,官方叫做 Darwin,它的核心是 XNU,可以独立安装。严格意义上 XNU 和 Darwin 并不完全相等,较真地讲 XNU 只是 Mach/BSD 部分。在前面的文章里我基本上把 Darwin 和 XNU 当做同义词,这并不严谨。但是根据我的考证,目前 Darwin, XNU 和 macOS Kernel 基本等同于一个意思,只要读者朋友不会产生歧义即可。

Rhapsody 基于 NeXT 的 OPENSTEP 开发,可以认为是 Mac OS X 的过渡产品。

2007 年 10 月 26 日正式发布的 Mac OS X v10.5 (Leopard) 得到 The Open Group 的“Single UNIX Specification”认证,成为正式的 UNIX。

下面这张图非常好呈现了 Mac OS X 各种技术层的关系:

在这里插入图片描述

下图是 Mac OS X 的衍生关系图:
在这里插入图片描述

最后:Mac OS X 其实就是 Unix 的衍生操作系统,属于 BSD 这个分支

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用C语言编程画出图形,C语言图形编程(六) -图形程序设计实例:零件图形的绘制...

实例:一个零件图形的绘制有一个零件图,如下:对图3-1中的零件图形,如何根据它所标注的尺寸,按照适当的顺序有步聚地画出该图形,这首先要分析此零件图形的几何关系,了解构成这个图形各线段的性质&…

mfc怎么获取进程的线程数_Python多线程获取小米应用商店App,看看我是怎么做到的

一、【项目背景】小米应用商店给用户发现最好的安卓应用和游戏,安全可靠,可是要下载东西要一个一个的搜索太麻烦了。而且速度并不是很快。今天小编就教大家利用多线程爬取小米应用商店的游戏模块,快速获取我们想要的软件安装包。二、【项目目标】目标 &a…

Linux Distribution Timeline for 2010(Linux 2010 年发行版时间线/族谱/发展图)

此图来自维基百科(wikimedia),具体地址为:https://commons.wikimedia.org/wiki/File:Linux_Distribution_Timeline.svg?uselangzh-hans#filehistory

git强制推送_Git 常用命令

Git 常用命令总结1. GIT 工作区add commitworking directory ------- index(stage) ---------- HEAD | | | | | | 工作目录 暂存区 …

golang 泛型_Golang 1.x版本泛型编程

本文介绍了Golang 1.x版本的泛型编程。往期回顾:浅谈动态追踪技术Go是一门天生为服务器程序设计的简洁的语言,因此Go的设计原则聚焦在可扩展性、可读性和并发性,而多态性并不是这门语言的设计初衷,因此就被放在了一边。虽然在2.0版…

jwt令牌_JWT令牌的秘密轮换

jwt令牌当您使用JSON Web令牌 ( JWT )或需要对有效载荷信息进行签名或加密的任何其他令牌技术时,设置令牌的到期日期很重要,因此,如果令牌到期,则可以假定这可能被视为安全漏洞,您拒绝使用此令牌…

jasperreports_JasperReports:棘手的部分

jasperreports如果您使用Java进行编程的时间足够长,则有可能需要为业务用户生成报告。 就我而言,我已经看到几个项目使用JasperReportsLibrary来生成PDF和其他文件格式的报告。 最近,我荣幸地观察了Mike和他的团队使用上述报告库以及他们所面…

电脑运行adb闪退_adb+python进阶使用

之前文章有提到过使用python加adb刷视频,今天带来进阶版——无线多台手机。首先要使用adb连接多台手机,手机和电脑肯定要在统一局域网内。1.打开手机开发者模式,并通过USB接口链接电脑。2.打开cmd:输入adb tcpip 5555, 会得到相关…

java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子…

apache kafka_Apache Kafka简介

apache kafka什么是Apache Kafka? Apache Kafka是一个分布式流系统,具有发布和订阅记录流的功能。 在另一方面,它是企业消息传递系统。 它是一个快速,水平可扩展和容错的系统。 Kafka有四个核心API, 生产者API&#x…

人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

原文链接:https://www.cnblogs.com/arthinking/p/13205303.html相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in&a…

rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体…

ckeditor回显带标签_Spring Boot中带有CKEditor的AJAX

ckeditor回显带标签1.概述 在本文中,我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中,我们将导入一个包含大量数据的XML文档,对使用GET请求将一组数据加载到CKEditor实例的能力进行编程,并执行POST请求以保存CKEditor的…

android 可行性分析,可行性研究项目分析程序与步骤

项目分析程序项目分析分析工作步骤分析程序框架分段实施方法第一阶段初期工作1、收集资料。包括业主的要求,业主已经完成的研究成果,市场、厂址、原料、能源、运输、维修、共用设施、环境、劳动力来源、资金来源、税务、设备材料价格、物价上涨率等有关资…

原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码

点击上方“程序员大白”,选择“星标”公众号重磅干货,第一时间送达编辑 | 程序员大白公众号来源丨https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html仅作学术交流,如有侵权,请联系删文本篇文章讲解了计算…

Linux 目录之 /etc/init.d/ 介绍

文章目录一、关于目录 /etc/init.d/二、关于目录 /etc/rc.d/init.d/三、关于文件 /etc/rc.local四、/etc/init.d/ 和 service 文件五、关于命令 service六、关于文件 /etc/inittab七、关于目录 /etc/init/注意:以 System V init 或者 Upstart 为初始化系统的 Linux …

java 异常处理发生异常_处理Java中的异常

java 异常处理发生异常每个程序员都希望编写一个完美的程序。 也就是说,程序运行时没有任何障碍。 好吧,如果希望是马,乞g就会骑。 除了程序员的所有愿望之外,有时还会发生无法预料的情况。 在Java中,这些无法预料的…

android提交项目到svn,Android Studio 配置SVN,通过Share project提交项目和实现忽略文件...

1:首先电脑本身装的SVN必须在bin目录下包含svn.exe文件,如下图。这个文件是在安装SVN时选择安装command line client tools才会出现。如果没有,需要重新安装SVN。2:将SVN关联到Android Studio中声明:在这里我使用的And…