星期二, 10月 17, 2006

Jserv 的 orz microkernel . part I

收到Jserv 的Orz microkernel 了..Lucky :)

因為現在用的pc等級實在太低,光是run 起PlatformBuilder 就loading 過重,所以沒辦法再run qemu 和install build environment,只好先看一下code...



果然是簡潔有力,雖然全部都是用assembly 寫的,但是一點也不影響可讀性 (這就是長年在open source 社群中Coding的習慣?)。

source code的安排也很清楚,依照功能與階層相依性安排folder。

連bootloader, shell, sample appliction 都有 (這真的 都是在端午節下午完成的 ?)

具體而微的OS,沒有多餘的code,因為microkernel 的架構,讓interface切得很清楚。

從這個開始學OS真是再好不過了。


kernel : 整個kernel 在main.asm 中安排得很好:
  • 先是16 bit code, load GDT, IDT, 進入protect mode.
  • 32 bit mode, configure and enable timer.
  • create system service proram - 這些service 都是application喔,不是直接link到kernel image,而是build好,成execution image 後放入kernel 的data block。所以跟一般user application 的地位是相同的。
  • 進入scheduler,完成。
kernel 中,Create Task 時要AllocPage 要求一塊記憶體,這個MM模組就不屬於 service module,而是和kernel link在一起。

kernel 中,Task 模組提供 Create, Kill 和Scheduler 的function.

以上兩部份是 microkernel 的 process 和 memory management,剩下一個microkernel 要有的功能就是 IPC: 這部份 orz microkernel 用message來作,message用 x86 的軟體中斷來提供,從0x30 開始,這部份的INT handler 在kernel boot時,load IDT時就將INT handler都設定好了。

Message Service 有
  • Get Message
  • Send Message
  • Process Message
  • Remove Message
  • Answer Message
Message中的reveiver Task 決定是由kernel (ID=0)還是 service module 來接收這個message。


所以這個kernel 真的是 pure microkernel 呢。



雖然很小,但是包含的東西有好多好多:execution file format, loader, file system(?), shell...先寫到這邊,接著再來看 keyboard interrupt 到 keyboard service module 的path ....

沒有留言:

網誌存檔