作者mingcloud (逆宇)
看板CSSE
標題[問題] OS - Process State Machine
時間Wed Aug 8 12:22:16 2012
最近在想一個問題
恐龍本的 Process State Machine 應該有五個
分別是
New, Ready(載入記憶體中), Run(搶到CPU),
Block (I/O 或者被 OS 搶走CPU) , Terminated(Normal 結束 或是有異常發生)
今天如果有一個Process搶到CPU之後 Call Sleep 的話,
那在他Sleep 的這段時間,Process的狀態會是
1. Ready
2. Run (還是佔住CPU,等時間到再繼續執行)
3. Block (先Blocked 住,等Timer結束之後再發一個Interrupt把他叫醒)
請問大家覺得比較是哪一種可能?
另外問一個問題, pthread_yield 跟 usleep 的差別是甚麼?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.23.188.78
1F:推 mars90226:我覺得是block,維基上寫not runnable state 08/08 12:39
2F:→ mars90226:很明顯應該不是ready,而run的話,則浪費CPU 08/08 12:40
3F:推 mars90226:usleep一定要停止某段時間,pthread_yield應該是移到 08/08 12:49
4F:→ mars90226:ready queue裡面,CPU再從ready queue抓一個來執行 08/08 12:50
5F:推 ggg12345:Call Sleep顯然是system call,就是被OS搶走,答案很明顯啦 08/08 17:26
6F:→ ggg12345:pthread_yield是讓出cpu給同process裡的其他thread執行. 08/08 20:31