操作系統中睡眠、阻塞、掛起的區別形象解釋
“阻塞(pend)”與“掛起(suspend)”的區別? [
操作系統中睡眠、阻塞、掛起的區別形象解釋
首先這些術語都是對于線程來說的。對線程的控制就好比你控制了一個雇工為你干活。你對雇工的控制是通過編程來實現的。
掛起線程的意思就是你對主動對雇工說:“你睡覺去吧,用著你的時候我主動去叫你,然后接著干活”。
使線程睡眠的意思就是你主動對雇工說:“你睡覺去吧,某時某刻過來報到,然后接著干活”。
線程阻塞的意思就是,你突然發現,你的雇工不知道在什么時候沒經過你允許,自己睡覺呢,但是你不能怪雇工,肯定你這個雇主沒注意,本來你讓雇工掃地,結果掃帚被偷了或被鄰居家借去了,你又沒讓雇工繼續干別的活,他就只好睡覺了。至于掃帚回來后,雇工會不會知道,會不會繼續干活,你不用擔心,雇工一旦發現掃帚回來了,他就會自己去干活的。因為雇工受過良好的培訓。這個培訓機構就是操作系統。
——————————————————————————————————————————————
我是這么認為的:
掛起和阻塞,使進程失去CPU,阻塞一般是被動的需要等待資源,而掛起可以被別的進程給搶占導致掛起,也可以自己主動掛起自己。阻塞一般是TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE,而掛起除了這兩個,還可以是TASK_RUNNING。
——————————————————————————————————————————————
掛起是主動的,一般需要用掛起函數進行操作,若沒有resume的動作,則此任務一直不會ready。而阻塞是因為資源被其他任務搶占而處于休眠態。兩者的表現方式都是從就緒態里“清掉”,即對應標志位清零,只不過實現方式不一樣.
posted on 2013-10-08 11:32 順其自然EVO 閱讀(284) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄