关于 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,一经查实,立即删除!

相关文章

得到appd url_AppD方法:Java 9支持

得到appd url通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 阅读有关Java 9模块化功能带来的挑战以及AppDynamics保持在该领域的领导者的严格要求的更多信息。 我们很高兴宣布Java 17全面支持&…

python有趣的面试题_python面试题目

问题一:以下的代码的输出将是什么? 说出你的答案并解释。 class Parent(object): x 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x 2 print Parent.x, Child1.x, Child2.x Parent.x 3 print Parent.x,…

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

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

Linux 发行版之 CentOS 简介

简介 CentOS(Community Enterprise Operating System,社区企业操作系统)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高…

python异常值如何处理_如何处理异常

python异常值如何处理最近,我与一个朋友进行了讨论,他是一个相对初级但很聪明的软件开发人员。 她问我有关异常处理的问题。 这些问题指出了一种技巧和窍门,肯定有它们的清单。 但是我坚信我们编写软件的方式背后的背景和动机,因此…

c语言测试清单,c语言测试(C language test).doc

c语言测试(C language test)c语言测试(C language test)* * college course exam papersCourse Name: "C: the use of C language programming software to enter the world" (A) volumeGrade: class:Name: ______BUKAILI_________ number: _________________ test (…

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 | | | | | | 工作目录 暂存区 …

glacier2_Amazon Glacier的Scala客户端

glacier2Amazon Glacier是一项安全,耐用且成本极低的云存储服务,用于数据归档和长期备份。 Glacier提供了一种冷藏数据存档解决方案,这意味着已存储的数据不可立即检索。 您首先需要请求数据检索,访问时间可能从几分钟到几小时不等…

c 调用c语言dll数组,C#调用C类型dll入参为struct的问题详解

前言C# 可以通过 DllImport 的方式引用 C 类型的 dll。但很多 dll 的参数不会是简单的基础类型,而是结构体 struct 。因此就需要在 C# 端定义同样的结构体类型,才能实现调用 C 类型 dll。这里例举几种不同的结构体情况,以及其对应的解决方案。…

Slackware Linux 的发展历程

目前可供Linux用户使用的 发行版有很多种,它们虽基于共同的内核,但在安装、提供的应用程序、服务等方面各具特色,并拥有各自的用户群体。Slackware Linux是一个历史比较悠久的发行版,它的存在见证了Linux的发展历程,它…

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

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

jwt令牌_JWT令牌的秘密轮换

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

linux android build tools,build.gradle 文件中的 Android SDK Build Tools version

build.gradle 文件中的 Android SDK Build Tools versionAndroid,Gradle,SDK2018.07.17在 Android Gradle Plugin 3.0.1 中,最低的 Android SDK Build Tools 是 26.0.2,而我声明的 25.0.0 将被忽略掉。今天新建了一个 Android 项目的时候,无意…

Linux 常用的软件包管理器/软件包管理工具

文章目录RPMYUMDNFDPKGPacmanZypperPortageEopkgUrpmiRPM 代表系统:RHEL、CentOS、Fedora、openSUSE、SUSE企业版、PCLinuxOS、Mandriva Linux、Mageia 等 主命令:rpm YUM 代表系统:RHEL、CentOS 主命令:yum DNF 这是基于 RP…

怎样用C语言实现五子棋,C语言实现五子棋

可以称得上史上最简单的五子棋版本了。可以使用curses库来改进页面和下棋方式。并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出。我改进了一点,但是还是没有完全避免这个问题。/**Gobang.c*/#include#include#de…

jasperreports_JasperReports:棘手的部分

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

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

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

MacBook 强制关机的四种方法

文章目录一、强制关机二、强制断电三、安全关闭(老款 MacBook)四、强制关闭一、强制关机 长按电源键,5 秒左右 二、强制断电 ShiftControlOption电源键 三、安全关闭(老款 MacBook) ControlOptionCommand电源键。…