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