※ 本文為 swallow.bbs. 轉寄自 cd.twbbs.org 更新時間: 2013-02-06 16:25:05
看板 P_acon
作者 標題 [認真]OS2期末整理(2)
時間 Wed Jun 20 21:00:13 2012
jiffies
OS啟動以後,每發生一次time interrupt,jiffies就會加一
jiffies_32 有可能會overflow
jiffies_64 和jiffiles_32在系統中共用一個位置
除了jiffies以外,還有一個Real Time Clock (RTC),在BIOS裡面
開機的時候讀RTC,之後就用jiffies,就可以算時間
--
tickless OS
如果CPU沒事做,而interrupt不斷送上來,CPU就無法休息,可以降低overhead及省電
何不依照真正的時間需求設定interrupt,OS會看下一個timer什麼時候到期
就可以休息到那個時候
困難點在linux長期依賴jiffies,使用tickless OS的行為要和傳統linux一樣
--
update_process_times() & account_process_tick()
update_process_times(user_mode(get_irq_regs())):知道這個task到底執行多久
timer interrupt上來的時候,會去統計到底是哪個process在使用CPU
還要知道該process是執行於krl_mode或是usr_mode
要拿program counter判斷,program counter大於3G就是krl_mode,反之就是usr_mode
program counter如何取得,interrupt進來的時候ISR會把program counter和暫存器
存到stack裡面,所以去stack檢查就知道了
account_process_tick()
task執行的時候,時間中斷去作調查
計算的時候紀錄使用多少資源,抽樣調查的週期比較大,所以會不太準
--
Software timers
data structure
struct timer_list{
struct list_head entry; //link list
unsigned long expires; //事件發生時間
void (*function)(unsigned long);//function name(參數)
unsigned long data;
struct tvec_t_base_s *base;
}
the linux approach
用index的結構 每一個都是一個call out queue,但是queue裡面沒排序
↑
時間分類 (0~255) ( < 2^14-1) ( < 2^20-1) ...
日 月 年
新增的時候時間複雜度是O(1)
--
the BSD approach
call out queue,把所有的事件排成一個list,時間最短的在前面
裡面紀錄的tick值是該項和前項的差值
--
你們都是我的翅膀! -Unlight-
nonoise __▁__▁╰▼▼ ︿︿︿︿ ▼▼ ▁_▁___
▕◆▌_▁▲▲▼▼ ▇ │▼▼▲▲_▁_ ◆▏
我是不會 ▼▼▕◣◣◣◣│ ─ ──│ │◢◢◢◢▏ 沒、沒想到還
原諒你的! ◆◆▕ ˙ ˙ _◣◣____ _ . . ▏ 能再見到你…
╰ ◢◢◣◣ ◢◢ △△△△△ ◣◣\\\\\◢◢◣◣ ╯
* Origin: 中正築夢園 (CcuDream.twbbs.org) ★ From: 1.175.143.246
[Modified by swallow] From: 1.175.143.246 (2012/06/20 Wed 21:56:30)
[Modified by swallow] From: 1.175.143.246 (2012/06/20 Wed 22:03:49)
*co 推薦:推薦這篇文章 *|06/21 02:42 arnr
*h3615840 推薦:推薦這篇文章 *|06/21 07:43 vgQf
*yo6317 推薦:推薦這篇文章 *|06/21 23:19 ggza
*yo6317 轉錄:本文已轉錄到某秘密看板 *|06/21 23:20 ggza
*lahaha 推薦:推薦這篇文章 *|06/22 06:29 ggzd
*p1234567890 推薦:推薦這篇文章 *|06/22 15:26 omkC
--
※ 看板: Swallow 文章推薦值: 0 目前人氣: 0 累積人氣: 200
回列表(←)
分享