哈工大作業系統實驗一 作業系統的引導

2021-09-26 22:15:40 字數 2329 閱讀 5741

哈工大作業系統實驗手冊

實驗資源與參考

不配環境懶人福利:實驗樓

參考閱讀:《linux核心完全注釋》——趙炯,《作業系統原理、實現與實踐》——李治軍,劉巨集偉

bootsect.s能完成setup.s的載入,並跳轉到setup.s開始位址執行。而setup.s向螢幕輸出一行"now we are in setup"。

setup.s獲取一些基本的硬體引數(如記憶體引數、顯示卡引數、硬碟引數等),將其存放在記憶體的特定位址,並輸出到螢幕上。

setup.s不再載入linux核心,保持上述資訊顯示在螢幕上即可。

bootsect.s駐留在引導扇區(0磁軌,0磁頭,第1個扇區)。上電自檢後,rom bios把bootsect載入到0x7c00處。bootsect做4件事:

將自身移動到0x90000處並繼續執行。

利用int 0x13中斷將setup模組讀到0x90200處,一共讀四個扇區。

顯示「loading system...」的字串

再把setup模組後的system模組載入到記憶體0x10000處。

注:由於實驗裁剪linux 0.11的源**,沒有使用root_dev。

彙編看起來有點頭大,大部分原始碼問題都能在《注釋》裡找到答案,幾個比較重要的點:

jmpi    go,initseg      ! 段間跳轉, initseg是目的段位址, go是段內偏移位址
由於自身**移動了位置,所以需要段間跳**

mov ah,#0x03        ! 讀取游標位置

xor bh,bh

int 0x10

mov cx,#22

mov bx,#0x0009 ! page 0, attribute c

mov bp,#msg1 ! es:bp 指向待顯示字串

mov ax,#0x1301 ! write string, move cursor

int 0x10

!開始執行setup**

jmpi 0,setupseg

​msg1:

.byte 13,10

.ascii "welcome to newos"

.byte 13,10,13,10

setup.s主要功能:

利用中斷讀取機器系統資料,儲存到0x90000處(覆蓋了bootsect.s)

將system模組從0x10000-0x8ffff整塊下移到0x00000處。

進入32位保護模式,跳轉到system模組的head.s

注:實驗要求setup不載入後續的system模組,故暫時不必要實現。

! 顯示"now we are in setup"

mov ax,cs

mov ds,ax

mov es,ax

​ mov ah,#0x03 ! 讀取游標位置

xor bh,bh

int 0x10

mov cx,#25

mov bx,#0x0007 ! page 0, attribute normal

mov bp,#msg1 ! es:bp 指向待顯示 字串

mov ax,#0x1301 ! write string, move cursor

int 0x10

注意,在顯示前務必設定cs = es = ds,在顯示時需要es定位字串,現在是setup程式,setupseg = cs = 0x9020顯示硬體引數前,先將ds暫存器重置為0x90000(initseg),在讀取引數時使用了ds暫存器並覆蓋了bootsect.s,所以重置ds,定址硬體引數,ps:彙編中,mov ax, [0]預設為mov ax, ds:[0]後面按照取硬體引數的順序,複製記憶體中的資料列印即可,比如游標資訊:

! 列印游標資訊

mov ax, [0]

call print_hex

call print_nl

ps:根據讀取時,磁碟硬體引數從[0x80]開始。

根據實驗指導在build.c中新增:

if(strcmp(ar**[3],"none")==0) return 0;

哈工大作業系統實驗4 程序同步

1 在ubuntu下,用系統提供的sem open sem close sem wait 和sem post 等訊號量相關的系統呼叫編寫pc.c程式。2 在ubuntu上編譯並執行pc.c,檢查執行結果。用printf 向終端輸出資訊是很自然的事情,但當多個程序同時輸出時,終端也成為了乙個臨界資源,...

哈工大作業系統學習L4之作業系統介面

inte ce electrical circuit linking one device with another and enabling data coded in one format to be transmitted in another 連線上層使用者和作業系統軟體,使用作業系統 在l...

作業系統 哈工大mooc 第一章

l1 什麼是 os os 是計算機硬體和應用之間的一層軟體。為什麼要有 os?為了方便 高效管理和使用硬體。管理哪些硬體?cpu管理 記憶體管理 終端管理 磁碟管理 檔案管理 網路管理 電源管理 多核管理。cpu管理跟多核管理?學習目標 改 cpu 管理 改螢幕輸出 改系統介面 改記憶體管理。l2 ...