在前七章這個作業系統大概實現了使用者程序、系統任務的分層,實現了tty和鍵盤,和一些簡單的系統呼叫,具體現象是在bochs上可實現鍵盤的輸入和特殊輸入(換行),
**具體邏輯如下:
1.首先看看kernel/main.c的kernel_main.c函式
public int kernel_main()
else
strcpy(p_proc->p_name, p_task->name); // name of the process
p_proc->pid = i; // pid
p_proc->ldt_sel = selector_ldt;
memcpy(&p_proc->ldts[0], &gdt[selector_kernel_cs >> 3],
sizeof(descriptor));
p_proc->ldts[0].attr1 = da_c | privilege << 5;
memcpy(&p_proc->ldts[1], &gdt[selector_kernel_ds >> 3],
sizeof(descriptor));
p_proc->ldts[1].attr1 = da_drw | privilege << 5;
p_proc->regs.cs = (0 & sa_rpl_mask & sa_ti_mask) | sa_til | rpl;
p_proc->regs.ds = (8 & sa_rpl_mask & sa_ti_mask) | sa_til | rpl;
p_proc->regs.es = (8 & sa_rpl_mask & sa_ti_mask) | sa_til | rpl;
p_proc->regs.fs = (8 & sa_rpl_mask & sa_ti_mask) | sa_til | rpl;
p_proc->regs.ss = (8 & sa_rpl_mask & sa_ti_mask) | sa_til | rpl;
p_proc->regs.gs = (selector_kernel_gs & sa_rpl_mask) | rpl;
p_proc->regs.eip = (u32)p_task->initial_eip;
p_proc->regs.esp = (u32)p_task_stack;
p_proc->regs.eflags = eflags;
p_proc->nr_tty = 0;
p_task_stack -= p_task->stacksize;
p_proc++;
p_task++;
selector_ldt += 1 << 3;
} proc_table[0].ticks = proc_table[0].priority = 15;
proc_table[1].ticks = proc_table[1].priority = 5;
proc_table[2].ticks = proc_table[2].priority = 5;
proc_table[3].ticks = proc_table[3].priority = 5;
proc_table[1].nr_tty = 0;
proc_table[2].nr_tty = 1;
proc_table[3].nr_tty = 1;
k_reenter = 0;
ticks = 0;
p_proc_ready = proc_table;
init_clock();
init_keyboard();
restart();
while(1){}
}
這個函式在kernel/kernel.asm中實現跳轉
jmp kernel_main
這裡也實現了從組合語言到c語言的跳轉,在這個跳轉之前,cpu都是在執行我們用彙編寫的部分。
而在kernel_main()函式裡最後一句,我們的cpu停在while迴圈。那麼接下來都是我們的cpu發生中斷,然後執行其他程式了,這裡也是作業系統一直幹的事,可以理解為他一直在等待中斷的發生。
2.接下來是中斷。。。。
乙個作業系統的實現 2
接上文 xiongjian 2010.12.22 msn cug live.cn 10 下面開始程序,首先引入幾個基本原則 1 程序表a用來儲存程序a的資訊和程序a切換時,儲存當前a執行時暫存器資訊。定義為 processproc table 1024 表示系統最多可以有1024個程序,proces...
乙個簡單的作業系統
電腦上電後,bios在自檢後會根據使用者指定的裝置啟動作業系統。假設我們指定軟盤為啟動盤,bios會把軟盤的第乙個扇區 512位元組 讀取到記憶體的0x7c00處,如果這個扇區的最後兩個位元組為0xaa55,bios會跳轉到0x7c00處開始執行。我們可以利用這樣乙個過程做乙個簡單的作業系統。我們的...
乙個作業系統的實現 freedos中edit問題
在於淵的乙個作業系統的實現第二版中,第四章開始那裡寫到 假設是x.img,然後把它作為freedos的b盤,格式化後就可以方便的往其中新增檔案了和目錄了 比如使用freedos裡面的edit.exe 可是在freedos裡面我找不到edit.exe啊。不過,格式化 盤也就是x.img那裡我也卡了好一...