探索作業系統:核心、啟動和系統呼叫的奧秘

努力的小雨發表於2023-08-24

前言

首先,對於有科班背景的讀者,可以跳過本系列文章。這些文章的主要目的是透過簡單易懂的彙總,幫助非科班出身的讀者理解底層知識,進一步瞭解為什麼在面試中會涉及這些底層問題。否則,某些概念將始終無法理解。這些計算機基礎文章將為你打通知識的任督二脈,祝你在程式設計領域中取得成功!

作業系統

讓我們從作業系統開始講解。作業系統是我們經常使用的,也是電腦不可或缺的一部分。現代計算機系統由一個或多個處理器、主存、印表機、鍵盤、滑鼠、顯示器、網路介面以及各種輸入/輸出裝置構成。

image

但是,我們編寫程式語言時是否需要直接與這些硬體打交道呢?並不需要。你只需要透過點選滑鼠、鍵盤來啟動程式,並滿足你的業務需求。如果在編寫程式碼時還需要考慮與硬體的互動,那你可能無法成功編寫出任何程式碼。你可以理解為,我們所寫的jar包、應用程式等,各種程式語言在底層與作業系統進行互動。比如下面這張圖片:

image

作業系統具有硬體的訪問許可權,可以執行機器能夠執行的任何指令。這樣,你才能夠使用各種RPC框架、檔案讀寫操作等功能。

核心

作業系統核心是核心,市面上有兩大陣營:Windows和Linux。它們各有千秋,Windows主要用於個人使用,而伺服器層主要使用Linux系統。Linux系統因為免費且開源,吸引了很多大佬級別的人物貢獻原始碼。如果公司有定製化需求,可以下載系統原始碼進行自定義。

現在回到正題,如果應用程式都直接與硬體打交道,那將會很繁瑣。因此,核心作為應用連線硬體裝置的橋樑,應用程式只需關注與核心的互動,而不需關心硬體的細節。

現代作業系統的核心通常提供以下四個基本能力:

  • 程式和執行緒管理,決定CPU的使用;
  • 記憶體管理,決定記憶體的分配和回收;
  • 硬體裝置管理,為程式和硬體裝置提供通訊能力;
  • 系統呼叫,作為使用者程式與作業系統之間的介面。

核心具有較高的許可權,可以控制CPU、記憶體、硬碟等硬體,而應用程式的許可權較小。因此,大多數作業系統將記憶體分為兩個區域:核心空間只有核心程式可以訪問,使用者空間專門供應用程式使用。

使用者空間的訪問許可權受限,而核心空間可以訪問所有記憶體空間。因此,我們的Spring專案和應用程式執行在使用者態,當需要訪問核心空間時,程式切換到核心態執行。應用程式如果需要進入核心空間,就需要使用系統呼叫。接下來我們來看一下系統呼叫的過程:

image

計算機啟動過程

這裡簡單引一下ROM,ROM(Read-Only Memory)是一種儲存在計算機主機板上的固化程式。它的主要作用是儲存計算機系統啟動所需的基本輸入輸出系統(BIOS)韌體。當計算機開機時,首先會載入並執行ROM中的BIOS程式,它負責初始化硬體裝置、檢測系統配置和引導作業系統的載入過程。如果你曾經重灌過系統,那麼你對這個介面應該不會感到陌生。

image

與ROM不同,RAM(Random Access Memory)是一種可讀寫的臨時儲存器,也就是記憶體條。它用於臨時儲存執行中的程式和資料,以便CPU可以快速訪問和處理。RAM的讀寫速度非常快,這使得計算機可以在短時間內完成大量的資料操作。

如果你的計算機系統經常出現卡頓或執行緩慢的情況,增加RAM容量可能是一個有效的解決方案。透過增加記憶體條,你可以提高計算機的執行速度和響應能力,使得程式和系統更加流暢。

系統呼叫

我們之前提到過,如果需要切換使用者態到核心態,是需要系統呼叫的,系統呼叫是作業系統提供給應用程式的一種介面,它允許應用程式請求作業系統執行特定的操作或提供特定的服務。應用程式透過系統呼叫來訪問作業系統核心的功能,如檔案操作、網路通訊、程式管理等。

例如多個程式都要往印表機上列印檔案,如果隨便亂列印,就會出現同樣一張紙,第一行是 A 程式輸出的文字,第二行是 B 程式輸出的文字,全亂套了。所以,印表機的直接操作是放在作業系統核心裡面的,程式不能隨便操作。系統呼叫會給程式提供一個核心級別的互斥鎖,他往往比你自己的程式界別的鎖更加可靠。

UNIX程式是由執行特定操作或其他操作的程式碼組成的,並透過系統呼叫來提供某些服務。相比之下,Windows系統中的應用程式通常是事件驅動的。主程式會等待特定事件的發生,然後呼叫相應的程式進行處理。這些事件可以是鍵盤敲擊、滑鼠滑動、滑鼠點選或插入USB驅動等。作業系統會呼叫處理器來處理這些事件,更新螢幕並更新程式的內部狀態。這種設計風格與UNIX系統有所不同。

總的來說,系統呼叫可以被看作是一個辦事大廳,無論你的應用程式要做什麼,都必須透過系統呼叫來完成。系統呼叫提供了訪問作業系統功能的介面,使應用程式能夠請求執行特定的操作或獲取特定的服務。

總結

總結一下,作業系統是計算機不可或缺的一部分,它連線著硬體和應用程式。核心是作業系統的核心,負責管理程式和執行緒、記憶體、硬體裝置以及提供系統呼叫介面。計算機啟動過程中,ROM負責載入並執行BIOS程式,而RAM用於儲存執行中的程式和資料。系統呼叫是作業系統提供給應用程式的介面,透過系統呼叫可以訪問作業系統的功能。系統呼叫相當於一個辦事大廳,應用程式需要透過系統呼叫來完成特定的操作或獲取特定的服務。

相關文章