@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 : 1ps: 應該要好好認真的把 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 工作排程器的切換執行權函式註解,
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:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言