CPU是如何在WINDOWS下處理多任務(wù)的
CPU是如何在WINDOWS下處理多任務(wù)的
中央處理器(CentralProcessingUnit)的縮寫,即CPU,CPU是電腦中的核心配件,只有火柴盒那么大,幾十張紙那么厚,但它卻是一臺計算機的運算核心和控制核心。下面是學(xué)習(xí)啦小編帶來的關(guān)于CPU是如何在WINDOWS下處理多任務(wù)的的內(nèi)容,歡迎閱讀!
CPU是如何在WINDOWS下處理多任務(wù)?
windows任務(wù)處理可分為兩類:協(xié)同式多任務(wù)和搶先式多任務(wù)處理模式。
1)使用協(xié)同式多任務(wù)處理模式,CPU的分配直接由應(yīng)用程序決定,所以系統(tǒng)性能好壞取決于應(yīng)用程序設(shè)計好壞。而運行搶先式多任務(wù)處理模式,各進程占用CPU的時間由系統(tǒng)調(diào)度程序決定,當(dāng)調(diào)度程序檢測出有比當(dāng)前任務(wù)優(yōu)先級更高的程序事件后,暫停當(dāng)前任務(wù)并將CPU時間分配給優(yōu)先級更高的進程。所有的Win16應(yīng)用程序都在同一臺虛擬機上運行,各程序之間采用的是協(xié)同式多任務(wù)處理。每個Win32應(yīng)用程序和MS-DOS應(yīng)用程序都具有自己專用的虛擬機,其進程按搶先式多任務(wù)處理方式運行。
2)Windows中的多任務(wù)調(diào)度策略
Windows中調(diào)度的任務(wù)有兩種狀態(tài):運行狀態(tài)和等待狀態(tài)。正在運行的任務(wù)處于運行狀 態(tài),當(dāng)該任務(wù)把CPU控制權(quán)交給其他任務(wù)后,就被置為等待狀態(tài)。為了便于任務(wù)調(diào)度和保存每個任務(wù)運行的參數(shù),Windows在裝載應(yīng)用程序時,由LoadModule()函數(shù)創(chuàng)建一任務(wù)數(shù)據(jù)庫(簡稱TDB),該任務(wù)數(shù)據(jù)庫在內(nèi)存中是以鏈表的形式存在,TDB鏈表中的結(jié)點記下了每個任務(wù)切換時的堆棧指針、中斷處理程序地址及此任務(wù)對應(yīng)的模塊句柄和實例句柄等
Windows就是根據(jù)TDB鏈表中存放的各個任務(wù)的數(shù)據(jù)信息來完成任務(wù)調(diào)度的。 對Windows而言,CPU屬于臨界資源,在某一時刻只有一個任務(wù)獨占CPU。為了合理分配CPU,提高系統(tǒng)的性能,Windows根據(jù)任務(wù)是否存在等待事件來進行任務(wù)調(diào)度。如果當(dāng)前任務(wù)沒有事件可供處理,那么就應(yīng)該把控制權(quán)交給其他具有等待事件的任務(wù)。為了記錄每個任務(wù)的等待事件個數(shù),在TDB鏈表中,為每個任務(wù)建立一個事件計數(shù)器(TDB偏移6處的值),系統(tǒng)調(diào)度程序就是根據(jù)該計數(shù)器來進行任務(wù)調(diào)度。我們可以通過Windows中未公開的核心函數(shù)PostEvent()把指定任務(wù)的事件計數(shù)器值增1,人為地偽造一個事件,引起相應(yīng)的任務(wù)被喚醒。 當(dāng)有多個任務(wù)都具有等待事件時,Windows采用的最高優(yōu)先級(HPF)算法進行調(diào)度。為此Windows定義了任務(wù)的優(yōu)先權(quán)值:范圍從-32到+15,任務(wù)的優(yōu)先權(quán)值越小,它的優(yōu)先級就越高,其任務(wù)結(jié)點在TDB鏈表中的位置也越靠前。而在實際應(yīng)用中,絕大多數(shù)Windows應(yīng)用程序的優(yōu)先值都是0,若優(yōu)先權(quán)值相同,則按先來先服務(wù)的原則進行。任務(wù)的優(yōu)先權(quán)值只對具有等待事件的任務(wù)生效,如果一個任務(wù)沒有等待事件,即使優(yōu)先權(quán)再高,也不會被調(diào)度。 若當(dāng)前任務(wù)所分配的時間片用完或當(dāng)前任務(wù)再無等待事件,任務(wù)調(diào)度程序就要釋放當(dāng)前任務(wù)的控制權(quán),把控制權(quán)交給已選中的可調(diào)度任務(wù)。但在WindowsAPI中并沒直接公開這樣一個函數(shù),許多具有釋放控制權(quán)功能的函數(shù)都被隱藏在GetMessage()或PeekMessage()這樣的消息函數(shù)中,當(dāng)應(yīng)用程序在消息環(huán)中沒有消息可供接收時,它就會把控制權(quán)交給別的任務(wù),以防止當(dāng)前任務(wù)進入死循環(huán)。當(dāng)前任務(wù)釋放控制權(quán)以后,如果沒一個任務(wù)被調(diào)度程序選中,調(diào)度程序就會使Windows進入系統(tǒng)空閑狀態(tài),相應(yīng)的電源管理軟件就會使整個系統(tǒng)處于低能耗的睡眠狀態(tài),直至有任務(wù)被喚醒而重新開始正常運轉(zhuǎn)
3)多任務(wù)處理
多任務(wù)處理是指用戶可以在同一時間內(nèi)運行多個應(yīng)用程序,每個應(yīng)用程序被稱作一個任務(wù).Linux、windows就是支持多任務(wù)的操作系統(tǒng),比起單任務(wù)系統(tǒng)它的功能增強了許多。當(dāng)多任務(wù)操作系統(tǒng)使用某種任務(wù)調(diào)度策略允許兩個或更多進程并發(fā)共享一個處理器時,事實上處理器在某一時刻只會給一件任務(wù)提供服務(wù)。因為任務(wù)調(diào)度機制保證不同任務(wù)之間的切換速度十分迅速,因此給人多個任務(wù)同時運行的錯覺。多任務(wù)系統(tǒng)中有3個功能單位:任務(wù)、進程和線程。
相關(guān)閱讀推薦:
1982年,Intel推出80286芯片,它比8086和8088都有了飛躍的發(fā)展,雖然它仍舊是16位結(jié)構(gòu),但在CPU的內(nèi)部集成了13.4萬個晶體管,時鐘頻率由最初的6MHz逐步提高到20MHz。其內(nèi)部和外部數(shù)據(jù)總線皆為16位,地址總線24位,可尋址16MB內(nèi)存。80286也是應(yīng)用比較廣泛的一塊CPU。IBM 則采用80286 推出了AT 機并在當(dāng)時引起了轟動,進而使得以后的 PC 機不得不一直兼容于PC XT/AT。
1985年Intel推出了80386芯片,它X86系列中的第一種32位微處理器,而且制造工藝也有了很大的進步。80386內(nèi)部內(nèi)含27.5萬個晶體管,時鐘頻率從12.5MHz發(fā)展到33MHz。80386的內(nèi)部和外部數(shù)據(jù)總線都是32位,地址總線也是32位,可尋址高達4GB內(nèi)存,可以使用Windows操作系統(tǒng)了。但80386芯片并沒有引起IBM 的足夠重視,反而是 Compaq 率先采用了它。可以說,這是 P C 廠商正式走“兼容”道路的開始,也是AMD 等 CPU 生產(chǎn)廠家走“兼容”道路的開始和 32 位 CPU的開始,直到今天的 P4 和 K7 依然是 32 位的 CPU(局部64位)
1989年,Intel推出80486芯片,它的特殊意義在于這塊芯片首次突破了100萬個晶體管的界限,集成了120萬個晶體管。80486是將80386和數(shù)學(xué)協(xié)處理器80387以及一個8KB的高速緩存集成在一個芯片內(nèi),并且在80X86系列中首次采用了RISC(精簡指令集)技術(shù),可以在一個時鐘周期內(nèi)執(zhí)行一條指令。它還采用了突發(fā)總線(Burst)方式,大大提高了與內(nèi)存的數(shù)據(jù)交換速度。
1989 年,80486 橫空出世,它第一次使晶體管集成數(shù)達到了 120 萬個,并且在一個時鐘周期內(nèi)能執(zhí)行 2 條指令。
看了CPU是如何在WINDOWS下處理多任務(wù)的文章內(nèi)容的人還看:
7.千元級處理器推薦