計算機實驗室之樹莓派:課程 0 簡介

2019-01-09 19:37:00

這個課程簡介不包含實踐內容,但它解釋了一個作業系統的基本概念、組合程式碼、和其它很重要的一些基本原理。如果你想直接進入實踐環節,跳過本課程並不會有什麼問題。

1、作業系統

作業系統就是一個非常複雜的程式。它的任務就是組織安排計算機上的其它程式,包括共用計算機的時間、記憶體、硬體和其它資源。你可能聽說過的一些比較大的桌面作業系統家族有 GNU/Linux、Mac OS X 和 Microsoft Windows。其它的裝置比如電話,也需要作業系統,它可能使用的作業系統是 Android、iOS 和 Windows Phone。 1

由於作業系統是用來與計算機系統上的硬體進行互動的,所以它必須了解系統上硬體專有的資訊。為了能讓作業系統適用於各種型別的計算機,發明了 驅動程式 的概念。驅動程式是為了能夠讓作業系統與特定的硬體進行互動而新增(並可刪除)到作業系統上的一小部分程式碼。在本課程中,我們並不涉及如何建立可刪除的驅動程式,而是專注於特定的一個硬體:樹莓派。

作業系統有各種不同的設計方式,在本課程中,我們只觸及作業系統設計的皮毛。本課程中,我們主要專注於作業系統與各種硬體的互動部分,因為這經常是比較棘手的部分,並且也是在網路上文件和幫助最少的部分。

2、組合程式碼

處理器每秒可以執行上百萬的指令,但是這些指令必須要簡單。

本課程幾乎要完全靠組合程式碼來寫。組合程式碼非常接近計算機的底層。計算機其實是靠一個叫處理器的裝置來工作的,處理器能夠執行像加法這樣的簡單任務,還有一組叫做 RAM 的晶片,它能夠用來儲存數位。當計算機通電後,處理器執行程式設計師給定的一系列指令,這將導致記憶體中的數位發生變化,以及與連線的硬體進行互動。組合程式碼只是將這些機器命令轉換為人類可讀的文字。

常規的程式設計就是,程式設計師使用程式語言,比如 C++、Java、C#、Basic 等等來寫程式碼,然後一個叫編譯器的程式將程式設計師寫的程式碼轉換成組合程式碼,然後進一步轉換為二進位制程式碼。2 二進位制程式碼才是計算機真正能夠理解的東西,但它是人類無法讀取的東西。組合程式碼比二進位制程式碼好一點,至少它的命令是人類可讀的,但它仍然讓人很沮喪。請記住,你用組合程式碼寫的每個命令都是處理器可以直接認識的,因此這些命令設計的很簡單,因為物理電路必須能夠處理每個命令。

Compiler process

和普通程式設計一樣,也有很多不同的組合程式碼程式語言,但與普通程式設計不一樣的是,每個組合程式語言是面對不同的處理器的,每種處理器設計為去理解不同的語言。因此,用一個針對某種機器設計的組合語言所寫的組合程式碼,是不能在其它種類的機器上執行的。很多情況下,這都是一個大災難,因此每個程式都必須在使用它的不同種類的機器上重寫一遍,但對於作業系統,這不是個問題,因為在不同的硬體上它必須得重寫。儘管如此,大多數作業系統都是用 C++ 或 C 來寫的,這樣它們就可以很容易地在不同種類的硬體上使用,只需要重寫那些必須用組合程式碼來實現的部分即可。

現在,你已經準備好進入第一節課了,它是 課程 1 OK01


  1. 要檢視更完整的作業系統列表,請參照:作業系統列表 - Wikipedia ?

  2. 當然,我簡化了普通程式設計的這種解釋,實際上它在很大程度上取決於語言和機器。感興趣的話,參見 編譯器 - Wikipedia ?