待整理。。。
(1)計算機=硬件+軟件
(2)軟件=指令集
(3)計算機的運行:cpu讀取並執行ROM(如BIOS、Flash)或RAM指令集。
|A|對於PC機,一般有BIOS芯片,沒有內置的flash。系統啓動後的流程大體爲:
cpu讀取並執行BIOS芯片裏的指令集進行一些基本的初始化工作
=》通過中斷將“啓動硬盤”首扇區(512字節)裏MBR(前446字節)裏的bootloader(如linux中的grub)裝入內存
=》執行內存裏的bootloader指令,會將kernel從硬盤解壓到內存
=》執行kernel的指令
=》執行init進而啓動必要的服務
=》重複執行某些指令,等待用戶操作。
|B|對於嵌入式系統,一般沒有BIOS芯片,但有內置的flash。bootloader和kernel一般不會放在硬盤,而是在flash(屬於ROM)裏。系統啓動後的流程大體爲:
將bootloader搬運到RAM
=》執行RAM力的bootloader指令,會將kernel從flash裏解壓到RAM
=》執行kernel的指令
=》執行init進而啓動必要的服務
=》重複執行某些指令,等待用戶操作。
(4)bootloader和kernel都是功能性名詞,其本質分別皆爲一塊指令集。
(5)PC機通常離不開硬盤,離開了硬盤,啥也做不了;而嵌入式系統通常有flash,而且是將bootloader和kernel燒寫到flash裏,因此在沒有硬盤的情況下仍可以運行linux的kernel,可以telnet進入根文件系統(當然是內存裏邏輯的文件系統)。
(6)所謂“燒寫”,數據(主要是指令)的拷貝而已。
(7)驅動程序:指示特定硬件工作的指令集。可以隨kernel預先加載到RAM裏備用,也可以在需要用到該硬件設備時insmod。
(8)庫:一觸即發的指令集。
(9)對PC的任何操作都對應着cpu讀取和執行RAM裏的某些指令。比如移動鼠標或敲擊鍵盤時都對應着cpu執行隨kernel加載在RAM裏的鼠標和鍵盤的驅動程序(通過硬件中斷通知操作系統)。
(10)在嵌入式系統中,通常bootloader和kernel都放在flash上,telnet後進入的根文件系統中大部分文件夾裏的文件數據都暫時存在RAM裏。硬盤通常只是掛載在一個或多個文件夾。
(11)指令並不是一定要搬運(拷貝)到內存(RAM)才能執行,直接從硬盤上或其他存儲設備上讀取並執行指令也是可以的。比如PC機裏,cpu可 以直接讀取並執行BIOS芯片(屬於ROM)裏的指令。但操作系統通常都是將硬盤上的指令搬運到內存裏再執行的主要原因是內存的讀寫速度遠遠高於硬盤,因 此寧願先花些時間和精力將要執行的指令搬到內存,所謂“長痛不如短痛”。
(12)文件系統建立在硬盤或flash等硬件驅動的基礎上,這些驅動提供最基本的讀寫函數。而文件系統對應了一種文件組織設計和實現。對硬件的操作是通過文件系統實現的接口進而調用硬件驅動而實現的。這些驅動和文件系統的指令都屬於操作系統(內核)的。