實時操作系統(tǒng)任務(wù)管理與調(diào)度課件_第1頁
實時操作系統(tǒng)任務(wù)管理與調(diào)度課件_第2頁
實時操作系統(tǒng)任務(wù)管理與調(diào)度課件_第3頁
實時操作系統(tǒng)任務(wù)管理與調(diào)度課件_第4頁
實時操作系統(tǒng)任務(wù)管理與調(diào)度課件_第5頁
已閱讀5頁,還剩177頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

嵌入式實時操作系統(tǒng)

及應(yīng)用開發(fā)第五章任務(wù)管理與調(diào)度嵌入式實時操作系統(tǒng)

及應(yīng)用開發(fā)第五章任務(wù)管理與調(diào)度主要內(nèi)容進程與線程任務(wù)任務(wù)管理任務(wù)調(diào)度優(yōu)先級反轉(zhuǎn)主要內(nèi)容進程與線程第一節(jié)

進程與線程

程序運行的方式進程的定義線程的定義第一節(jié)

進程與線程程序運行的方式程序的運行方式順序運行作業(yè)的運行總是一個一個地順著來,完成一個作業(yè)后再運行下一個。在一個作業(yè)運行中途,決不會突然插入另一個作業(yè)運行。順序運行最容易實現(xiàn),常見于早期的單道批處理系統(tǒng)中

程序的運行方式順序運行程序的運行方式并發(fā)運行允許多個程序共享CPU,在這種方式下,系統(tǒng)的資源不再被某一個程序獨占,而是由多個程序共享。

程序的運行方式并發(fā)運行簡單地說,就是能用一個處理器并發(fā)(注意,不是同時?。┑剡\行多個程序的計算機管理系統(tǒng)。并發(fā):由同一個處理器輪換地運行多個程序?;蛘哒f是由多個程序輪班地占用處理器這個資源。且在占用這個資源期間,并不一定能夠把程序運行完畢。并發(fā)過程示意圖處理器如何進行程序的切換?并發(fā)過程處理器如何進行程序的程序的切換(兩句話)處理器是個傻瓜,PC讓它干啥,它就干啥。PC是個指路器,它指向哪兒,處理器就去哪兒。從此可以知道,哪個程序占有了PC,哪個程序就占有了處理器。

=PC程序的切換(兩句話)處理器是個傻瓜,PC讓它干啥,它就干啥。進程與程序進程與程序進程與程序程序是存放在磁盤上的一系列代碼和數(shù)據(jù)的可執(zhí)行映像,是一個靜止的實體。進程:可并發(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的運行過程。程序是靜止的,進程是動態(tài)的,有狀態(tài)轉(zhuǎn)換。進程與程序程序是存放在磁盤上的一系列代碼和數(shù)據(jù)的可執(zhí)行映像,進程與程序進程的四要素:1、作為一個進程,要有一段程序供其執(zhí)行。2、有進程專用的內(nèi)核空間堆棧。

3、在內(nèi)核中有一個task_struct數(shù)據(jù)結(jié)構(gòu),即“進程控制塊”。

4、有獨立的用戶空間

進程與程序進程的四要素:線程的引入早期的進程,包含了以下兩個方面的內(nèi)容:

資源。進程是資源分配的基本單位,一個進程包括一個保存進程映像的虛擬地址空間、主存、I/O設(shè)備和文件等資源。調(diào)度執(zhí)行。進程作為操作系統(tǒng)的調(diào)度實體,是調(diào)度的基本單位。

進程是一個龐大的結(jié)構(gòu)型實體,其PCB結(jié)構(gòu)包含的內(nèi)容相當多,每創(chuàng)建一個進程,系統(tǒng)無論在時間或空間上都要花費較大的開支。線程的引入早期的進程,包含了以下兩個方面的內(nèi)容:線程定義線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),一個線程可以創(chuàng)建和撤銷另一個線程;線程定義線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,使用線程的優(yōu)勢:創(chuàng)建:在一個已有進程中創(chuàng)建一個新線程比創(chuàng)建一個全新的進程所需的時間開銷少;終止:終止一個線程比終止一個進程所花費的時間少;切換:線程切換比進程切換所花費的時間少;通信:使同一進程內(nèi)部不同線程之間的通信效率得到顯著提高。在大多數(shù)操作系統(tǒng)中,不同進程之間的通信需要內(nèi)核的干預(yù),而同一進程內(nèi)部不同線程之間則可直接通信。

使用線程的優(yōu)勢:單進程/單線程模型單進程/多線程模型多進程/多線程模型多進程/單線程模型單進程/單線程模型單進程/多線程模型多進程/多線程模型多進程第二節(jié)

任務(wù)

任務(wù)的定義及其主要特性任務(wù)的內(nèi)容任務(wù)的分類任務(wù)參數(shù)第二節(jié)

任務(wù)任務(wù)的定義及其主要特性任務(wù)在嵌入式實時系統(tǒng)中任務(wù)(task):任務(wù)是一個具有獨立功能的無限循環(huán)的程序段的一次運行活動通常為進程(process)和線程(thread)的統(tǒng)稱任務(wù)是調(diào)度的基本單位任務(wù)在嵌入式實時系統(tǒng)中HighPriorityTaskLowPriorityTaskTaskTaskTaskTaskTaskTaskEventEventEachTaskInfiniteLoopImportanceSplittinganapplicationintoTasksHighPriorityTaskLowPriority任務(wù)任務(wù)通常包含一個具有無限循環(huán)的程序/*ioTaskimplementsdataobtainingandhandlingcontinuously*/voidioTask(void){ intdata;

initial();/*Thefollowingsentencesgetdataandhandledatacontinuously*/

while(TRUE) { data=getData(); handleData(data); }}任務(wù)任務(wù)通常包含一個具有無限循環(huán)的程序/*ioTaskim任務(wù)

任務(wù)的特性:動態(tài)性并發(fā)性異步獨立性任務(wù)任務(wù)的特性:任務(wù)

任務(wù)的內(nèi)容:

代碼:一段可執(zhí)行的程序。數(shù)據(jù):程序所需要的相關(guān)數(shù)據(jù)(變量、工作空間、緩沖區(qū))

堆棧程序執(zhí)行的上下文環(huán)境TCB

任務(wù)任務(wù)的內(nèi)容:任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運行時與處理器之間的關(guān)系處理器通過兩個指針寄存器(PC和SP)來與任務(wù)代碼和任務(wù)堆棧建立聯(lián)系并運行它寄存器組程序運行環(huán)境任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運行時與處理器通過兩個任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時的問題任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)代碼任務(wù)堆棧內(nèi)存?當有多個任務(wù)時,處理器中的運行環(huán)境應(yīng)該怎么辦?寄存器組程序運行環(huán)境任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時的問題任務(wù)代碼任務(wù)程序

虛擬處理器PCSP

虛擬處理器PCSP

虛擬處理器PCSP

虛擬處理器PCSP調(diào)度器多任務(wù)時任務(wù)與處理器之間關(guān)系的處理程序處理器PCSP在內(nèi)存中為每個任務(wù)創(chuàng)建一個虛擬的處理器(處理器部分的運行環(huán)境由操作系統(tǒng)的調(diào)度器按某種規(guī)則來進行這兩個復(fù)制工作復(fù)制當需要運行某個任務(wù)時就把該任務(wù)的虛擬處理器復(fù)制到實際處理器中復(fù)制當需要中止當前任務(wù)時,則把任務(wù)對應(yīng)的虛擬處理器復(fù)制到內(nèi)存復(fù)制再把另一個需要運行的任務(wù)的虛擬處理器復(fù)制到實際處理器中寄存器組寄存器組也就是說,任務(wù)的切換是任務(wù)運行環(huán)境的切換程序虛擬PCSP虛擬PCSP虛擬PCSP虛擬虛擬處理器應(yīng)該存儲的主要信息:1。程序的斷點地址(PC)2。任務(wù)堆棧指針(SP)3。程序狀態(tài)字寄存器(PSW)4。通用寄存器內(nèi)容5。函數(shù)調(diào)用信息(已存在于堆棧)另外再用一個數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆棧指針(SP),這個數(shù)據(jù)結(jié)構(gòu)叫做任務(wù)控制塊,它除了保存任務(wù)堆棧指針之外還要負責保存任務(wù)其他信息。這些內(nèi)容通常保存在任務(wù)堆棧中,這些內(nèi)容也常叫做任務(wù)的上下文。任務(wù)控制塊是由操作系統(tǒng)另行構(gòu)造的一個數(shù)據(jù)結(jié)構(gòu),每個任務(wù)都有一個。任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)控制塊其實,程序切換的關(guān)鍵是把程序的私有堆棧指針賦予處理器的堆棧指針SP實質(zhì)上系統(tǒng)是通過SP的切換來實現(xiàn)程序的切換的。要建立一個概念:具有控制塊的程序才是一個可以被系統(tǒng)所運行的任務(wù)。程序代碼、私有堆棧、任務(wù)控制塊是任務(wù)的三要件。任務(wù)控制塊提供了運行環(huán)境的存儲位置。虛擬處理器應(yīng)該存儲的主要信息:另外再用一個數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆任務(wù)任務(wù)與程序的區(qū)別:任務(wù)能真實地描述工作內(nèi)容的并發(fā)性,而程序不能;程序是任務(wù)的組成部分;除程序外,任務(wù)還包括數(shù)據(jù)、堆棧及其上下文環(huán)境等內(nèi)容;程序是靜態(tài)的,任務(wù)是動態(tài)的;任務(wù)有生命周期,有誕生、有消亡,是短暫的;而程序是相對長久的;一個程序可對應(yīng)多個任務(wù),反之亦然;任務(wù)具有創(chuàng)建其他任務(wù)的功能,而程序沒有。任務(wù)任務(wù)與程序的區(qū)別:任務(wù)任務(wù)的分類:①按照到達情況的可預(yù)測性,任務(wù)可以劃分為:周期任務(wù)(periodictask),非周期任務(wù)(non-periodictask)②按照重要程度,可分為:關(guān)鍵任務(wù)(criticaltask),非關(guān)鍵任務(wù)(noncriticaltask)任務(wù)任務(wù)的分類:任務(wù)1任務(wù)2任務(wù)3內(nèi)核內(nèi)核代碼內(nèi)核數(shù)據(jù)棧數(shù)據(jù)任務(wù)控制塊代碼棧數(shù)據(jù)任務(wù)控制塊代碼棧數(shù)據(jù)任務(wù)控制塊代碼任務(wù)1任務(wù)2任務(wù)3多任務(wù)系統(tǒng)示意圖任務(wù)任務(wù)1任務(wù)2任務(wù)3內(nèi)核內(nèi)核代碼內(nèi)核數(shù)據(jù)棧數(shù)據(jù)任務(wù)代碼棧數(shù)據(jù)任任務(wù)任務(wù)的參數(shù)優(yōu)先級(priority):任務(wù)的優(yōu)先級分為靜態(tài)優(yōu)先級和動態(tài)優(yōu)先級。周期(period):表示任務(wù)周期性執(zhí)行的間隔時間。計算時間(computationtime):也被稱為是任務(wù)的執(zhí)行時間(executiontime)。就緒時間(readytime):具備了被執(zhí)行所需要條件時的時間截止時間(deadline):任務(wù)需要在該時間到來之前被執(zhí)行完成。截止時間可以分為強截止時間(harddeadline)和弱截止時間(softdeadline)兩種情況:擁有關(guān)鍵任務(wù)的實時系統(tǒng)又被稱為強實時統(tǒng),否則稱為弱實時系統(tǒng)。任務(wù)任務(wù)的參數(shù)第三節(jié)

任務(wù)管理任務(wù)狀態(tài)與變遷任務(wù)控制塊任務(wù)切換任務(wù)隊列優(yōu)先級位圖算法任務(wù)管理機制第三節(jié)

任務(wù)管理任務(wù)狀態(tài)與變遷任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)會在不同的狀態(tài)之間進行轉(zhuǎn)換,即任務(wù)狀態(tài)的變遷就緒態(tài)運行態(tài)等待態(tài)獲得CPU被高優(yōu)先級任務(wù)搶占或超時獲得資源需要資源任務(wù)狀態(tài)變遷任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)會在不同的狀態(tài)之間進行轉(zhuǎn)換,即任務(wù)1任務(wù)2任務(wù)3調(diào)度程序05101520253035404550運行等待就緒三個任務(wù)進行狀態(tài)轉(zhuǎn)換的過程

包含三個任務(wù)和一個調(diào)度程序。調(diào)度程序用來確定下一個需要投入運行的任務(wù),因此調(diào)度程序本身也需要占用一定的處理時間。

任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)1任務(wù)2任務(wù)3調(diào)度0510152025303540455任務(wù)的狀態(tài)及其轉(zhuǎn)換正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行時,該任務(wù)就會把CPU的使用權(quán)讓給別的任務(wù)而使任務(wù)進入等待狀態(tài)。任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時的狀態(tài)叫做任務(wù)的睡眠狀態(tài)

系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進行了就緒登記,這時任務(wù)的狀態(tài)叫做就緒狀態(tài)。

處于就緒狀態(tài)的任務(wù)如果經(jīng)調(diào)度器判斷獲得了CPU的使用權(quán),則任務(wù)就進入運行狀態(tài)

一個正在運行的任務(wù)一旦響應(yīng)中斷申請就會中止運行而去執(zhí)行中斷服務(wù)程序,這時任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)

正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行

由于系統(tǒng)存在著多個任務(wù),于是系統(tǒng)如何來識別并管理一個任務(wù)就是一個需要解決的問題。識別一個任務(wù)的最直接的辦法是為每一個任務(wù)起一個名稱。

系統(tǒng)必須為每個任務(wù)創(chuàng)建一個保存與該任務(wù)有關(guān)的相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),這個數(shù)據(jù)結(jié)構(gòu)就叫做該任務(wù)的任務(wù)控制塊(TCB)。任務(wù)的管理-任務(wù)控制塊用來記錄任務(wù)的堆棧指針、任務(wù)的當前狀態(tài)、任務(wù)的優(yōu)先級別等一些與任務(wù)管理有關(guān)的屬性的表就叫做任務(wù)控制塊

任務(wù)控制塊是不是像我們?nèi)嗽谝粋€國家中的身份證?(其實,系統(tǒng)中的所有資源都應(yīng)該有身份證。)任務(wù)控制塊就相當于是一個任務(wù)的身份證,沒有任務(wù)控制塊的任務(wù)是不能被系統(tǒng)承認和管理的

由于系統(tǒng)存在著多個任務(wù),于是系統(tǒng)必須為每個任務(wù)tasknametaskIDtaskstatustaskprioritytaskcontext(registersandflagsofCPU)……任務(wù)控制塊示意圖任務(wù)的管理-任務(wù)控制塊taskname任務(wù)控制塊示意圖任務(wù)的管理-任務(wù)控制塊任務(wù)在內(nèi)存中的結(jié)構(gòu)實時操作系統(tǒng)任務(wù)管理與調(diào)度課件任務(wù)切換任務(wù)切換(contextswitching)保存當前任務(wù)的上下文,并恢復(fù)需要執(zhí)行的任務(wù)的上下文的過程。當發(fā)生任務(wù)切換時:當前正在運行的任務(wù)的上下文就需要通過該任務(wù)的任務(wù)控制塊保存起來;把需要投入運行的任務(wù)的上下文從對應(yīng)的任務(wù)控制塊中恢復(fù)出來。任務(wù)切換任務(wù)切換(contextswitching)任務(wù)1任務(wù)2任務(wù)3調(diào)度程序05101520253035404550運行等待就緒在時刻8即發(fā)生了任務(wù)切換,任務(wù)1的上下文需要保存到任務(wù)1的任務(wù)控制塊中去。經(jīng)過調(diào)度程序的處理,在時刻10任務(wù)2投入運行,需要把任務(wù)2的任務(wù)控制塊中關(guān)于上下文的內(nèi)容恢復(fù)到CPU的寄存器中。

任務(wù)的管理-任務(wù)切換任務(wù)1任務(wù)2任務(wù)3調(diào)度0510152025303540455任務(wù)1任務(wù)2實時內(nèi)核調(diào)度程序保存任務(wù)1的上下文到TCB1從TCB2恢復(fù)任務(wù)2的上下文……保存任務(wù)2的上下文到TCB2從TCB1恢復(fù)任務(wù)1的上下文……時間任務(wù)的管理-任務(wù)切換任務(wù)1任務(wù)2實時內(nèi)核調(diào)度程序保存任務(wù)1的上下文到TCB1從T任務(wù)切換任務(wù)切換具有如下基本步驟:保存任務(wù)上下文環(huán)境;更新當前處于運行狀態(tài)的任務(wù)的任務(wù)控制塊的內(nèi)容,如把任務(wù)的狀態(tài)由運行狀態(tài)改變?yōu)榫途w或是等待狀態(tài);把任務(wù)的任務(wù)控制塊移到相應(yīng)的隊列(就緒隊列或是等待隊列);選擇另一個任務(wù)進行執(zhí)行:調(diào)度;改變需要投入運行的任務(wù)的任務(wù)控制塊的內(nèi)容,把任務(wù)的狀態(tài)變?yōu)檫\行狀態(tài);根據(jù)任務(wù)控制塊,恢復(fù)需要投入運行的任務(wù)的上下文環(huán)境。任務(wù)切換任務(wù)切換具有如下基本步驟:任務(wù)的管理-任務(wù)上下文切換時間

保存

調(diào)度

恢復(fù)保存當前運行任務(wù)上下文的時間選擇下一個任務(wù)的調(diào)度時間將要運行任務(wù)的上下文的恢復(fù)時間取決于任務(wù)上下文的定義和處理器的速度。不同種類的處理器,任務(wù)上下文的定義不同,其內(nèi)容有多有少。任務(wù)的管理-任務(wù)上下文切換時間保存任務(wù)的管理-任務(wù)切換任務(wù)切換時機中斷、自陷運行任務(wù)因缺乏資源而被阻塞時間片輪轉(zhuǎn)調(diào)度時高優(yōu)先級任務(wù)處于就緒時任務(wù)的管理-任務(wù)切換任務(wù)切換中斷、自陷運行任務(wù)因缺乏資源而被任務(wù)的管理-任務(wù)隊列任務(wù)隊列通過任務(wù)控制塊實現(xiàn)對系統(tǒng)中所有任務(wù)的管理新任務(wù)CPU就緒隊列等待隊列超時調(diào)度等待資源獲得資源釋放CPU單就緒隊列和單等待隊列任務(wù)的管理-任務(wù)隊列任務(wù)隊列通過任務(wù)控制塊實現(xiàn)對系統(tǒng)中所有任任務(wù)的管理-任務(wù)隊列隊列由任務(wù)控制塊構(gòu)成

tasknametaskIDtaskstatustaskprioritytaskcontext…tasknametaskIDtaskstatustaskprioritytaskcontext…tasknametaskIDtaskstatustaskprioritytaskcontext…Head隊列TCB1TCB2TCBnNULL任務(wù)隊列任務(wù)的管理-任務(wù)隊列隊列由任務(wù)控制塊構(gòu)成Head隊列TCB新任務(wù)CPU就緒隊列資源1等待隊列超時調(diào)度等待資源1獲得資源1釋放CPU資源2等待隊列等待資源2獲得資源2資源n等待隊列等待資源n獲得資源n……單就緒隊列和多等待隊列任務(wù)的管理-任務(wù)隊列新任務(wù)CPU就緒隊列資源1等待隊列超時調(diào)度等待資源1獲得資源任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法

為了能夠使系統(tǒng)清楚地知道,系統(tǒng)中哪些任務(wù)已經(jīng)就緒,哪些還沒有就緒,OS在RAM中設(shè)立了一個記錄表,系統(tǒng)中的每個任務(wù)都在這個表中占據(jù)一個位置,并用這個位置的狀態(tài)(1或者0)來表示任務(wù)是否處于就緒狀態(tài),這個表就叫做任務(wù)就緒狀態(tài)表,簡稱叫任務(wù)就緒表

任務(wù)就緒表就是一個二維數(shù)組OSRdyTbl[]任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法為了能夠使系統(tǒng)清楚地為加快訪問任務(wù)就緒表的速度,系統(tǒng)定義了一個變量OSRdyGrp來表明就緒表每行中是否存在就緒任務(wù)。為加快訪問任務(wù)就緒表的任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法

35:00100011任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法35:00100下標二進制值000000001100000010200000100300001000400010000500100000601000000710000000優(yōu)先級映射表priorityMapTablecharpriorityMapTable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};priorityMapTable的數(shù)組元素的下標與任務(wù)優(yōu)先級的高三位或低三位相對應(yīng)。priorityMapTable的數(shù)組元素對應(yīng)的二進制值中,位為1的位表示priorityReadyGroup或是priorityReadyTable[]的對應(yīng)位也為1。35:00100011下標二進制值000000001100000010200000CharpriorityDecisionTable[]={0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*//*0x10to0x1F

*//*0x60to0x6F

*//*0x70to0x7F

*//*0x80to0x8F

*//*0x90to0x9F

*//*0xA0to0xAF

*//*0xB0to0xBF

*//*0xC0to0xCF

*//*0xD0to0xDF

*//*0xE0to0xEF

*//*0x20to0x2F

*//*0x30to0x3F

*//*0x40to0x4F

*//*0x50to0x5F

*//*0xF0to0xFF

*/priorityReadyTable[3]contains0xE4priorityReadyGroupcontains0x68};3=priorityDecisionTable[0x68];2=priorityDecisionTable[0xE4];26=(3<<3)+2;以priorityReadyGroup或是priorityReadyTable[]數(shù)組元素的值為索引,獲取該值對應(yīng)二進制表示中1出現(xiàn)的最低二進制位的序號(0-7)。

優(yōu)先級判定表charpriorityDecisionTable[256]CharpriorityDecisionTable[]任務(wù)進入就緒態(tài)

priorityReadyGroup|=priorityMapTable[priority>>3];priorityReadyTable[priority>>3]|=priorityMapTable[priority&0x07];35:00100

011OSRdyGrp765432107654321015141312111098232221201918171631302928272625243938373635343332474645544342414055545352515049486362616059585756OSRdyTblOSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]0001000000001000任務(wù)進入就緒態(tài)35:00100011OSRdyGrp任務(wù)退出就緒態(tài)

if((priorityReadyTable[priority>>3]&=~priorityMapTable[priority&0x07])==0)

priorityReadyGroup&=~priorityMapTable[priority>>3];

35:00100

011OSRdyGrp765432101514131211109823222120191817163130292827262524393837363534333247464554434241405554535251504948636261605958575676543210OSRdyTbl00001000->11110111

00010000->11101111OSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]任務(wù)退出就緒態(tài)35:00100011OSRdyGrp獲取進入就緒態(tài)的最高優(yōu)先級

high3Bit=priorityDecisionTable[priorityReadyGroup];low3Bit=priorityDecisionTable[priorityReadyTable[high3Bit]]; priority=(high3Bit<<3)+low3Bit;35:00100

011OSRdyGrp7654321015141312111098232221201918171631302928272625241000100047464554434241405554535251504948636261605958575601010000OSRdyTbl0x50->4=high3Bit0x88->3=low3BitOSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]獲取進入就緒態(tài)的最高優(yōu)先級35:00100011OS任務(wù)管理機制任務(wù)管理用來實現(xiàn)對任務(wù)狀態(tài)的直接控制和訪問。創(chuàng)建任務(wù)刪除任務(wù)掛起任務(wù)喚醒任務(wù)設(shè)置任務(wù)屬性改變?nèi)蝿?wù)優(yōu)先級獲取任務(wù)信息…任務(wù)管理機制任務(wù)管理用來實現(xiàn)對任務(wù)狀態(tài)的直接控制和訪問。創(chuàng)建任務(wù)的管理機制-創(chuàng)建任務(wù)任務(wù)創(chuàng)建通常需要完成以下工作:獲得任務(wù)控制塊TCB根據(jù)實時內(nèi)核用戶提供的信息初始化TCB為任務(wù)分配一個可以唯一標識任務(wù)的ID使任務(wù)處于就緒狀態(tài),把任務(wù)放置到就緒隊列進行任務(wù)調(diào)度處理任務(wù)的管理機制-創(chuàng)建任務(wù)任務(wù)創(chuàng)建通常需要完成以下工作:任務(wù)的管理機制-刪除任務(wù)任務(wù)刪除通常需要進行以下工作:根據(jù)指定的ID,獲得對應(yīng)任務(wù)的TCB把任務(wù)的TCB從隊列中取出來,掛入空閑TCB隊列釋放任務(wù)所占用的資源任務(wù)的管理機制-刪除任務(wù)任務(wù)刪除通常需要進行以下工作:任務(wù)的管理機制-掛起任務(wù)掛起任務(wù)通常需要進行以下工作:根據(jù)指定的ID,獲得對應(yīng)任務(wù)的TCB把任務(wù)的狀態(tài)變?yōu)榈却隣顟B(tài),并把TCB放置到等待隊列如果任務(wù)自己掛起自己,進行任務(wù)調(diào)度任務(wù)的管理機制-掛起任務(wù)掛起任務(wù)通常需要進行以下工作:任務(wù)的管理機制-任務(wù)喚醒解掛任務(wù)通常需要進行以下工作:根據(jù)指定的ID,獲得對應(yīng)任務(wù)的TCB如果任務(wù)在等待其他資源,任務(wù)將仍然處于等待狀態(tài);否則,把任務(wù)的狀態(tài)變?yōu)榫途w狀態(tài),并把TCB放置到就緒隊列進行任務(wù)調(diào)度任務(wù)的管理機制-任務(wù)喚醒解掛任務(wù)通常需要進行以下工作:任務(wù)的管理機制-任務(wù)睡眠任務(wù)睡眠通常需要進行以下工作:修改任務(wù)狀態(tài),把任務(wù)狀態(tài)變?yōu)榈却隣顟B(tài)把任務(wù)TCB放置到時間等待鏈進行任務(wù)調(diào)度任務(wù)的管理機制-任務(wù)睡眠任務(wù)睡眠通常需要進行以下工作:第四節(jié)

任務(wù)調(diào)度任務(wù)調(diào)度時間片輪轉(zhuǎn)調(diào)度基于優(yōu)先級的可搶占調(diào)度第四節(jié)

任務(wù)調(diào)度任務(wù)調(diào)度任務(wù)調(diào)度要解決的問題WHEN:何時分配CPU任務(wù)調(diào)度的時機WHAT:按什么原則分配CPU

任務(wù)調(diào)度算法HOW:如何分配CPU任務(wù)調(diào)度過程任務(wù)調(diào)度任務(wù)調(diào)度要解決的問題任務(wù)調(diào)度調(diào)用調(diào)度程序的具體位置又被稱為是一個調(diào)度點(schedulingpoint),調(diào)度點通常處于以下位置:中斷服務(wù)程序的結(jié)束位置;任務(wù)因等待資源而處于等待狀態(tài);任務(wù)處于就緒狀態(tài)時等。任務(wù)調(diào)度調(diào)用調(diào)度程序的具體位置又被稱為是一個調(diào)度點(scheduli設(shè)計調(diào)度程序時,通常需要綜合考慮如下因素:CPU的使用率(CPUutilization)輸入/輸出設(shè)備的吞吐率響應(yīng)時間(responsivetime)公平性截止時間調(diào)度算法設(shè)計調(diào)度程序時,通常需要綜合考慮如下因素:調(diào)度算法對于大量的實時調(diào)度方法而言,存在著以下幾類主要的劃分方法:離線(off-line)和在線(on-line)調(diào)度搶占(preemptive)和非搶占(non-preemptive)調(diào)度靜態(tài)(static)和動態(tài)(dynamic)調(diào)度最佳(optimal)和試探性(heuristic)調(diào)度調(diào)度算法對于大量的實時調(diào)度方法而言,存在著以下幾類主要的劃分方法:調(diào)時間片輪轉(zhuǎn)調(diào)度(round-robin

scheduling)是指:

當有兩個或多個就緒任務(wù)具有相同的優(yōu)先級,

且它們是就緒任務(wù)中優(yōu)先級最高的任務(wù)時,

調(diào)度器按照任務(wù)就緒的先后次序調(diào)度每個任務(wù),

每個任務(wù)運行一段時間后調(diào)度下一個任務(wù),

直到最后一個任務(wù)也得以運行一段時間后,接下來又讓第一個任務(wù)運行。時間片輪轉(zhuǎn)調(diào)度時間片輪轉(zhuǎn)調(diào)度(round-robinschedulin時間片輪轉(zhuǎn)調(diào)度時間片輪轉(zhuǎn)調(diào)度

基于優(yōu)先級的調(diào)度的基本思路:

給每一個任務(wù)都設(shè)置一個優(yōu)先級

然后在任務(wù)調(diào)度的時候,在所有處于就緒狀態(tài)的任務(wù)中選擇優(yōu)先級最高的那個任務(wù)去運行?;趦?yōu)先級的調(diào)度基于優(yōu)先級的調(diào)度的基本思路:給每一個任務(wù)都設(shè)置一個優(yōu)先級算法可以分為兩種:

當一個任務(wù)正在運行的時候,如果這時來了一個新的任務(wù),其優(yōu)先級更高,那么在這種情況下,是立即搶占CPU去運行新任務(wù),還是等當前任務(wù)運行完后再決定。

可搶占方式

不可搶占方式

區(qū)別在于:基于優(yōu)先級的調(diào)度 當一個任務(wù)正在運行的時可搶占方式基于優(yōu)先級的調(diào)度ISRLowPriorityTaskHighPriorityTaskISRISRmakeHighPriorityTaskReadyISR

Completes(ReturntoTask)LowPriorityTask

Completes(SwitchtoHPTask)InterruptOccursVectortoISRNon-Preemptive

不可搶占式調(diào)度ISRLowPriorityTaskHighPriorISRLowPriorityTask(LPT)HighPriorityTask(HPT)ISRISRmakeHighPriorityTaskReadyInterruptoccursVectortoISRISR

Completes(SwitchtoHPTask)HPTask

Completes(SwitchbacktoLPTask)Preemptive

可搶占式調(diào)度ISRLowPriorityTask(LPT)High低優(yōu)先級任務(wù)內(nèi)核服務(wù)ISR高優(yōu)先級任務(wù)時間(1)(2)(3)(4)(5)不可搶占內(nèi)核(允許中斷)不可搶占內(nèi)核低優(yōu)先級任務(wù)內(nèi)核服務(wù)ISR高優(yōu)先級任務(wù)時間(1)(2)(3)低優(yōu)先級任務(wù)內(nèi)核服務(wù)ISR高優(yōu)先級任務(wù)時間(1)(2)(3)(4)(5)可搶占內(nèi)核可搶占式內(nèi)核低優(yōu)先級任務(wù)內(nèi)核服務(wù)ISR高優(yōu)先級任務(wù)時間(1)(2)(3)任務(wù)2就緒任務(wù)3就緒任務(wù)1任務(wù)2任務(wù)3優(yōu)先級高低時間任務(wù)2任務(wù)1搶占搶占任務(wù)3運行結(jié)束任務(wù)2運行結(jié)束在可搶占調(diào)度方式下的任務(wù)運行情況

基于優(yōu)先級的可搶占調(diào)度任務(wù)2就緒任務(wù)3就緒任務(wù)1任務(wù)2任務(wù)3優(yōu)先級高低時間任務(wù)2任

在優(yōu)先級算法中,如果兩個任務(wù)的優(yōu)先級相

同,又該如何處理呢?把任務(wù)按照不同的優(yōu)先級進行分組,然后在不同組的任務(wù)之間使用優(yōu)先級算法,而在同一組的各個任務(wù)之間使用時間片輪轉(zhuǎn)法。

通常的做法:+時間片輪轉(zhuǎn)調(diào)度基于優(yōu)先級的調(diào)度把任務(wù)按照不同的優(yōu)先級進行分組,通常的做法:+時間片輪轉(zhuǎn)調(diào)任務(wù)1任務(wù)2任務(wù)3優(yōu)先級高低時間任務(wù)3就緒任務(wù)3運行結(jié)束任務(wù)1任務(wù)2任務(wù)1任務(wù)2時間片輪轉(zhuǎn)調(diào)度優(yōu)先級可搶占與時間片輪轉(zhuǎn)調(diào)度相結(jié)合方式下的任務(wù)運行情況任務(wù)1任務(wù)2任務(wù)3優(yōu)先級高低時間任務(wù)3就緒任務(wù)3運行結(jié)束任務(wù)第五節(jié)

優(yōu)先級反轉(zhuǎn)優(yōu)先級繼承協(xié)議優(yōu)先級天花板協(xié)議第五節(jié)

優(yōu)先級反轉(zhuǎn)優(yōu)先級繼承協(xié)議優(yōu)先級反轉(zhuǎn)(PriorityInversion):指一個任務(wù)等待比它優(yōu)先級低的任務(wù)釋放資源而被阻塞,如果這時有中等優(yōu)先級的就緒任務(wù),阻塞會進一步惡化。優(yōu)先級反轉(zhuǎn)優(yōu)先級反轉(zhuǎn)(PriorityInversion):指一個任實時操作系統(tǒng)任務(wù)管理與調(diào)度課件解決優(yōu)先級反轉(zhuǎn)現(xiàn)象的常用協(xié)議為:優(yōu)先級繼承協(xié)議(priorityinheritanceprotocol);優(yōu)先級天花板協(xié)議(priorityceilingprotocol)。

解決優(yōu)先級反轉(zhuǎn)解決優(yōu)先級反轉(zhuǎn)現(xiàn)象的常用協(xié)議為:解決優(yōu)先級反轉(zhuǎn)優(yōu)先級繼承協(xié)議的思想當一個任務(wù)阻塞一個或多個高優(yōu)先級任務(wù)時,該任務(wù)將不使用其原來的優(yōu)先級,而使用被該任務(wù)所阻塞的所有任務(wù)的最高優(yōu)先級作為其臨界區(qū)的優(yōu)先級。當該任務(wù)退出臨界區(qū)時,又恢復(fù)到其最初的優(yōu)先級。優(yōu)先級繼承協(xié)議優(yōu)先級繼承協(xié)議的思想優(yōu)先級繼承協(xié)議t0t0t1t2t3t4t5t6t7t8CriticalsectionguardedbyStimeT1T2T3t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低優(yōu)先級繼承協(xié)議t0t0t1t2t3t4t5t6t7t8Criticals優(yōu)先級繼承協(xié)議但優(yōu)先級繼承協(xié)議存在以下兩個方面的問題:優(yōu)先級繼承協(xié)議本身不能避免死鎖的發(fā)生;在優(yōu)先級繼承協(xié)議中,任務(wù)的阻塞時間雖然是有界的,但由于可能出現(xiàn)阻塞鏈,使得任務(wù)的阻塞時間可能會很長。優(yōu)先級繼承協(xié)議但優(yōu)先級繼承協(xié)議存在以下兩個方面的問題:死鎖現(xiàn)象t0t0t1t2t3t4t5t6t7t8CriticalsectionguardedbyStimeT1T2t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低優(yōu)先級繼承協(xié)議死鎖現(xiàn)象t0t0t1t2t3t4t5t6t7t8Critic任務(wù)的阻塞鏈t0t0t1t2t3t4t5t6t7t8CriticalsectionguardedbyS1timeT1T2T3t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低優(yōu)先級繼承協(xié)議CriticalsectionguardedbyS2任務(wù)的阻塞鏈t0t0t1t2t3t4t5t6t7t8Crit在優(yōu)先級天花板協(xié)議中,主要包含如下處理內(nèi)容:對于控制臨界區(qū)的信號量,設(shè)置信號量的優(yōu)先級天花板為可能申請該信號量的所有任務(wù)中具有最高優(yōu)先級任務(wù)的優(yōu)先級;如果任務(wù)成功獲得信號量,任務(wù)的優(yōu)先級將被抬升為信號量的優(yōu)先級天花板;任務(wù)執(zhí)行完臨界區(qū),釋放信號量后,其優(yōu)先級恢復(fù)到其最初的優(yōu)先級;如果任務(wù)不能獲得所申請的信號量,任務(wù)將被阻塞。優(yōu)先級天花板協(xié)議在優(yōu)先級天花板協(xié)議中,主要包含如下處理內(nèi)容:優(yōu)先級天花板協(xié)t0t0t1t2t3t4t5t6t7t8CriticalsectionguardedbyStimeT1T2T3t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低優(yōu)先級天花板協(xié)議t0t0t1t2t3t4t5t6t7t8Criticalst0t0t1t2t3t4t5t6t7t8CriticalsectionguardedbyStimeT1T2T3t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低優(yōu)先級天花板協(xié)議t0t0t1t2t3t4t5t6t7t8Criticals優(yōu)先級繼承協(xié)議與優(yōu)先級天花板協(xié)議的比較關(guān)于執(zhí)行效率的比較優(yōu)先級天花板協(xié)議的效率高。對程序運行過程影響程度的比較優(yōu)先級繼承協(xié)議對任務(wù)執(zhí)行流程的影響相對要較小。優(yōu)先級繼承協(xié)議與優(yōu)先級天花板協(xié)議的比較關(guān)于執(zhí)行效率的比較采用優(yōu)先級繼承協(xié)議的任務(wù)執(zhí)行情況t0t0t1t2t3t4t5t6t7t8T1T2T3CriticalsectionguardedbyStimeT4T5T6T7t9t0t10t11t12t13t14t15t16t18t17CriticalsectioninT7guardedbySafter1st,2nd,3rd,4th,5thpriorityinheritancerespectively優(yōu)先級高低解決優(yōu)先級反轉(zhuǎn)采用優(yōu)先級繼承協(xié)議的任務(wù)執(zhí)行情況t0t0t1t2t3t4t5采用優(yōu)先級天花板協(xié)議的任務(wù)執(zhí)行情況t0t0t1t2t3t4t5t6t7t8T1T2T3CriticalsectionguardedbyStimeT4T5T6T7t9t0t10t11t12t13t14t15t16t18t17優(yōu)先級高低解決優(yōu)先級反轉(zhuǎn)采用優(yōu)先級天花板協(xié)議的任務(wù)執(zhí)行情況t0t0t1t2t3t4t解決優(yōu)先級反轉(zhuǎn)基于優(yōu)先級繼承的天花板協(xié)議的任務(wù)執(zhí)行情況解決優(yōu)先級反轉(zhuǎn)基于優(yōu)先級繼承的天花板協(xié)議的任務(wù)執(zhí)行情況謝謝!謝謝!嵌入式實時操作系統(tǒng)

及應(yīng)用開發(fā)第五章任務(wù)管理與調(diào)度嵌入式實時操作系統(tǒng)

及應(yīng)用開發(fā)第五章任務(wù)管理與調(diào)度主要內(nèi)容進程與線程任務(wù)任務(wù)管理任務(wù)調(diào)度優(yōu)先級反轉(zhuǎn)主要內(nèi)容進程與線程第一節(jié)

進程與線程

程序運行的方式進程的定義線程的定義第一節(jié)

進程與線程程序運行的方式程序的運行方式順序運行作業(yè)的運行總是一個一個地順著來,完成一個作業(yè)后再運行下一個。在一個作業(yè)運行中途,決不會突然插入另一個作業(yè)運行。順序運行最容易實現(xiàn),常見于早期的單道批處理系統(tǒng)中

程序的運行方式順序運行程序的運行方式并發(fā)運行允許多個程序共享CPU,在這種方式下,系統(tǒng)的資源不再被某一個程序獨占,而是由多個程序共享。

程序的運行方式并發(fā)運行簡單地說,就是能用一個處理器并發(fā)(注意,不是同時!)地運行多個程序的計算機管理系統(tǒng)。并發(fā):由同一個處理器輪換地運行多個程序。或者說是由多個程序輪班地占用處理器這個資源。且在占用這個資源期間,并不一定能夠把程序運行完畢。并發(fā)過程示意圖處理器如何進行程序的切換?并發(fā)過程處理器如何進行程序的程序的切換(兩句話)處理器是個傻瓜,PC讓它干啥,它就干啥。PC是個指路器,它指向哪兒,處理器就去哪兒。從此可以知道,哪個程序占有了PC,哪個程序就占有了處理器。

=PC程序的切換(兩句話)處理器是個傻瓜,PC讓它干啥,它就干啥。進程與程序進程與程序進程與程序程序是存放在磁盤上的一系列代碼和數(shù)據(jù)的可執(zhí)行映像,是一個靜止的實體。進程:可并發(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的運行過程。程序是靜止的,進程是動態(tài)的,有狀態(tài)轉(zhuǎn)換。進程與程序程序是存放在磁盤上的一系列代碼和數(shù)據(jù)的可執(zhí)行映像,進程與程序進程的四要素:1、作為一個進程,要有一段程序供其執(zhí)行。2、有進程專用的內(nèi)核空間堆棧。

3、在內(nèi)核中有一個task_struct數(shù)據(jù)結(jié)構(gòu),即“進程控制塊”。

4、有獨立的用戶空間

進程與程序進程的四要素:線程的引入早期的進程,包含了以下兩個方面的內(nèi)容:

資源。進程是資源分配的基本單位,一個進程包括一個保存進程映像的虛擬地址空間、主存、I/O設(shè)備和文件等資源。調(diào)度執(zhí)行。進程作為操作系統(tǒng)的調(diào)度實體,是調(diào)度的基本單位。

進程是一個龐大的結(jié)構(gòu)型實體,其PCB結(jié)構(gòu)包含的內(nèi)容相當多,每創(chuàng)建一個進程,系統(tǒng)無論在時間或空間上都要花費較大的開支。線程的引入早期的進程,包含了以下兩個方面的內(nèi)容:線程定義線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),一個線程可以創(chuàng)建和撤銷另一個線程;線程定義線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,使用線程的優(yōu)勢:創(chuàng)建:在一個已有進程中創(chuàng)建一個新線程比創(chuàng)建一個全新的進程所需的時間開銷少;終止:終止一個線程比終止一個進程所花費的時間少;切換:線程切換比進程切換所花費的時間少;通信:使同一進程內(nèi)部不同線程之間的通信效率得到顯著提高。在大多數(shù)操作系統(tǒng)中,不同進程之間的通信需要內(nèi)核的干預(yù),而同一進程內(nèi)部不同線程之間則可直接通信。

使用線程的優(yōu)勢:單進程/單線程模型單進程/多線程模型多進程/多線程模型多進程/單線程模型單進程/單線程模型單進程/多線程模型多進程/多線程模型多進程第二節(jié)

任務(wù)

任務(wù)的定義及其主要特性任務(wù)的內(nèi)容任務(wù)的分類任務(wù)參數(shù)第二節(jié)

任務(wù)任務(wù)的定義及其主要特性任務(wù)在嵌入式實時系統(tǒng)中任務(wù)(task):任務(wù)是一個具有獨立功能的無限循環(huán)的程序段的一次運行活動通常為進程(process)和線程(thread)的統(tǒng)稱任務(wù)是調(diào)度的基本單位任務(wù)在嵌入式實時系統(tǒng)中HighPriorityTaskLowPriorityTaskTaskTaskTaskTaskTaskTaskEventEventEachTaskInfiniteLoopImportanceSplittinganapplicationintoTasksHighPriorityTaskLowPriority任務(wù)任務(wù)通常包含一個具有無限循環(huán)的程序/*ioTaskimplementsdataobtainingandhandlingcontinuously*/voidioTask(void){ intdata;

initial();/*Thefollowingsentencesgetdataandhandledatacontinuously*/

while(TRUE) { data=getData(); handleData(data); }}任務(wù)任務(wù)通常包含一個具有無限循環(huán)的程序/*ioTaskim任務(wù)

任務(wù)的特性:動態(tài)性并發(fā)性異步獨立性任務(wù)任務(wù)的特性:任務(wù)

任務(wù)的內(nèi)容:

代碼:一段可執(zhí)行的程序。數(shù)據(jù):程序所需要的相關(guān)數(shù)據(jù)(變量、工作空間、緩沖區(qū))

堆棧程序執(zhí)行的上下文環(huán)境TCB

任務(wù)任務(wù)的內(nèi)容:任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運行時與處理器之間的關(guān)系處理器通過兩個指針寄存器(PC和SP)來與任務(wù)代碼和任務(wù)堆棧建立聯(lián)系并運行它寄存器組程序運行環(huán)境任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運行時與處理器通過兩個任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時的問題任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)代碼任務(wù)堆棧內(nèi)存?當有多個任務(wù)時,處理器中的運行環(huán)境應(yīng)該怎么辦?寄存器組程序運行環(huán)境任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時的問題任務(wù)代碼任務(wù)程序

虛擬處理器PCSP

虛擬處理器PCSP

虛擬處理器PCSP

虛擬處理器PCSP調(diào)度器多任務(wù)時任務(wù)與處理器之間關(guān)系的處理程序處理器PCSP在內(nèi)存中為每個任務(wù)創(chuàng)建一個虛擬的處理器(處理器部分的運行環(huán)境由操作系統(tǒng)的調(diào)度器按某種規(guī)則來進行這兩個復(fù)制工作復(fù)制當需要運行某個任務(wù)時就把該任務(wù)的虛擬處理器復(fù)制到實際處理器中復(fù)制當需要中止當前任務(wù)時,則把任務(wù)對應(yīng)的虛擬處理器復(fù)制到內(nèi)存復(fù)制再把另一個需要運行的任務(wù)的虛擬處理器復(fù)制到實際處理器中寄存器組寄存器組也就是說,任務(wù)的切換是任務(wù)運行環(huán)境的切換程序虛擬PCSP虛擬PCSP虛擬PCSP虛擬虛擬處理器應(yīng)該存儲的主要信息:1。程序的斷點地址(PC)2。任務(wù)堆棧指針(SP)3。程序狀態(tài)字寄存器(PSW)4。通用寄存器內(nèi)容5。函數(shù)調(diào)用信息(已存在于堆棧)另外再用一個數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆棧指針(SP),這個數(shù)據(jù)結(jié)構(gòu)叫做任務(wù)控制塊,它除了保存任務(wù)堆棧指針之外還要負責保存任務(wù)其他信息。這些內(nèi)容通常保存在任務(wù)堆棧中,這些內(nèi)容也常叫做任務(wù)的上下文。任務(wù)控制塊是由操作系統(tǒng)另行構(gòu)造的一個數(shù)據(jù)結(jié)構(gòu),每個任務(wù)都有一個。任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)控制塊其實,程序切換的關(guān)鍵是把程序的私有堆棧指針賦予處理器的堆棧指針SP實質(zhì)上系統(tǒng)是通過SP的切換來實現(xiàn)程序的切換的。要建立一個概念:具有控制塊的程序才是一個可以被系統(tǒng)所運行的任務(wù)。程序代碼、私有堆棧、任務(wù)控制塊是任務(wù)的三要件。任務(wù)控制塊提供了運行環(huán)境的存儲位置。虛擬處理器應(yīng)該存儲的主要信息:另外再用一個數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆任務(wù)任務(wù)與程序的區(qū)別:任務(wù)能真實地描述工作內(nèi)容的并發(fā)性,而程序不能;程序是任務(wù)的組成部分;除程序外,任務(wù)還包括數(shù)據(jù)、堆棧及其上下文環(huán)境等內(nèi)容;程序是靜態(tài)的,任務(wù)是動態(tài)的;任務(wù)有生命周期,有誕生、有消亡,是短暫的;而程序是相對長久的;一個程序可對應(yīng)多個任務(wù),反之亦然;任務(wù)具有創(chuàng)建其他任務(wù)的功能,而程序沒有。任務(wù)任務(wù)與程序的區(qū)別:任務(wù)任務(wù)的分類:①按照到達情況的可預(yù)測性,任務(wù)可以劃分為:周期任務(wù)(periodictask),非周期任務(wù)(non-periodictask)②按照重要程度,可分為:關(guān)鍵任務(wù)(criticaltask),非關(guān)鍵任務(wù)(noncriticaltask)任務(wù)任務(wù)的分類:任務(wù)1任務(wù)2任務(wù)3內(nèi)核內(nèi)核代碼內(nèi)核數(shù)據(jù)棧數(shù)據(jù)任務(wù)控制塊代碼棧數(shù)據(jù)任務(wù)控制塊代碼棧數(shù)據(jù)任務(wù)控制塊代碼任務(wù)1任務(wù)2任務(wù)3多任務(wù)系統(tǒng)示意圖任務(wù)任務(wù)1任務(wù)2任務(wù)3內(nèi)核內(nèi)核代碼內(nèi)核數(shù)據(jù)棧數(shù)據(jù)任務(wù)代碼棧數(shù)據(jù)任任務(wù)任務(wù)的參數(shù)優(yōu)先級(priority):任務(wù)的優(yōu)先級分為靜態(tài)優(yōu)先級和動態(tài)優(yōu)先級。周期(period):表示任務(wù)周期性執(zhí)行的間隔時間。計算時間(computationtime):也被稱為是任務(wù)的執(zhí)行時間(executiontime)。就緒時間(readytime):具備了被執(zhí)行所需要條件時的時間截止時間(deadline):任務(wù)需要在該時間到來之前被執(zhí)行完成。截止時間可以分為強截止時間(harddeadline)和弱截止時間(softdeadline)兩種情況:擁有關(guān)鍵任務(wù)的實時系統(tǒng)又被稱為強實時統(tǒng),否則稱為弱實時系統(tǒng)。任務(wù)任務(wù)的參數(shù)第三節(jié)

任務(wù)管理任務(wù)狀態(tài)與變遷任務(wù)控制塊任務(wù)切換任務(wù)隊列優(yōu)先級位圖算法任務(wù)管理機制第三節(jié)

任務(wù)管理任務(wù)狀態(tài)與變遷任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)會在不同的狀態(tài)之間進行轉(zhuǎn)換,即任務(wù)狀態(tài)的變遷就緒態(tài)運行態(tài)等待態(tài)獲得CPU被高優(yōu)先級任務(wù)搶占或超時獲得資源需要資源任務(wù)狀態(tài)變遷任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)會在不同的狀態(tài)之間進行轉(zhuǎn)換,即任務(wù)1任務(wù)2任務(wù)3調(diào)度程序05101520253035404550運行等待就緒三個任務(wù)進行狀態(tài)轉(zhuǎn)換的過程

包含三個任務(wù)和一個調(diào)度程序。調(diào)度程序用來確定下一個需要投入運行的任務(wù),因此調(diào)度程序本身也需要占用一定的處理時間。

任務(wù)的管理-任務(wù)狀態(tài)與變遷任務(wù)1任務(wù)2任務(wù)3調(diào)度0510152025303540455任務(wù)的狀態(tài)及其轉(zhuǎn)換正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行時,該任務(wù)就會把CPU的使用權(quán)讓給別的任務(wù)而使任務(wù)進入等待狀態(tài)。任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時的狀態(tài)叫做任務(wù)的睡眠狀態(tài)

系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進行了就緒登記,這時任務(wù)的狀態(tài)叫做就緒狀態(tài)。

處于就緒狀態(tài)的任務(wù)如果經(jīng)調(diào)度器判斷獲得了CPU的使用權(quán),則任務(wù)就進入運行狀態(tài)

一個正在運行的任務(wù)一旦響應(yīng)中斷申請就會中止運行而去執(zhí)行中斷服務(wù)程序,這時任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)

正在運行的任務(wù),需要等待一段時間或需要等待一個事件發(fā)生再運行

由于系統(tǒng)存在著多個任務(wù),于是系統(tǒng)如何來識別并管理一個任務(wù)就是一個需要解決的問題。識別一個任務(wù)的最直接的辦法是為每一個任務(wù)起一個名稱。

系統(tǒng)必須為每個任務(wù)創(chuàng)建一個保存與該任務(wù)有關(guān)的相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),這個數(shù)據(jù)結(jié)構(gòu)就叫做該任務(wù)的任務(wù)控制塊(TCB)。任務(wù)的管理-任務(wù)控制塊用來記錄任務(wù)的堆棧指針、任務(wù)的當前狀態(tài)、任務(wù)的優(yōu)先級別等一些與任務(wù)管理有關(guān)的屬性的表就叫做任務(wù)控制塊

任務(wù)控制塊是不是像我們?nèi)嗽谝粋€國家中的身份證?(其實,系統(tǒng)中的所有資源都應(yīng)該有身份證。)任務(wù)控制塊就相當于是一個任務(wù)的身份證,沒有任務(wù)控制塊的任務(wù)是不能被系統(tǒng)承認和管理的

由于系統(tǒng)存在著多個任務(wù),于是系統(tǒng)必須為每個任務(wù)tasknametaskIDtaskstatustaskprioritytaskcontext(registersandflagsofCPU)……任務(wù)控制塊示意圖任務(wù)的管理-任務(wù)控制塊taskname任務(wù)控制塊示意圖任務(wù)的管理-任務(wù)控制塊任務(wù)在內(nèi)存中的結(jié)構(gòu)實時操作系統(tǒng)任務(wù)管理與調(diào)度課件任務(wù)切換任務(wù)切換(contextswitching)保存當前任務(wù)的上下文,并恢復(fù)需要執(zhí)行的任務(wù)的上下文的過程。當發(fā)生任務(wù)切換時:當前正在運行的任務(wù)的上下文就需要通過該任務(wù)的任務(wù)控制塊保存起來;把需要投入運行的任務(wù)的上下文從對應(yīng)的任務(wù)控制塊中恢復(fù)出來。任務(wù)切換任務(wù)切換(contextswitching)任務(wù)1任務(wù)2任務(wù)3調(diào)度程序05101520253035404550運行等待就緒在時刻8即發(fā)生了任務(wù)切換,任務(wù)1的上下文需要保存到任務(wù)1的任務(wù)控制塊中去。經(jīng)過調(diào)度程序的處理,在時刻10任務(wù)2投入運行,需要把任務(wù)2的任務(wù)控制塊中關(guān)于上下文的內(nèi)容恢復(fù)到CPU的寄存器中。

任務(wù)的管理-任務(wù)切換任務(wù)1任務(wù)2任務(wù)3調(diào)度0510152025303540455任務(wù)1任務(wù)2實時內(nèi)核調(diào)度程序保存任務(wù)1的上下文到TCB1從TCB2恢復(fù)任務(wù)2的上下文……保存任務(wù)2的上下文到TCB2從TCB1恢復(fù)任務(wù)1的上下文……時間任務(wù)的管理-任務(wù)切換任務(wù)1任務(wù)2實時內(nèi)核調(diào)度程序保存任務(wù)1的上下文到TCB1從T任務(wù)切換任務(wù)切換具有如下基本步驟:保存任務(wù)上下文環(huán)境;更新當前處于運行狀態(tài)的任務(wù)的任務(wù)控制塊的內(nèi)容,如把任務(wù)的狀態(tài)由運行狀態(tài)改變?yōu)榫途w或是等待狀態(tài);把任務(wù)的任務(wù)控制塊移到相應(yīng)的隊列(就緒隊列或是等待隊列);選擇另一個任務(wù)進行執(zhí)行:調(diào)度;改變需要投入運行的任務(wù)的任務(wù)控制塊的內(nèi)容,把任務(wù)的狀態(tài)變?yōu)檫\行狀態(tài);根據(jù)任務(wù)控制塊,恢復(fù)需要投入運行的任務(wù)的上下文環(huán)境。任務(wù)切換任務(wù)切換具有如下基本步驟:任務(wù)的管理-任務(wù)上下文切換時間

保存

調(diào)度

恢復(fù)保存當前運行任務(wù)上下文的時間選擇下一個任務(wù)的調(diào)度時間將要運行任務(wù)的上下文的恢復(fù)時間取決于任務(wù)上下文的定義和處理器的速度。不同種類的處理器,任務(wù)上下文的定義不同,其內(nèi)容有多有少。任務(wù)的管理-任務(wù)上下文切換時間保存任務(wù)的管理-任務(wù)切換任務(wù)切換時機中斷、自陷運行任務(wù)因缺乏資源而被阻塞時間片輪轉(zhuǎn)調(diào)度時高優(yōu)先級任務(wù)處于就緒時任務(wù)的管理-任務(wù)切換任務(wù)切換中斷、自陷運行任務(wù)因缺乏資源而被任務(wù)的管理-任務(wù)隊列任務(wù)隊列通過任務(wù)控制塊實現(xiàn)對系統(tǒng)中所有任務(wù)的管理新任務(wù)CPU就緒隊列等待隊列超時調(diào)度等待資源獲得資源釋放CPU單就緒隊列和單等待隊列任務(wù)的管理-任務(wù)隊列任務(wù)隊列通過任務(wù)控制塊實現(xiàn)對系統(tǒng)中所有任任務(wù)的管理-任務(wù)隊列隊列由任務(wù)控制塊構(gòu)成

tasknametaskIDtaskstatustaskprioritytaskcontext…tasknametaskIDtaskstatustaskprioritytaskcontext…tasknametaskIDtaskstatustaskprioritytaskcontext…Head隊列TCB1TCB2TCBnNULL任務(wù)隊列任務(wù)的管理-任務(wù)隊列隊列由任務(wù)控制塊構(gòu)成Head隊列TCB新任務(wù)CPU就緒隊列資源1等待隊列超時調(diào)度等待資源1獲得資源1釋放CPU資源2等待隊列等待資源2獲得資源2資源n等待隊列等待資源n獲得資源n……單就緒隊列和多等待隊列任務(wù)的管理-任務(wù)隊列新任務(wù)CPU就緒隊列資源1等待隊列超時調(diào)度等待資源1獲得資源任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法

為了能夠使系統(tǒng)清楚地知道,系統(tǒng)中哪些任務(wù)已經(jīng)就緒,哪些還沒有就緒,OS在RAM中設(shè)立了一個記錄表,系統(tǒng)中的每個任務(wù)都在這個表中占據(jù)一個位置,并用這個位置的狀態(tài)(1或者0)來表示任務(wù)是否處于就緒狀態(tài),這個表就叫做任務(wù)就緒狀態(tài)表,簡稱叫任務(wù)就緒表

任務(wù)就緒表就是一個二維數(shù)組OSRdyTbl[]任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法為了能夠使系統(tǒng)清楚地為加快訪問任務(wù)就緒表的速度,系統(tǒng)定義了一個變量OSRdyGrp來表明就緒表每行中是否存在就緒任務(wù)。為加快訪問任務(wù)就緒表的任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法

35:00100011任務(wù)的管理-優(yōu)先級位圖就緒任務(wù)處理算法35:00100下標二進制值000000001100000010200000100300001000400010000500100000601000000710000000優(yōu)先級映射表priorityMapTablecharpriorityMapTable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};priorityMapTable的數(shù)組元素的下標與任務(wù)優(yōu)先級的高三位或低三位相對應(yīng)。priorityMapTable的數(shù)組元素對應(yīng)的二進制值中,位為1的位表示priorityReadyGroup或是priorityReadyTable[]的對應(yīng)位也為1。35:00100011下標二進制值000000001100000010200000CharpriorityDecisionTable[]={0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*//*0x10to0x1F

*//*0x60to0x6F

*//*0x70to0x7F

*//*0x80to0x8F

*//*0x90to0x9F

*//*0xA0to0xAF

*//*0xB0to0xBF

*//*0xC0to0xCF

*//*0xD0to0xDF

*//*0xE0to0xEF

*//*0x20to0x2F

*//*0x30to0x3F

*//*0x40to0x4F

*//*0x50to0x5F

*//*0xF0to0xFF

*/priorityReadyTable[3]contains0xE4priorityReadyGroupcontains0x68};3=priorityDecisionTable[0x68];2=priorityDecisionTable[0xE4];26=(3<<3)+2;以priorityReadyGroup或是priorityReadyTable[]數(shù)組元素的值為索引,獲取該值對應(yīng)二進制表示中1出現(xiàn)的最低二進制位的序號(0-7)。

優(yōu)先級判定表charpriorityDecisionTable[256]CharpriorityDecisionTable[]任務(wù)進入就緒態(tài)

priorityReadyGroup|=priorityMapTable[priority>>3];priorityReadyTable[priority>>3]|=priorityMapTable[priority&0x07];35:00100

011OSRdyGrp765432107654321015141312111098232221201918171631302928272625243938373635343332474645544342414055545352515049486362616059585756OSRdyTblOSRdy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論