操作系統(tǒng)的最強(qiáng)入門科普(Unix / Linux 篇)_熱議
大家好,我是小棗君。
今天這篇文章,我們來聊聊操作系統(tǒng)(Operating System)。
(資料圖片)
說到操作系統(tǒng),大家都不會陌生。我們天天都在接觸操作系統(tǒng) —— 用臺式機(jī)或筆記本電腦,使用的是 windows 和 macOS 系統(tǒng);用手機(jī)、平板電腦,則是 android(安卓)和 iOS 系統(tǒng)。
如果是從事信息通信行業(yè),還經(jīng)常會和 ubuntu、CentOS、Fedora 這樣的 Linux 系統(tǒng)打交道。
其實(shí),操作系統(tǒng)的種類極多,遠(yuǎn)遠(yuǎn)不止我們知道的這些。
從使用場景來看,操作系統(tǒng)大致可以分為桌面操作系統(tǒng)、服務(wù)器操作系統(tǒng)、移動終端操作系統(tǒng)、嵌入式操作系統(tǒng)、物聯(lián)網(wǎng)操作系統(tǒng)、云操作系統(tǒng)等類別。
如下表所示:
那么,操作系統(tǒng)究竟是什么?
從本質(zhì)來看,操作系統(tǒng)其實(shí)就是一套軟件。
它屬于底層軟件,可以說是一個大管家,專門負(fù)責(zé)把所有的硬件和上層軟件(中間件、數(shù)據(jù)庫、應(yīng)用程序等)管理和連通起來,并進(jìn)行資源調(diào)配,完成用戶下達(dá)的任務(wù)。
操作系統(tǒng)包攬了很多底層的復(fù)雜工作,大大簡化了應(yīng)用軟件的開發(fā)難度。
比如說,我開發(fā)一個視頻播放器,就不需要寫那些底層硬件代碼。
操作系統(tǒng)還有一個重要作用,就是方便用戶使用。
用戶有了操作系統(tǒng),就能更好地管理計(jì)算機(jī),進(jìn)行人機(jī)交互(下達(dá)命令,查詢結(jié)果和狀態(tài))。
新手學(xué)習(xí)操作系統(tǒng),最麻煩的是認(rèn)名字和認(rèn)類別。接下來,小棗君就從時間線的角度,對所有的操作系統(tǒng)關(guān)系進(jìn)行一下梳理。
█ 操作系統(tǒng)的誕生
操作系統(tǒng)這個東西,并不是計(jì)算機(jī)誕生時就有的。
1946 年 2 月,在美國的賓夕法尼亞大學(xué)誕生了世界上第一臺電子計(jì)算機(jī),它的名稱叫 ENIAC(埃尼阿克)。
ENIAC 是由大量的電子管(真空管)組成,體積極為龐大,占地 170 平方米,重達(dá) 30 噸,耗電 174 千瓦。在算力上,它可以實(shí)現(xiàn)每秒 5000 次的加法運(yùn)算。
這種早期的計(jì)算機(jī),既沒有顯示器,也沒有鍵盤,更沒有鼠標(biāo),全部都是人工操作。
在使用時,專職操作員將運(yùn)算信息記錄在穿孔卡帶上。系統(tǒng)啟動后,讀取卡帶信息,然后進(jìn)行運(yùn)算,最后輸出結(jié)果。
計(jì)算機(jī)的速度快,人的速度慢。所以,計(jì)算機(jī)經(jīng)常處于等待狀態(tài),等待操作員的輸入。
這嚴(yán)重耽誤了計(jì)算效率,浪費(fèi)時間,也浪費(fèi)錢(電費(fèi))。于是,到了 20 世紀(jì) 50 年代,開始出現(xiàn)了批處理系統(tǒng)(batch processing)。
批處理系統(tǒng)中,操作員把用戶提交的作業(yè)進(jìn)行分類,把一批作業(yè)編成一個“作業(yè)執(zhí)行序列”。每一批作業(yè),都由專門編制的監(jiān)督程序(monitor)自動依次處理。
這個“監(jiān)督程序”,就是操作系統(tǒng)的雛形。它標(biāo)志著操作系統(tǒng)的誕生(1955 年)。
最早使用批處理系統(tǒng)的,是第二代通用計(jì)算機(jī),代表產(chǎn)品是 IBM 的 1401 和 7094 等。
批處理雖然提升了效率,但仍存在缺陷。
例如,當(dāng)作業(yè)進(jìn)行 I / O(輸入 / 輸出)操作時,主機(jī)會等待操作完成,造成自身空閑。再例如,計(jì)算機(jī)只能同時運(yùn)行一個批處理任務(wù),效率還是太低。
到了 60 年代,集成電路技術(shù)高速發(fā)展,我們有了更快的處理器、更大的內(nèi)存、更豐富的 I / O 設(shè)備。同時,通道和中斷技術(shù)出現(xiàn),開始允許系統(tǒng)執(zhí)行“掛起”操作。
于是,就有了“多道程序系統(tǒng)”。
簡單來說,計(jì)算機(jī)系統(tǒng)從串行變成了并行,可以同時運(yùn)行多個任務(wù)(多個程序放入內(nèi)存,交替在 CPU 中運(yùn)行,共享硬軟件資源)。
多道程序系統(tǒng)大幅提升了計(jì)算機(jī)的工作效率。再后來,系統(tǒng)又支持了多個用戶同時使用。于是,就變成了“多用戶 + 多任務(wù)”的系統(tǒng),稱為“分時系統(tǒng)”。
“分時”和我們通信領(lǐng)域的“時分復(fù)用”有點(diǎn)像,就是把處理機(jī)的運(yùn)行時間分成很短的時間片,按時間片輪流分配給各個作業(yè)使用。
再后來,技術(shù)又繼續(xù)演進(jìn)。終于,我們有了時效性更強(qiáng)的“實(shí)時操作系統(tǒng)”。這種系統(tǒng),就非常接近于現(xiàn)代操作系統(tǒng)的概念了。
█ UNIX 的誕生
1964 年,美國電話電報(bào)公司(AT&T)、通用電器公司(GE)及麻省理工學(xué)院(MIT)合作,提出了一個超級分時操作系統(tǒng)的開發(fā)計(jì)劃。
這個計(jì)劃,被命名為 Multics OS。Multics 是“MULTiplexed Information and Coputing System(多路信息與計(jì)算系統(tǒng))”的意思。
當(dāng)時,他們打算借助這個系統(tǒng),打造一臺能夠連接 1000 臺終端、滿足 300 人同時在線的計(jì)算機(jī)。
這個計(jì)劃持續(xù)了五年,并沒有達(dá)到既定目標(biāo)。于是,1969 年,隸屬 AT&T 公司的貝爾實(shí)驗(yàn)室(Bell Labs)宣布退出。
貝爾實(shí)驗(yàn)室退出之后,相關(guān)的項(xiàng)目組成員就閑了下來。其中就有一個人,名字叫做肯?湯普森(Ken Thompson)。
肯?湯普森此前在 Multics 上開發(fā)了一款名叫 "星際旅行(Space Travel)" 的游戲。退出 Multics 項(xiàng)目后,肯?湯普森就沒辦法繼續(xù)玩這個游戲了。
于是,他突發(fā)奇想,打算在一臺空閑的 PDP-7(DEC 公司生產(chǎn)的一種小型計(jì)算機(jī),性能很低)上,開發(fā)一個簡單操作系統(tǒng),運(yùn)行這個游戲。
1969 年 8 月,肯?湯普森趁著妻子回家探親,用了 1 個月的時間,使用匯編語言,寫出了一個簡版的 Multics 系統(tǒng)(包括一組內(nèi)核程序,一些內(nèi)核工具程序,以及一個小的文件系統(tǒng))。
實(shí)驗(yàn)室的同事們,將這個系統(tǒng)戲稱為 Unics。Uni 作為前綴,是“單一、一個”的意思。Unics,對應(yīng) Multics,是“單路信息與計(jì)算系統(tǒng)”的意思。
后來,大家又取其諧音,直接稱其為“Unix”。
基于匯編語言編寫的 Unics,硬件通用性差,沒法移植到其它機(jī)器上運(yùn)行。因此,肯?湯普森嘗試使用 BCPL、PASCAL 語言進(jìn)行重寫。但是,效果并不理想。
這時,他的同事丹尼斯.里奇(Dennis Ritchie)站了出來。
丹尼斯.里奇在 BCPL 語言(也就是 B 語言)的基礎(chǔ)上,開發(fā)了一套新的語言,也就是后來如日中天的 C 語言(按字母表順序,B 之后就是 C)。
不久后,丹尼斯.里奇用 C 語言重寫 Unics 成功。就這樣,Unix 操作系統(tǒng)正式誕生了。
1973 年,丹尼斯?里奇和肯?湯普森正式發(fā)表論文,宣布了 Unix 的存在。消息引起很大反響,很多人都期望學(xué)習(xí)和研究 Unix。
貝爾實(shí)驗(yàn)室(AT&T)推出了 Unix 之后,因?yàn)槭苊绹磯艛嘀撇玫脑?,并不能對它進(jìn)行銷售。所以,他們只能將 Unix 無償提供給所有人學(xué)習(xí)。
又過了一段時間,AT&T 發(fā)布了 Unix 系統(tǒng)第 5 版,并授權(quán)給教育機(jī)構(gòu)使用。1975 年,他們第一次以 2 萬美元的價(jià)格,授權(quán)企業(yè)使用 Unix 第 6 版。
這期間,很多企業(yè)和機(jī)構(gòu)開始打 Unix 的主意。
1977 年,伯克利大學(xué)的研究生比爾?喬伊(Bill Joy),將 Unix 程序整理到磁帶上,推出了 BSD 版本。BSD,就是 Berkeley Software Distribution(伯克利軟件發(fā)行版)。
1978 年,SCO(一家服務(wù)器系統(tǒng)軟件供應(yīng)商)包裝發(fā)行了商用版的 Unix。
目前公認(rèn)的最完美版本,是 1979 年發(fā)行的 System V7。這個版本也被 Unix 玩家們稱為“最后一個真正的 UNIX”。
1980 年,美國國防高級研究計(jì)劃局(DARPA)準(zhǔn)備制定 TCP / IP 協(xié)議,選擇了與 BSD 合作。這大大刺激了 Unix 的發(fā)展和普及。
后來,丹尼斯?里奇和肯?湯普森被譽(yù)為 Unix 之父和 C 語言之父。1983 年,他們二人都獲得了圖靈獎。
在 System V7 推出之后,AT&T 發(fā)布新的使用條款,將 Unix 源代碼私有化。Unix 開始走向了商業(yè)閉源之路。
很多公司,都推出了自己的 Unix 系統(tǒng)分支。比較有名的,是 Sun 公司的 Solaris、IBM 公司的 AIX、惠普公司的 HP-UX,以及由 BSD 版本發(fā)展起來的 FreeBSD。
Solaris 這個系統(tǒng),小棗君非常熟悉。當(dāng)年我就是通過 Solaris 學(xué)會的 Unix。它的穩(wěn)定性極高,主要用在 SUN 公司的服務(wù)器(V240 / V440 等)上,CPU 都是完全不一樣的,叫做 SPARC。
FreeBSD 的應(yīng)用范圍就廣多了。它在 BSD 許可協(xié)議下發(fā)布,由來自世界各地的志愿者開發(fā)和維護(hù),允許任何人隨意使用和發(fā)行(在保留版權(quán)和許可協(xié)議信息的前提下)。
蘋果公司的 OS X,就是基于 FreeBSD 的。
詳細(xì)的 Unix 閉源分支我就不多說了,發(fā)一張圖,大家可以參考:
█Linux 的誕生
Unix 開始收費(fèi)和商業(yè)閉源之后,引起了一個大叔的不滿。這個大叔,名叫理查德?馬修?斯托曼(Richard Matthew Stallman)。
1984 年,他發(fā)起了自由軟件體系 GNU(GNU is not unix),模仿 Unix 的界面和使用方式,重新開發(fā)一個開源的版本。他還組織成立了 FSF(Free Software Foundation,自由軟件基金會),起草了 GPL(GeneralPublicLicense,通用公共許可證)。
斯托曼的做法,具有劃時代的意義。他開創(chuàng)了開源軟件的黃金時代。
所有 GPL 協(xié)議下的自由軟件,都必須遵循“Copyleft(非版權(quán))" 原則 ——
即:自由軟件,允許用戶自由拷貝、修改和銷售。但是,對其源代碼的任何修改,都必須向所有用戶公開。
到上世紀(jì) 90 年代初,GNU 項(xiàng)目已經(jīng)開發(fā)出許多高質(zhì)量的免費(fèi)軟件,其中包括有名的 emacs 編輯系統(tǒng)、bash shell 程序、gcc 系列編譯程序、gdb 調(diào)試程序等等。
這些都為后來 Linux 的誕生創(chuàng)造了條件。
Unix 源代碼私有化之后,在大學(xué)中不再允許使用 Unix 源代碼。
1987 年,荷蘭阿姆斯特丹自由大學(xué)計(jì)算機(jī)系的安德魯?塔能鮑姆教授(Andrew S. Tanenbaum,也譯為譚寧邦),為了能在課堂上教授操作系統(tǒng)課程,決定在不使用任何 AT&T 源代碼的前提下,自行開發(fā)與 Unix 兼容的操作系統(tǒng)。
他將這個系統(tǒng)稱為 MINIX,也就是 mini-UNIX(小型 UNIX)的意思。
MINIX 的主要工作平臺,是 IBM PC 及其兼容機(jī)。這款 PC 搭載了英特爾公司的 16 位處理器 ——Intel 8080。
開發(fā)出 MINIX 之后,塔能鮑姆教授并沒有對它進(jìn)行大規(guī)模推廣。而且,他認(rèn)為這個系統(tǒng)只是用于教育目的,所以也沒有進(jìn)行深入開發(fā)。
他甚至還不允許別人加入代碼(估計(jì)是怕侵權(quán) Unix),這就更加限制了 MINIX 的發(fā)展和普及。
1991 年,正在芬蘭赫爾辛基大學(xué)求學(xué)的林納斯?托瓦茲(Linus Torvalds),對 Unix 產(chǎn)生濃厚興趣,嘗試借助 MINIX 完成一些日常工作。
MINIX 的功能太弱,無法滿足林納斯的需求。于是,他利用 GNU 的 bash 當(dāng)做開發(fā)環(huán)境,gcc 當(dāng)做編譯工具,成功編寫出了擁有 10000 行代碼的 Linux 內(nèi)核(Linux kernel)。
此時的林納斯,只有 21 歲!
林納斯的 Linux 內(nèi)核基于 POSIX(Portable Operating System Interface for Computing Systems,可移植操作系統(tǒng)接口)標(biāo)準(zhǔn),能夠與絕大多數(shù) Unix 操作系統(tǒng)兼容。
他在發(fā)布時,選擇了遵循 GPL 協(xié)議和 GNU 宗旨,所以,正式發(fā)布時,命名為“GNU / linux”。
因?yàn)榱旨{斯小時候被企鵝咬過,印象非常深刻
█Linux 和 Unix 的關(guān)系
這里,我要特別說明一下,Linux 和 Unix 的關(guān)系。
很多人覺得,Linux 就是 Unix,這顯然是不對的。由上面的介紹可以看出,Linux 是開源自由軟件,而 Unix 是對源代碼實(shí)行知識產(chǎn)權(quán)保護(hù)的傳統(tǒng)商業(yè)軟件。兩者是完全不同的東西。
那么,Linux 是不是類 Unix(Unix-like)系統(tǒng)呢?
嚴(yán)格來說,也不行。
Linux 只是風(fēng)格上和 Unix 很像,但它并不含有 Unix 的代碼。UNIX 的源代碼,為 SCO 公司所有。UNIX 的商標(biāo)權(quán)和標(biāo)準(zhǔn)認(rèn)定權(quán),屬于 OPENGROUP 所有。
真正意義上的類 Unix 系統(tǒng),必須要通過官方認(rèn)證(例如蘋果的 MacOS)。而 Linux 并沒有。
█Linux 的發(fā)行版
大家注意,林納斯 1991 年開發(fā)的,并不是一個操作系統(tǒng),而是一個內(nèi)核。
后來,全球開發(fā)者(開源社區(qū)、企業(yè)、個人等)對內(nèi)核代碼進(jìn)行大量的修改和補(bǔ)充,加入 GUI(圖形界面)、應(yīng)用等部分,才形成了相應(yīng)的 Linux 操作系統(tǒng)發(fā)行版,也就是真正的操作系統(tǒng)。
這些發(fā)行版分為社區(qū)版和商業(yè)版。社區(qū)版數(shù)量較多,開發(fā)和維護(hù)的主體是開源社區(qū)。商業(yè)版數(shù)量較少,是在社區(qū)版的基礎(chǔ)上進(jìn)一步優(yōu)化而來。
值得一提的是,發(fā)行版之間也有復(fù)雜的衍生關(guān)系。也就是說,發(fā)行版可以構(gòu)建在另一個發(fā)行版之上。
一些大家可能比較熟悉的發(fā)行版,包括:Ubuntu、Debian、Centos、Fedora、 Redhat Linux、Slackware、Turbolinux、Mandrake、SUSE、紅旗、麒麟等。
Slackware 和 Debian 是最早期的兩個發(fā)行版,創(chuàng)建于 1993 年。
Debian 的后代分支比較龐大。除了 Debian 本身之外,這個分支的主要代表還有 Ubuntu(構(gòu)建在 Debian 之上)、LinuxMint(構(gòu)建在 Ubuntu 之上)、Kali Linux。
Redhat,也就是大家很熟悉的紅帽系列。它的主要發(fā)行版是 Red Hat Enterprise Linux(RHEL),針對企業(yè)客戶。
CentOS 是 RHEL 源代碼再編譯的產(chǎn)物,修正了不少 Bug,穩(wěn)定性更強(qiáng)。
除了 RHEL 之外,Redhat 還向社區(qū)提供另一個免費(fèi)發(fā)行版,即 Fedora。
這些發(fā)行版的具體關(guān)系和發(fā)布時間,如下圖所示:
上面這些操作系統(tǒng),小棗君基本都用過。2005 年我剛工作的時候,用的是 Debian、RHEL、Solaris。后來,開始用 Fedora。再后來,是 CentOS。剛開始的使用,很難受,不適應(yīng)。但是一旦用習(xí)慣了,就覺得很爽。
2020 年底,紅帽公司宣布陸續(xù)停止維護(hù) CentOS,后續(xù)將無法獲得官方升級和補(bǔ)丁。雖然比較可惜,但也給國產(chǎn)操作系統(tǒng)帶來了機(jī)會,我們以后會講。
█未完待續(xù)……
說到這里,大家應(yīng)該對 Unix 和 Linux 操作系統(tǒng)的家族脈絡(luò)有了基本的了解。
下期文章,小棗君會重點(diǎn)聊聊 Windows和 macOS那條線。敬請關(guān)注!
本文來自微信公眾號:鮮棗課堂 (ID:xzclasscom),作者:小棗君
標(biāo)簽: