Mac OS X的前世今生

知 識 點 / 超 人


目錄

  • Unix
  • Linux
  • OS
  • Mac OS X
  • Mac OS X架構
  • 擴展知識點

Unix

Unix:最早出現的操作系統之一

優點:有強大的可移植性,適合多種硬件平臺 在安全性穩定性和性能高于Linux 但是需要專業的硬件平臺;
缺點:門檻較高

介紹:UNIX操作系統,是一個強大的多用戶、多任務操作系統,支持多種處理器架構,屬于分時操作系統,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的貝爾實驗室開發。目前它的商標權由國際開放標準組織所擁有,只有符合單一UNIX規范的UNIX系統才能使用UNIX這個名稱,否則只能稱為類UNIX(UNIX-like)。

UNIX誕生
1965年時,貝爾實驗室(Bell Labs)加入一項由通用電氣(General Electric)和麻省理工學院(MIT)合作的計劃;該計劃要建立一套多使用者、多任務、多層次(multi-user、multi-processor、multi-level)的MULTICS操作系統。MULTICS其實是"Multiplexed Information and Computing Service"的縮寫。
在1970年時,那部PDP-7卻只能支持兩個使用者,當時Brian Kernighan就開玩笑地稱他們的系統其實是"UNiplexed Information and Computing Service",縮寫為"UNICS"。后來,大家取其諧音,就稱其為"UNIX"了。1970年可稱為"UNIX元年"。
Brian Kernighan就開玩笑地稱他們的系統其實是:"UNiplexed Information and Computing Service",縮寫為"UNICS",大家取其諧音,就稱其為"UNIX”,從此UNIX誕生。

1971年,第一版Unix在一臺PDP-11/24的機器上完成。
這臺電腦只有24KB的物理內存和500K磁盤空間。Unix占用了12KB的內存,剩下的一半內存可以支持兩用戶進行Space Travel的游戲。著名的fork系統調用也就是在這時出現的。

1973年:創在C語言并成功地用C語言Unix的第三版內核
到了1973年的時候,Ken Thompson 與Dennis Ritchie感到用匯編語言做移植太過于頭痛,他們想用高級語言來完成第三版,對于當時完全以匯編語言來開發程序的年代,他們的想法算是相當的瘋狂。
用叫BCPL(Basic Combined Programming Language)的語言開發,并整合了BCPL形成B語言,后來Dennis Ritchie覺得B語言還是不能滿足要求,于是就改良了B語言,這就是今天的大名鼎鼎的C語言。于是,Ken Thompson 與Dennis Ritchie成功地用C語言Unix的第三版內核。Ken Thompson 與Dennis Ritchie成功地用C語言Unix的第三版內核至此,Unix這個操作系統修改、移植相當便利,為Unix日后的普及打下了堅實的基礎,而Unix和C完美地結合成為一個統一體,C與Unix很快成為世界的主導,于是,Unix開始廣泛流行。

1980年:Berkeley的BSD UNIX和AT&T的Unix兩個最主要的Unix的版本
到了1980年,有兩個最主要的Unix的版本線,一個是Berkeley的BSD UNIX,另一個是AT&T的Unix,在這個時候,很顯然,競爭最終引發了Unix的戰爭。在這場戰爭中,好的是,軟件開發人員還是能夠得到Unix的源碼并對其按照自己的需要和興致進行裁剪。而不好的是,Unix開始一發不可收拾地開發不停地出現各種各樣的變種。

UNIX系統小結:
UNIX是最早出現的操作系統之一,最初的Linux就是想仿制的Unix系統編寫的,UNIX發展到現在已趨于成熟,需要大量專業知識才能操作,此外,UNIX系統具有強大的可移植性,適合多種硬件平臺。此外,UNIX具有良好的用戶界面;程序接口提供了C語言和相關庫函數及系統調用,命令接口是shell,系統的可操作性很強。你甚至可以不用顯示器,取而代知的是非常簡易的輸出設備,在安全性穩定性和性能高于Linux 但是需要專業的硬件平臺,門檻較高。


Linux

Linux:開源的免費操作系統

優點:開源,系統的漏洞更容易被發現,也更容易被修補;
缺點:如果不熟知Linux命令,幾乎完全無法使用這個系統。

介紹:Linux是一套免費使用和自由傳播的 類Unix 操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件,Android系統就是基于Linux而開發出來的。

1991年10月5日:第一次正式向外公布時間
1991年4月,林納斯·托瓦茲開始醞釀并著手編制自己的操作系統。
1991年4月13日在comp.os.minix上發布說自己已經成功地將bash移植到了minix上,而且已經愛不釋手、不能離開這個shell軟件了。
1991年的10月5日,林納斯·托瓦茲在comp.os.minix新聞組上發布消息,正式向外宣布Linux內核的誕生(Freeminix-like kernel sources for 386-AT)。

Linux存在著許多不同的Linux版本,但它們都使用了Linux內核,Linux可安裝在各種計算機硬件設備中,比如手機、平板電腦、路由器、視頻游戲控制臺、臺式計算機、大型機和超級計算機。

1994年:Linux1.0發布
1993年,大約有100余名程序員參與了Linux內核代碼編寫/修改工作,其中核心組由5人組成,此時Linux 0.99的代碼大約有十萬行,用戶大約有10萬左右.
1994年3月,Linux1.0發布,代碼量17萬行,當時是按照完全自由免費的協議發布,隨后正式采用GPL協議。

1995年1月,RedHat(小紅帽)誕生
1995年1月,Bob Young創辦了RedHat(小紅帽),以GNU/Linux為核心,集成了400多個源代碼開放的程序模塊,搞出了一種冠以品牌的Linux,即RedHat Linux,稱為Linux“發行版”,在市場上出售。

Linux系統小結:
Linux是開源的免費操作系統,因開源的特性,系統的漏洞更容易被發現,也更容易被修補。
此外,因為Linux原本的人機交互界面是命令行,用戶如果不熟知Linux命令,幾乎完全無法使用這個系統,因為過于專業,Linux常被用作各種服務器操作系統。可以說,Linux的基本思想有兩點:第一,一切都是文件;第二,每個軟件都有確定的用途。
其中第一條詳細來講就是系統中的所有都歸結為一個文件,包括命令、硬件和軟件設備、操作系統、進程等等對于操作系統內核而言,都被視為擁有各自特性或類型的文件。


OS

操作系統即 Operating System,簡稱 OS,是讓人使用機器的人機交互軟件。如今的 Windows、Linux、Unix、Mac OS、iOS、iPad OS 、Android、Chrome OS,及華為公司的HarmonyOS,都是操作系統,它們有的用在桌面,有的用在服務器,有的適用上網本,有的是為移動手機而定制。


Mac OS

Mac OS X :界面美觀 操作簡便

優點:界面美觀,操作簡便,也不需要額外購買;
缺點:通常只能運行于蘋果電腦,因為蘋果電腦高昂售價,Mac的用戶相對較少。

介紹:Mac系統是基于Unix內核的圖形化操作系統,繼承Unix風格的內存管理和搶占式多任務處理 (pre-emptive multitasking),大大改進內存管理。一般情況下在普通PC上無法安裝的操作系統,是蘋果旗下PC專屬系統,由蘋果公司自行開發。如今蘋果機的操作系統已經到了OS 10.15,該系統的許多特點和服務都體現了蘋果簡潔公司的理念。

System 1.0
蘋果隨同Macintosh 128K的最初電腦操作系統,1984年第一代Macintosh擺上了商鋪的柜臺,其所采用的操作系統System 1.0,盡管只能顯示黑白兩色,但是已經具有了桌面、窗口 、圖標、光標、菜單和卷動欄等項目。在System 1.0的桌面上,著名的“Trash”已經出現了,該系統一直更新到System 7.1之后終結了System x.x的命名方式。該系統一直更新到System 7.1之后因為Mac OS而終結了System x.x的命名方式。

MAC OS
在1997年夏季,蘋果發布了劃時代的操作系統:MAC OS 8,在短短兩周的時間內,MAC OS 8就賣出了125萬套,MAC OS 8給用戶帶來了更加方便的因特網連接,功能更強的多媒體應用,更加絢麗的圖標等等。在MAC OS 8發布的半年以后,MAC OS 8.1出現在銷售柜臺上,MAC OS 8.1最大的改進是增加了全新的HFC Plus(Mac OS擴展)資訊管理系統。MAC OS 9是2000年前,最后一次大升級版本的MAC操作系統
1999年10月,改進之MAC OS 8.6的MAC OS 9面世了,MAC OS 9被認為是2000年前,最后一次大升級版本的MAC操作系統,并將是以往我們所熟悉的MAC OS的最后一個版本,接下去的承擔MAC操作系統重任的將會是MAC OS X。

Mac OS X
2000年1月,人們在San Francisco MacWorld的展覽會上第一次看到了MAC OS X。MAC OS X采用了Darwin內核,Darwin內核是UNIX系統的一個變種,具有UNIX類操作系統所具有的高穩定性,并且MAC OS X還具有一套全新設計的,被稱作Aqua的用戶界面。Aqua界面非常漂亮,擁有如水流般的平滑動感,設計精美的圖標、菜單和??繖诘鹊?。MAC OS X一公開露面就獲得了人們的一片驚嘆聲,從那時開始直到現在MAC OS X的Aqua用戶界面一直是人們心目中的最佳。北京時間2019年6月4日凌晨1點,2019年WWDC全球開發者大會上蘋果發布macOS Catalina 10.15,用戶能將iPad用作Mac電腦的第二塊顯示屏,可以實現語音控制。

蘋果OS X系統小結:
Mac系統是蘋果公司基于UNIX操作系統進行深度再開發的操作系統,完全閉源,只能運行在蘋果公司的電腦上。


Mac OS X架構

Mac OS X 分為兩部分:

Darwin操作系統:大體由XNU內核Unix工具組成,類Unix的開放原始碼環境??稍趍acOS和iOS操作系統中使用。XNU是一個混合內核,它結合了卡內基梅隆大學開發的Mach內核,FreeBSD的組件以及用于編寫稱為IOKit的驅動程序的C ++ API。XNU在x86_64上單處理器和多處理器配置運行。
Aqua:由蘋果電腦開發,命名為Aqua的有版權的GUI界面。

Mac OS X系統架構

XNU
雖然Mac OS已經通過Unix認證,然而XNU的全稱和GNU格式一樣,是XNU’s not Unix,顧名思義,XNU不是Unix。XNU是一款微內核宏內核特性的混合內核,它包括三個部分:Mach、BSD和I/O Kit

Mach
原來是一款微內核,是硬件和固件之上最基礎的操作系統核心,XNU中的Mach來自于OSFMK 7.3(Open Software Foundation Mach Kernel))它負責CPU調度、內存保護等功能。它是macOS內核中最重要的部分,XNU中大部分代碼來自于它,而且macOS中的可執行文件也是mach-o格式。

Mach 的故事開始于 1975 年,比蘋果廠牌早一年出現,第一版叫做 RIG,因為缺少內存分頁等明顯缺點,RIG 失敗了,1981 年 4 月,RIG 主要開發者 Richard Rashid 開發了 Accent 解決了 RIG 的缺點,他后加入了 Microsoft Research。熟悉歷史的人會把 RIG 叫做 Mach 0.8,Accent 叫做 Mach 0.9。
1984 年,Mach 的主要開發目標是微內核和兼容 Unix,于是 Mach 使用了 BSD 4.3 作為起點。幾個基本概念被提出:任務(Task)、線程(Thread)、端口(Port)、消息(Message),以及內存對象(Memory Object)用以實現物理到虛擬內存的分頁映射,后續 FreeBSD 的內存體系結構即基于此。
最終,微內核真正意義上的實現是在 1996 年 7 月,也就是 OPENSTEP 4.0,這也是兩年后 OPENSTEP 4.2 被蘋果收購的原因之一。而 Mach 主要開發者 Avie 成為了蘋果的首席軟件技術官。
另一個需要解釋的是基于 Linux 1.3 的 MkLinux 內核,MkLinux 內核作為單個 Mach 任務運行,和BSD 部分駐留在相同的地址空間中(應用程序空間)。
直至 Mach Ten,Mac OS X 整合了 Mach、BSD、Macintosh 技術,雖然現代 Macintosh 是協作式多任務,但在 Mach Ten 中,Mac OS 是本地一等公民,而 Unix 運行在 UVM 虛擬機中,保持搶占式多任務執行 C 語言庫、POSIX 子系統、BSD 網絡棧、文件系統、RPC、NFS、X Windows。

BSD
XNU中包含一個經過修改的BSD,它負責進程管理、Unix文件權限、網絡堆棧、虛擬文件系統、POSIX兼容。macOS之所以符合單一Unix規范,也正是因為如此。

I/O Kit
是XNU內核中的開源框架,為設備驅動提供了一個面向對象(C++)的一個框架??蓭椭_發人員為Apple的macOS和iOS操作系統編寫設備驅動程序代碼。I/O Kit框架由NeXTSTEP的DriverKit演變而來,與Mac OS 9的設備驅動程序框架或BSD的沒有任何相似之處。

System utilities
除了內核以外,Darwin還包括一些Unix工具,這些Unix工具有部分是Apple開發,比如Launchd,terminal,有部分來自于第三方,比如FreeBSD Project、GNU Project、Apache。

Core Foundation
macOS和iOS中的C應用程序編程接口(API),是低級例程和包裝函數的混合。

Quartz
Mac OS畢竟是類Unix操作系統,類Unix操作系統想要進行圖形化操作,必須要有一個圖形框架,在Linux上我們有X11,有Wayland,而在macOS中,我們有Quartz。它是一款基于PDF技術的圖形框架。作為一個類unix,不兼容X11是不可能的,如果你想在macOS中運行X11應用,也可以,有個開源項目叫XQuartz了解一下。

Cocoa
是蘋果公司為Mac OS X所創建的原生面向對象的API,是Mac OS X上五大API之一(其它四個是Carbon、POSIX、X11和Java)。蘋果的面向對象開發框架,用來生成Mac OS X的應用程序。主要的開發語言為Objective-C。Cocoa開始于1989年9月上市的NeXTSTEP 1.0,當時沒有Foundation框架,只有動態運行庫,稱為Kit,最重要的是AppKit. 1993年NeXTSTEP 3.1被移植到了Intel, Sparc, HP的平臺上,Foundation首次被加入,同時Sun和NeXT合作開發OpenStep也可以運行在Windows系統上VCV。Cocoa API里面有不少NS開頭的API,何為NS?NS者,NeXTSTEP也。

Aqua UI
Mac OS的桌面環境,類似Linux中的GNOME。不過,不是所有Mac OS X都是Aqua UI,在Mac OS X早期測試版Rhapsody中,用的還是經典的Classic Mac OS界面。


擴展知識點:

POSIX
可移植操作系統接口(Portable Operating System Interface),是IEEE為要在各種UNIX操作系統上運行軟件,而定義API的一系列互相關聯的標準的總稱,其正式稱呼為IEEE Std 1003,而國際標準名稱為ISO/IEC 9945。此標準源于一個大約開始于1985年的項目。POSIX這個名稱是由理查德·斯托曼(RMS)應IEEE的要求而提議的一個易于記憶的名稱。它基本上是Portable Operating System Interface(可移植操作系統接口)的縮寫,而X則表明其對Unix API的傳承。POSIX標準詳細內容

Launchd
由蘋果開發的一款統一服務管理框架,是 Mac 下用于初始化操作系統的關鍵進程,用于啟動,停止和管理macOS中的守護進程,應用程序,進程和腳本。由于它支持多線程,所以它比傳統的Unix初始化程序SysVinit要高,launchd同時正在被移植到FreeBSD平臺,它的設計思想也被systemd所借鑒,后者成為目前Linux發行版中的主流系統初始化程序。
Mac OS X的啟動原理:
1.固件激活,硬件初始化,加載BootX引導器。
2.BootX加載內核與內核擴展(kext)。
3.內核啟動Launchd進程。
4.Launchd會根據 ,/System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents , ~/Library/LaunchAgents 里的plist配置,啟動服務守護進程。
優化Mac OS X的啟動的關鍵就在,/System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents。

Terminal
終端,終端就是連接內核與交互界面的橋梁。操作系統分為內核和交互界面兩個部分,內核部分,負責系統的全部邏輯操作,由海量命令組成,這一部分是系統運行的命脈,不與用戶接觸;交互界面部分,是開機之后所有我們所看到的東西,比如窗口,軟件,應用程序等等。

交互界面、Terminal、內核之間的關系圖

Terminal、shell、bash、zsh的關系
Shell
命令的解釋器,shell腳本語言則是shell解釋器所能認識的語言,shell解釋器運行Terminal中,它將交互界面的輸入命令在終端中進行解釋,將解釋后的內容傳遞給內核,內核成功識別內容后去執行,將執行結果輸出在Terminal或者交互界面。常見的 shell 解釋器有 sh、bash這兩種,其他有 ksh、csh 和 zsh。
bash
目前最通用、最常見的Shell解釋器,定義了一套腳本語言,是眾多Linux發行版的標配。
zsh
因為zsh本身作為一種腳本語言,是與bash不兼容的。符合bash規范的腳本無法保證被zsh解釋器正確執行。但是,zsh實現中包含了一個仿真模式(emulation mode),支持對兩種主流的Bourne衍生版shell(bash、ksh)和C shell的仿真(csh的支持并不完整)。在bash的仿真模式下,可以使用與bash相同的語法和命令集合,從而達到近乎完全兼容的目的。zsh是不會根據.sh文件開頭的shebang(如#!/bin/sh和#!/bin/bash)自動采取兼容模式來解釋腳本的,因此,要讓zsh解釋執行一個其他Shell的腳本,必須手動輸入emulate sh或者emulate ksh,告訴zsh對何種Shell進行仿真。

參考資料:
回顧蘋果操作系統Mac OS的發展歷史
macOS 的前世今生及訪達中拷貝文件的路徑的方法

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容