Architecture

unix 或 linux 系統如何工作?

  • July 2, 2014

我想知道作業系統是如何工作

  • 它所依賴的基本組件
  • 這些組件如何協同工作
  • 是什麼讓 unix UNIX
  • 是什麼讓它與 Windows 等其他作業系統如此不同

一個 UNIX 系統由幾個部分組成,或者我想稱之為層。

要啟動系統,稱為引導載入程序的程序位於硬碟分區的第一個扇區。它由系統啟動,然後它定位作業系統核心並載入它。

分層

  1. 核心。這是由引導載入程序啟動的中央程序。它為系統(磁碟、記憶體、影片、聲音)進行基本的硬體互動,並提供一個可以啟動程序的虛擬環境。核心還提供了處理硬體設備之間所有微小差異的所有驅動程序。對於外部世界(更高層),每一類設備似乎都以相同一致的方式執行——反過來,程序可以在此基礎上建構。
  2. 後台子系統。只有正常程序,它們不會妨礙您。他們處理遠端登錄等事情,提供中央消息匯流排,並根據硬體/網路事件執行操作。例如,藍牙發現、wifi 管理等。任何網路服務(文件伺服器、列印伺服器、Web 伺服器)也都生活在這個級別。在 UNIX 系統中,這些都只是普通程序。
  3. 命令行工具。這些都是可以啟動的小程序,例如文本編輯、下載文件或管理系統。此時,UNIX 系統對系統管理員完全可用。在 Windows 中,這一層實際上不再存在。
  4. 圖形使用者界面。這些也只是程序,唯一的區別是它們在螢幕上繪製視窗而不是編寫文本。這使系統更易於普通使用者使用。

任何服務或事件都會從底部到頂部。

圖書館 - 通用平台

程序會做很多常見的事情,例如顯示視窗、在螢幕上繪製內容或下載文件。這些東西對於多個程序是相同的,因此程式碼被放在單獨的“庫”文件中(.so文件 - 意味著共享對象)。該庫可以在所有程序之間共享。

對於每一個可以想像的東西,都有一個圖書館。有一個用於讀取/寫入 PNG 文件。有一個用於 JPEG 文件、讀取 XML、加密、影片播放等。

在 Linux 上,應用程序開發人員常用的庫是 Qt 和 Gtk。這些庫在內部使用較低級別的庫來滿足其特定需求,同時以一種一致且簡潔的方式公開其功能,以便應用程序開發人員更快地創建應用程序。

庫提供應用程序平台,程序員可以在該平台上為作業系統建構最終使用者應用程序。系統提供的高質量庫越多,程序員編寫漂亮程序所需的程式碼就越少。

有些庫可以跨不同的作業系統使用(例如,Qt),有些庫實際上是專門綁定到一個作業系統中的。這將限制您的程序只能在該平台上執行。

程序間通信

作業系統的第三個角落是程序可以相互通信的方式。這些是程序間通信 (IPC) 機制。它們以多種形式存在,例如一塊共享記憶體,或者在兩個程序之間建立一個小通道來交換數據。還有一個中央消息匯流排,每個程序都可以在該匯流排上發布消息並接收響應。這用於全球通信,其中不知道哪個程序可以響應。

從庫到作業系統

有了庫、IPC 和核心,程序員就可以為系統服務、使用者管理、配置、管理、辦公、娛樂等建構各種應用程序。這形成了新手使用者公認的“作業系統”的完整套件”。

在 UNIX/Linux 系統中,所有服務都只是程序。所有系統管理工具都只是程序。他們都在做他們的工作,他們可以被束縛在一起。我在http://codingdomain.com/linux/sysadmin/總結了很多主要的程序


Windows 的可區分部分

UNIX 主要是一個由程序、文件和受限權限組成的系統。避免了許多複雜性,使其成為一個強大的系統,同時看起來很容易做到這一點。

詳細地說,這些是可以在 UNIX/Linux 系統中找到的原則:

  • 有統一的方式來訪問資訊。(“一切都只是一個文件”)。您可以將文件、網路套接字、IPC 通道、核心參數和塊設備作為文件打開。因此在 /dev、/sys 和 /proc 中出現了虛擬文件系統。您唯一需要的 API 是open,readclose.
  • 底層系統是透明的。每個程序都在相同的規則下執行。與 Windows 不同,“控制台程序”、“gui 程序”或“後台服務”之間沒有人為的區別。它們都只是程序,碰巧做不同的事情。它們也都可以以相同的方式進行觀察、分析和調試。
  • 設置是可讀的、可編輯的,並且可以使用註釋進行註釋。它們通常具有 INI 樣式的格式,但可能會使用自定義格式來滿足該應用程序的需要。因為它們只是文件,所以可以使用標準工具將它們複製到其他系統、存檔或備份。
  • 沒有大型的“一次性完成”應用程序。口頭禪是“做一件事,做好”。命令行工具可以連結在一起,並且功能強大。獨立的服務(例如 SMTP、IMAP 和 POP 以及登錄)是獨立的子程序,避免了複雜的交織程式碼和安全問題。複雜的桌面環境將繁重的工作委派給各個程序。
  • fork(). 新程序由現有程序複製自身啟動。複製設置所有內容(例如文件句柄),並可選擇將其自身替換為新的程式碼。這使得將相同的安全設置和限制應用於新程序、共享記憶體或設置 IPC 機制變得非常容易。啟動流程的成本也非常低。
  • 文件系統是一棵樹,可以掛載其他磁碟分區和網路共享。還有一種訪問數據的通用方式。常見的系統位置(例如/usr,可以很容易地安裝為網路共享。
  • 該系統是為低使用者權限而建構的。登錄後,每個使用者(除了root)都被限制了他們自己的資源,只執行應用程序和文件。網路服務會盡快降低其權限。有一個明確的方法可以獲得更多特權,或要求某人代表他們執行特權工作。其他所有呼叫都受到程序的限制和限制。
  • 每個程序都將設置儲存在使用者主目錄的隱藏文件/文件夾中。沒有程序會嘗試編寫全域設置文件。
  • 傾向於公開描述的通信機製而不是秘密機製或特定的一對一機制。鼓勵其他供應商和軟體開發人員遵循相同的規範,因此可以輕鬆地連接、交換並保持鬆散耦合。

引用自:https://unix.stackexchange.com/questions/682