天天看點

《Linux核心設計的藝術:圖解Linux作業系統架構設計與實作原理》——第2章 裝置環境初始化及激活程序0

從現在開始執行main()函數!

系統達到怠速狀态前所做的一切準備工作的核心目的就是讓使用者程式能夠以“程序”的方式正常運作。能夠實作這一目的的标準包括三方面的内容:使用者程式能夠在主機上進行運算,能夠與外設進行互動,以及能夠讓使用者以它為媒介進行人機互動。本章講解的内容就是為了實作這個目标,對裝置環境進行初始化,并激活第一個程序——程序0。

linux 0.11是一個支援多程序的現代作業系統。這就意味着,各個使用者程序在運作過程中,彼此不能互相幹擾,這樣才能保證程序在主機中正常地運算。然而,程序自身并沒有一個天然的“邊界”來對其進行保護,要靠系統“人為”地給它設計一套“邊界”來對其進行保護。這套“邊界”就是系統為程序提供的程序管理資訊資料結構。程序管理資訊資料結構包括:task_struct、task[64]、gdt等。task_struct是每個程序所獨有的結構。它辨別了程序的各項屬性值,包括剩餘時間片、程序執行狀态、局部資料描述符表(ldt)和任務狀态描述符表(tss)等。task[64]和gdt是為管理多程序提供的資料結構。task[64]結構中存儲着系統中所有程序的task_struct指針。如果作業系統需要對多個程序加以比較并選擇,就可以通過周遊task[64]結構來實作。gdt中存儲着一套針對所有程序的索引結構。通過索引項,作業系統可以間接地與每個程序中的ldt和tss建立關系。

本章還将講解作業系統是如何對記憶體、cpu、串行口、顯示器、鍵盤、硬碟、軟碟等硬體進行設定,并将這些硬體所對應的中斷服務程式與idt相挂接,為程序0及其直接、間接建立的所有後續程序與外設溝通建構環境。

繼續閱讀