根據哈工大《操作系統》課程以及實驗整理而來,基於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 去除最後生成的可執行文件中的符號信息。