OS(一)

根據哈工大《操作系統》課程以及實驗整理而來,基於linux 0.11內核。鏈接如下:點這裏
基於windows內核的操作系統前置知識可以看 x86 保護模式與內核 知識點彙總

知識點整理

  • 只講原理和只會接口沒什麼區別。
  • fork背後到底做了什麼?什麼是進程?爲什麼可以管理CPU?
  • CMU學習操作系統的方法是從硬件開始搭建操作系統,斯坦福學習操作系統的方法是能夠開發出新的面向操作系統的驅動。
  • 引導扇區加載到0x7c00
  • cr00位就是實模式和保護模式的分界線PE位,31位就是分頁與否的位
  • CS-選擇子
  • GDT表請參考我的 x86 保護模式與內核 知識點彙總
  • linux內核的setup段做了什麼?1.加載了內存大小和硬件參數 2.將system移動到內存爲0的地方 3.建立了GDT表 4.啓動了保護模式 5.運用了jmp指令跳到了內存0處開始system模塊
  • Boot–>SetUp–>head.s–>main.c 使用makefile連接
  • head.s是連接的根節點
  • head繼續初始化,先壓棧,設置頁表,之後ret返回到一個main函數,調用如下的C語言程序
void main(void)
{
mem_init(); 
trapinit(); 
b1k_dev_init();
chr dev_init(); 
tty_init(); 
time init(); 
sched init(); 
buffer_init(); 
hd_init(); 
floppy_init(); 
sti(); 
move to user mode();
if(!fork()) finit();
}
作用
boot 將操作系統從磁盤中讀取
setup 設置了一些參數,啓動了保護模式
head 初始化gdt表,跳入main
mian 含有mian_init,指出空閒內存,空閒設備

做了兩件事:讀入內存和初始化

  • ascii 13回車,10換行
  • 未完待續

編譯指令

  • 編譯內核cd ./linux-0.11/然後make all
  • 刪除編譯make clean
  • 運行編譯好的內核cd ~/oslab/然後./run
  • 彙編級調試:./dbg-asm
  • C語言級調試:先cd ~/oslab然後./dbg-c;之後cd ~/oslab然後./rungdb
  • 訪問linux0.11:cd ~/oslab/然後sudo ./mount-hdc(啓動掛載腳本)之後hdc下就是和0.11內核一樣的文件系統了
  • 密碼是shiyanlou
  • 讀寫完畢,卸載文件系統cd ~/oslab/然後sudo umount hdc
  • .s 彙編語言源程序; 操作: 彙編
    .S彙編語言源程序; 操作: 預處理 + 彙編
    .o文件 只編譯不鏈接形成.o文件。裏面包含了對各個函數的入口標記,描述,當程序要執行時還需要鏈接(link).鏈接就是把多個.o文件鏈成一個可執行文件。
  • -0(注意:這是數字 0,不是字母 O)表示生成 8086 的 16 位目標程序,-a 表示生成與 GNU as 和 ld 部分兼容的代碼,-s 告訴鏈接器 ld86 去除最後生成的可執行文件中的符號信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章