2008年9月24日 星期三

Preemptive & Non-preemptive , Cooperative Multitasking

Author: 常世勳

先佔式多工(Preemptive Multitasking)
也就是所謂「優先權式多工」或是「先佔式多工」。
在這種模式底下,每個程式的執行時間係由「作業系統」來分配,一個程式的時間使用完之後,系統就會將CPU分配給下一個程式(這種動作稱為context switching),沒有一個程式能獨佔CPU。
這類作業系統較常見的有Windows NT、OS/2,而Windows 95則無法對於16-bit的應用程式做到優先權式多工,至於32-bit應用程式,則不一定是哪種多工模式。
Cooperative Multitasking, Cooperative Multitasking, OS 協同式多工:
一種多工 (multitasking) 的作業方式,每一個行程 (process) 必須提供其他行程使用處理器 (processor) 的機會,使每一個程式都能被處理器執行來達到多工的作業,作業系統 (OS) 在這種方式下扮演的角色只是輔助管理與分配程式間的處理器使用時間,若是一個程式佔據處理器時間不放,則其他程式包括作業系統都沒有機會來執行,且一個當掉或設計有問題的程式可能會使得整個系統當掉。
相對於協同式多工,先佔式多工 (Preemptive Multitasking) 則由作業系統主動分配執行時間給行程或程式,不管行程是否發生問題都能夠維持其他程式不被影響,作業系統並能夠有機會解決有問題的程式。


以JAVA執行緒的時間排程為例:
可奪取優先權 ( preemptive ) :
所有的執行緒皆被給定固定的執行時間, 執行時間使用完畢, 便暫停執行緒的執行。 排成器從等待執行的執行緒中, 挑出優先權最高的執行緒, 將其恢復執行。
不可奪取優先權 ( non-preemptive ) :
執行緒擁有所有 CPU 的執行時間, 任由其個別使用。 只有在呼叫成員方法 yield ( ) 等才可以強制排成器 ( scheduler ) 更換下一個執行緒使用 CPU 時間。

沒有留言: