為什麼要從硬體開始#

學 Linux 之前,先理解計算機的基本運作原理。Linux 的許多設計——裝置檔名、記憶體管理、I/O 排程——都直接對應硬體的運作方式。沒有這層認識,後面學到的指令與設定只是死背,無法融會貫通。

硬體的五大單元#

計算機的核心架構由五個功能單元組成:

  1. 輸入單元:鍵盤、滑鼠、觸控螢幕等,負責將外部資料送入系統
  2. 輸出單元:螢幕、印表機等,負責將處理結果呈現給使用者
  3. CPU 控制單元:協調各單元之間的運作順序
  4. CPU 算術邏輯單元:執行實際的運算與邏輯判斷
  5. 記憶體:暫存正在處理的資料與程式指令

所有的資料都必須先載入主記憶體(RAM),CPU 才能進行處理。這就是為什麼記憶體不足時,系統會明顯變慢——因為必須頻繁地在硬碟與記憶體之間交換資料(swap)。

CPU 架構:RISC 與 CISC#

CPU 的指令集架構分為兩大陣營:

  • CISC(Complex Instruction Set Computing):以 x86/x86_64 為代表(Intel、AMD)。指令功能豐富,單一指令可以完成較複雜的工作,但電路設計複雜、功耗較高
  • RISC(Reduced Instruction Set Computing):以 ARM、MIPS、SPARC 為代表。指令精簡、執行速度快、省電,適合行動裝置與嵌入式系統

你日常開發用的電腦幾乎都是 x86_64 架構,但部署目標可能是 ARM(如 AWS Graviton、Apple Silicon、Raspberry Pi)。理解架構差異,有助於理解為什麼同一份程式碼編譯出的二進位檔不能跨架構執行。

其他關鍵硬體元件#

記憶體的層級#

  • SRAM(靜態隨機存取記憶體):速度極快但昂貴,用作 CPU 快取(L1/L2/L3 Cache)
  • DRAM(動態隨機存取記憶體):主記憶體,速度較慢但容量大
  • ROM(唯讀記憶體):存放 BIOS/UEFI 韌體,開機時最先被執行

儲存裝置#

  • 傳統硬碟(HDD):機械式讀寫,容量大、價格低,但有物理限制(轉速、尋軌時間)
  • 固態硬碟(SSD):無機械結構,讀寫速度快數倍,但有寫入壽命的考量

匯流排與擴充#

主機板上的**匯流排(Bus)**連接所有元件。北橋負責高速裝置(CPU、記憶體、顯示卡),南橋負責低速裝置(硬碟、USB、網卡)。現代架構已將北橋功能整合進 CPU。

資料表示方式#

數字系統#

計算機使用**二進位(Binary)**儲存所有資料。每個 0 或 1 就是一個 bit,8 個 bit 組成 1 個 Byte

常用的容量單位換算:

  • 1 KByte = 1024 Bytes
  • 1 MByte = 1024 KBytes
  • 1 GByte = 1024 MBytes
  • 1 TByte = 1024 GBytes

硬碟廠商通常以十進位計算容量(1 GB = 10 億 Bytes),而作業系統以二進位計算。這就是為什麼買了一顆標示 1TB 的硬碟,在系統裡只顯示約 931 GB。

文字編碼#

  • ASCII:使用 1 Byte 表示英文字母與符號,共 128 個字元
  • Big5:台灣常用的繁體中文編碼,使用 2 Bytes 表示一個中文字
  • UTF-8:Unicode 的變長編碼方式,可表示全世界的文字,已成為現代系統的標準

軟體:從機器語言到作業系統#

程式語言的層級#

  • 機器語言:CPU 直接認識的 0 與 1 指令
  • 組合語言:用助記符號代替二進位,與硬體架構直接對應
  • 高階語言:如 C、Python、Java,需要透過編譯器直譯器轉換為機器語言

作業系統的核心職責#

作業系統(Operating System)是硬體與應用程式之間的橋樑,負責三件事:

  1. 硬體驅動與管理:讓應用程式不需要直接操作硬體
  2. 資源分配:CPU 時間、記憶體空間、I/O 裝置的排程
  3. 提供系統呼叫介面:讓應用程式透過統一的 API 請求系統服務

作業系統的核心(Kernel)才是真正管理硬體的程式。我們平常說的「Linux」嚴格來說指的是核心,而 Ubuntu、CentOS 等是包含核心與各種工具程式的發行版(Distribution)

本章的實務連結#

理解這些基礎,你才能回答實務中的問題:

  • 為什麼 Docker image 要區分 amd64arm64?因為 CPU 架構不同
  • 為什麼資料庫要盡量把資料放在記憶體?因為 RAM 與硬碟的速度差距是數量級的
  • 為什麼亂碼問題層出不窮?因為不同的編碼系統對同一段 Byte 有不同的解讀方式