2022年9月22日:開始時間
代碼下載:https://gitee.com/liu-jun8/cosmos.git
項目開源:GitHub - CosmosPsi/CosmosDocs
操作系統是所有軟件的基礎,所有上層軟件都要依賴于操作系統提供的各種機制,才能運行。
- 內存管理部門、進程管理部門、I/O 管理部門、文件管理部門、通信管理部門
Hello world.c程序編譯過程
#include "stdio.h"
int main(int argc, char const *argv[])
{
printf("Hello World!\n");
return 0;
}
其實,我們也可以手動控制以上這個編譯流程,從而留下中間文件方便研究:
gcc HelloWorld.c -E -o HelloWorld.i 預處理:加入頭文件,替換宏。
gcc HelloWorld.c -S -c -o HelloWorld.s 編譯:包含預處理,將 C 程序轉換成匯編程序。
gcc HelloWorld.c -c -o HelloWorld.o 匯編:包含預處理和編譯,將匯編程序轉換成可鏈接的二進制程序。
gcc HelloWorld.c -o HelloWorld 鏈接:包含以上所有操作,將可鏈接的二進制程序和其它別的庫鏈接在一起,形成可執行的程序文件。
程序裝載執行
計算機必須具備五大基本組成部件:裝載數據和程序的輸入設備;記住程序和數據的存儲器;完成數據加工處理的運算器;控制程序執行的控制器;顯示處理結果的輸出設備。
我們可以通過 gcc -c -S HelloWorld 得到(只能得到其匯編代碼,而不能得到二進制數據)。我們用 objdump -d HelloWorld 程序,得到 /lesson01/HelloWorld.dump,其中有很多庫代碼(只需關注 main 函數相關的代碼),如下圖:
以上圖中,分成四列:第一列為地址;第二列為十六進制,表示真正裝入機器中的代碼數據;第三列是對應的匯編代碼;第四列是相關代碼的注釋。這是 x86_64 體系的代碼,由此可以看出 x86 CPU 是變長指令集。
現代電子計算機正是通過內存中的信息(指令和數據)做出相應的操作,并通過內存地址的變化,達到程序讀取數據,控制程序流程(順序、跳轉對應該圖靈機的讀頭來回移動)的功能。
計算機資源組成
- 總線,負責連接各種其它設備,是其它設備工作的基礎。
2.CPU,即中央處理器,負責執行程序和處理數據運算。 - 內存,負責儲存運行時的代碼和數據。
- 硬盤,負責長久儲存用戶文件數據。
- 網卡,負責計算機與計算機之間的通信。
- 顯卡,負責顯示工作。
- 各種 I/O 設備,如顯示器,打印機,鍵盤,鼠標等。
硬件廠商需要管理和控制這些硬件就要編寫對應的代碼,通常這樣的代碼我們稱之為驅動程序。
金句摘抄
“保持中立,務實求真,對比之下,方見真章。”