【正文】
d c b a a b c S Q c b a a b c d c S Q b a c b a a b c d d c b a c d c b a S Q a a b c d c b b c d c b a S Q a b c d c b a a b c d c b a S Q a b c d c b a a b c d c b a Example Queue: Eventdriven Programs ? 目前流行的視窗系統(tǒng)(如 X Window、 MS Windows)是採用事件驅(qū)動( eventdriven)的模式。 ? 視窗系統(tǒng)必須處理許多不同的事件( event) — 如:鍵盤輸入、滑鼠移動、壓下滑鼠按鍵、放開滑鼠按鍵等等使用者的動作,以及視窗遮蓋、視窗浮現(xiàn)等等螢?zāi)粻顟B(tài)的改變。這些事件依序地擺放在所謂的事件佇列( event queue)中,然後用循覆的方式依序處理(稱為事件迴路( event loop))。 取出下一個事件 判斷是何事件 front rear event queue e1 e2 en呼叫該事件的 處理函式 event loop 加入新事件 Example Queue: Process Queue ? 現(xiàn)代作業(yè)系統(tǒng)( operating system)為了不浪費電腦的強大能力,通常具有多工( multiprocessing)的能力。 ? 程序 (processes)指的是正在執(zhí)行的程式 ? 多工 (multitasking) 指的是電腦在一個時段內(nèi)能夠同時執(zhí)行多個程式。 ? Example: Windows 2020/XP、 Linux、 Mac OS 等 Example Queue: Process Queue ? 作業(yè)系統(tǒng)如何做到多工? ? 作業(yè)系統(tǒng)只要同時載入若干的程式,然後在這些程式間迅速切換執(zhí)行即可,由於 CPU 運算的速度和人認(rèn)知的速度比較起來快了許多,因此造成了這些程式是「同時執(zhí)行」的感覺。 ? 在任一刻 CPU 仍然只能執(zhí)行一個程序。 ? 程序在整個的執(zhí)行過程中,可能處於下列的狀態(tài): ? 新生( new) ? 執(zhí)行( running) ? 預(yù)備( ready) ? 等待( waiting) ? 結(jié)束( terminated) new ready running waiting terminated admitted interrupt scheduler dispatch I/O or event pletion I/O or event wait exit Example Queue: Process Queue Multiple Stacks and Queues 12 ???????nm1???????nmM 0 m1 b[0] t[0] b[1] t[1] b[2] t[2] b[n] niinmitib ??????????? 0,1][][initially range b[i]+1 到 b[i+1] for stack i, 0 = i n b[n] = m1 full See book