在科技行業,創新這個詞幾乎和革命同樣處處氾濫,因此很難將那些誇張的東西與真正使人振奮的東西區分開來。Linux內核被稱爲創新,但它又被稱爲現代計算中最大的奇蹟,一個微觀世界中的龐然大物。 撇開營銷和模式不談,Linux 能夠說是開源世界中最受歡迎的內核,它在近 30 年的生命時光當中引入了一些真正的規則改變者。 |
Cgroups(2.6.24)linux
早在 2007 年,Paul Menage 和 Rohit Seth 就在內核中添加了深奧的控制組(cgroups)功能(cgroups 的當前實現是由 Tejun Heo 重寫的)。這種新技術最初被用做一種方法,從本質上來講,是爲了確保一組特定任務的服務質量。緩存
例如,你能夠爲與你的 WEB 服務相關聯的全部任務建立一個控制組定義(cgroup),爲例行備份建立另外一個 cgroup ,再爲通常操做系統需求建立另外一個 cgroup。而後,你能夠控制每一個組的資源百分比,這樣你的操做系統和 WEB 服務就能夠得到大部分系統資源,而你的備份進程能夠訪問剩餘的資源。微服務
handsome hipster modern man designer working home using laptop at home工具
然而,cgroups 現在變得這麼著名是因其做爲驅動雲技術的角色:容器。事實上,cgroups 最初被命名爲進程容器。當它們被 LXC、CoreOS 和 Docker 等項目採用時,這並不奇怪。測試
就像閘門打開後同樣,「容器」 一詞就像成爲了 Linux 的同義詞同樣,微服務風格的基於雲的「應用」概念很快成爲了規範。現在,已經很難擺脫 cgroups 了,它們是如此廣泛。每個大規模的基礎設施(若是你運行 Linux 的話,可能還有你的筆記本電腦)都以一種合理的方式使用了 cgroups,這使得你的計算體驗比以往任什麼時候候都更加易於管理和靈活。操作系統
例如,你可能已經在電腦上安裝了 Flathub 或 Flatpak,或者你已經在工做中使用 Kubernetes和/或 OpenShift。無論怎樣,若是「容器」這個術語對你來講仍然模糊不清,則能夠 經過 Linux 容器從背後得到對容器的實際理解。線程
LKMM(4.17)設計
2018 年,Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney 以及其餘幾我的的辛勤工做的成果被合併到主線 Linux 內核中,以提供正式的內存模型。Linux 內核內存[一致性]模型(LKMM)子系統是一套描述 Linux 內存一致性模型的工具,同時也產生用於測試的用例(特別命名爲 klitmus)。指針
隨着系統在物理設計上變得愈來愈複雜(增長了更多的中央處理器內核,高速緩存和內存增加,等等),它們就越難知道哪一個中央處理器須要哪一個地址空間,以及什麼時候須要。例如,若是 CPU0 須要將數據寫入內存中的共享變量,而且 CPU1 須要讀取該值,那麼 CPU0 必須在 CPU1 嘗試讀取以前寫入。相似地,若是值是以一種順序方式寫入內存的,那麼指望它們也以一樣的順序被讀取,而無論哪一個或哪些 CPU 正在讀取。blog
即便在單個處理器上,內存管理也須要特定的任務順序。像 x = y 這樣的簡單操做須要處理器從內存中加載 y 的值,而後將該值存儲在 x 中。在處理器從內存中讀取值以前,是不能將存儲在 y 中的值放入 x 變量的。此外還有地址依賴:x[n] = 6 要求在處理器可以存儲值 6 以前加載 n。
LKMM 能夠幫助識別和跟蹤代碼中的這些內存模式。它部分是經過一個名爲 herd 的工具來實現的,該工具(以邏輯公式的形式)定義了內存模型施加的約束,而後列舉了與這些約束一致性的全部可能的結果。
低延遲補丁(2.6.38)
好久之前,在 2011 年以前,若是你想在 Linux 上進行多媒體工做,你必須得有一個低延遲內核。這主要適用於錄音時添加了許多實時效果(如對着麥克風唱歌和添加混音,以及在耳機中無延遲地聽到你的聲音)。有些發行版,如 Ubuntu Studio,可靠地提供了這樣一個內核,因此實際上這沒有什麼障礙,這只不過是當藝術家選擇發行版時的一個重要提醒。
然而,若是你沒有使用 Ubuntu Studio,或者你須要在你的發行版提供以前更新你的內核,你必須跳轉到 rt-patches 網頁,下載內核補丁,將它們應用到你的內核源代碼,編譯,而後手動安裝。
後來,隨着內核版本 2.6.38 的發佈,這個過程結束了。Linux 內核忽然像變魔術同樣默認內置了低延遲代碼(根據基準測試,延遲至少下降了 10 倍)。再也不須要下載補丁,不用編譯。一切都很順利,這都是由於 Mike Galbraith 編寫了一個 200 行的小補丁。
對於全世界的開源多媒體藝術家來講,這是一個規則改變者。從 2011 年開始事情變得如此美好,到 2016 年我本身作了一個挑戰,在樹莓派 v1(型號 B)上建造一個數字音頻工做站(DAW),結果發現它運行得出奇地好。
RCU(2.5)
RCU,即讀-拷貝-更新Read-Copy-Update,是計算機科學中定義的一個系統,它容許多個處理器線程從共享內存中讀取數據。它經過延遲更新但也將它們標記爲已更新來作到這一點,以確保數據讀取爲最新內容。實際上,這意味着讀取與更新同時發生。
典型的 RCU 循環有點像這樣:
1.刪除指向數據的指針,以防止其餘讀操做引用它。
2. 等待讀操做完成它們的關鍵處理。
3. 回收內存空間。
將更新階段劃分爲刪除和回收階段意味着更新程序會當即執行刪除,同時推遲迴收直到全部活動讀取完成(經過阻止它們或註冊一個回調以便在完成時調用)。
雖然 RCU 的概念不是爲 Linux 內核發明的,但它在 Linux 中的實現是該技術的一個定義性的例子。
合做(0.01)
對於 Linux 內核創新的問題的最終答案永遠是協做。你能夠說這是一個好時機,也能夠稱之爲技術優點,稱之爲黑客能力,或者僅僅稱之爲開源,但 Linux 內核及其支持的許多項目是協做與合做的光輝範例。
它遠遠超出了內核範疇。各行各業的人都對開源作出了貢獻,能夠說都是由於 Linux 內核。Linux 曾經是,如今仍然是自由軟件的主要力量,激勵人們把他們的代碼、藝術、想法或者僅僅是他們本身帶到一個全球化的、有生產力的、多樣化的人類社區中。