2010年11月9日 星期二

OrzMicroKernel case stusy && emulator

最近在研究Jserv大師 所寫的 "OrzMicroKernel", 果然是霧裡看花...有看沒有懂的地步,很多地方還是要靠 Google 來找答案...XD, 不過最重要的核心部份, 我想應該是 Schedule 摟. 可參考OS Kernel 相關閱讀與實作心得﹝一﹞,裡面會定義哪個 task 有使用權,是 Preemptive/Non-preemptive type, 以現今的 real time 系統下, 應該都有 support Preemptive 的架構. 底下我們就用 c 來實作個 Schedule emulator. 1.task 架構 利用 pthread 來模擬 task request os kernel 的型式. 分別會定義 task id, priority, time_out, work_time priority : 為 task 的使用優先權. 0>1>2.... time_out : 為 task 的 requirement time,表示這個 task 最低的容忍時間, 一但 time_out =0 時, 表示目前的 task 要立刻被執行, 可以 interrupt high priority 的 task. work_time : 為 task 所要 run 的時間. 2. queue 架構 normal queue : 為 task 存取的 queue emergency queue : 一但有 task 的 time_out=0, 立刻從 normal queue 中移入 emergency queue. emulator os 會先判斷 emergency queue是否為空, 如果為空的, 就 access normal queue. 做 一般 priority 判斷的結果. 如果不為空的, 則處理 emergency queue. Results:
   @iOS work on normal queue -> id @,0
@NORMAL queue
queue :: id  0,time_out :     9,priority :     0,work_time :     2
queue :: id  1,time_out :     2,priority :     1,work_time :     3
queue :: id  2,time_out :     4,priority :     2,work_time :     3

@EMERGENCY queue

   @iOS work on normal queue -> id @,0
@NORMAL queue
queue :: id  0,time_out :     8,priority :     0,work_time :     1
queue :: id  1,time_out :     1,priority :     1,work_time :     3
queue :: id  2,time_out :     3,priority :     2,work_time :     3

@EMERGENCY queue

   @iOS work on emergency queue -> id @,1
@NORMAL queue
queue :: id  2,time_out :     2,priority :     2,work_time :     3
queue :: id  0,time_out :     7,priority :     0,work_time :     1

@EMERGENCY queue
queue :: id  1,time_out :     0,priority :     1,work_time :     2

   @iOS work on emergency queue -> id @,1
@NORMAL queue
queue :: id  2,time_out :     1,priority :     2,work_time :     3
queue :: id  0,time_out :     6,priority :     0,work_time :     1
ps: 應該要好好認真的把 OS 看熟才是...XD project @ https://github.com/funningboy/SOC_c_model/tree/master/iOS/ Refs: OS Kernel 相關閱讀與實作心得﹝一﹞ http://en.wikipedia.org/wiki/X86_memory_segmentation x86 Instruction Set Reference x86 Disassembly/Loop Examples OrzMicrokernel tasks.asm 工作排程器的切換執行權函式註解,

沒有留言:

張貼留言