




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第七章第七章 中斷和時(shí)間管理中斷和時(shí)間管理 27.1 中斷管理中斷管理 v中斷的分類中斷的分類 v中斷處理的過程中斷處理的過程 v實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v用戶中斷服務(wù)程序用戶中斷服務(wù)程序 v中斷時(shí)序中斷時(shí)序* 37.1.1 概述概述 v從發(fā)展過程來看:從發(fā)展過程來看: 中斷(中斷(interrupt)最初被用來替換)最初被用來替換I/O操操作的作的輪詢處理輪詢處理方式,以提高方式,以提高I/O處理的效處理的效率。率。 隨后,中斷又包含了隨后,中斷又包含了自陷自陷(trap,也稱為,也稱為內(nèi)部中斷內(nèi)部中斷或是或是軟件中斷軟件中斷)的功能。)的功能。 后來,中斷的概念得到進(jìn)一步擴(kuò)
2、大,被后來,中斷的概念得到進(jìn)一步擴(kuò)大,被定義為定義為導(dǎo)致程序正常執(zhí)行流程發(fā)生改變導(dǎo)致程序正常執(zhí)行流程發(fā)生改變的事件的事件(不包括程序的分支情況)??桑ú话ǔ绦虻姆种闆r)??砂迅拍畋粩U(kuò)大的中斷稱為把概念被擴(kuò)大的中斷稱為廣義中斷廣義中斷。4概述概述 v在實(shí)際應(yīng)用中,廣義的中斷通常被分為中斷、在實(shí)際應(yīng)用中,廣義的中斷通常被分為中斷、自陷和異常(自陷和異常(exception)等類別。)等類別。 中斷中斷是由于是由于CPU外部的原因而改變程序執(zhí)行流外部的原因而改變程序執(zhí)行流程的過程,屬于程的過程,屬于異步事件異步事件,又稱為,又稱為硬件中斷硬件中斷。自陷和異常則為自陷和異常則為同步事件同步事件;
3、自陷自陷表示通過處理器所擁有的表示通過處理器所擁有的軟件指令軟件指令、可預(yù)可預(yù)期期地使處理器正在執(zhí)行的程序的執(zhí)行流程發(fā)生地使處理器正在執(zhí)行的程序的執(zhí)行流程發(fā)生變化,以執(zhí)行特定的程序。自陷是變化,以執(zhí)行特定的程序。自陷是顯式的事件顯式的事件,需要無條件地執(zhí)行;需要無條件地執(zhí)行; vMotorola 68000系列中的系列中的Trap指令指令 vARM中的中的SWI指令指令 vIntel 80 x86中的中的INT指令指令 5概述概述 異常異常為為CPU自動(dòng)產(chǎn)生自動(dòng)產(chǎn)生的自陷,以處理異的自陷,以處理異常事件。常事件。 v如被如被0除、執(zhí)行非法指令和內(nèi)存保護(hù)故除、執(zhí)行非法指令和內(nèi)存保護(hù)故障等。障等。
4、 v異常沒有對(duì)應(yīng)的處理器指令異常沒有對(duì)應(yīng)的處理器指令,當(dāng)異常,當(dāng)異常事件發(fā)生時(shí),處理器也需要無條件地事件發(fā)生時(shí),處理器也需要無條件地掛起當(dāng)前運(yùn)行的程序,執(zhí)行特定的處掛起當(dāng)前運(yùn)行的程序,執(zhí)行特定的處理程序。理程序。 6概述概述 v對(duì)實(shí)時(shí)系統(tǒng),中斷必不可少對(duì)實(shí)時(shí)系統(tǒng),中斷必不可少v實(shí)時(shí)內(nèi)核大都提供了管理中斷的機(jī)制實(shí)時(shí)內(nèi)核大都提供了管理中斷的機(jī)制v方便開發(fā)中斷處理程序,提高中斷處方便開發(fā)中斷處理程序,提高中斷處理的可靠性理的可靠性v使中斷處理程序與任務(wù)有機(jī)結(jié)合使中斷處理程序與任務(wù)有機(jī)結(jié)合77.1.2 中斷的分類中斷的分類 v分類方式分類方式 硬件中斷是否可以被屏蔽:硬件中斷是否可以被屏蔽:v可屏蔽中
5、斷可屏蔽中斷和和不可屏蔽中斷不可屏蔽中斷 中斷源:中斷源:v 硬件中斷硬件中斷和和軟件中斷軟件中斷 中斷信號(hào)的產(chǎn)生:中斷信號(hào)的產(chǎn)生:v 邊緣觸發(fā)中斷邊緣觸發(fā)中斷和和電平觸發(fā)中斷電平觸發(fā)中斷 中斷服務(wù)程序的調(diào)用方式:中斷服務(wù)程序的調(diào)用方式: v向量中斷向量中斷、直接中斷直接中斷和和間接中斷間接中斷8可屏蔽中斷和不可屏蔽中斷可屏蔽中斷和不可屏蔽中斷 v由于中斷的發(fā)生是異步的,程序的正常執(zhí)行流程隨由于中斷的發(fā)生是異步的,程序的正常執(zhí)行流程隨時(shí)有可能被中斷服務(wù)程序打斷。如果程序正在進(jìn)行時(shí)有可能被中斷服務(wù)程序打斷。如果程序正在進(jìn)行某些重要運(yùn)算,中斷服務(wù)程序的插入將有可能改變某些重要運(yùn)算,中斷服務(wù)程序的插
6、入將有可能改變某些寄存器的數(shù)據(jù),造成程序的運(yùn)行發(fā)生錯(cuò)誤。某些寄存器的數(shù)據(jù),造成程序的運(yùn)行發(fā)生錯(cuò)誤。v可屏蔽中斷可屏蔽中斷:能夠被屏蔽掉的中斷。:能夠被屏蔽掉的中斷。 外部設(shè)備的中斷請(qǐng)求信號(hào)一般需要先通過外部設(shè)備的中斷請(qǐng)求信號(hào)一般需要先通過CPU外部的中斷外部的中斷控制器,再與控制器,再與CPU相應(yīng)的引腳相連。相應(yīng)的引腳相連。 可編程中斷控制器可以通過軟件進(jìn)行控制,以禁止或是允可編程中斷控制器可以通過軟件進(jìn)行控制,以禁止或是允許中斷。許中斷。 v不可屏蔽中斷不可屏蔽中斷:在任何時(shí)候都不可屏蔽的。:在任何時(shí)候都不可屏蔽的。 一個(gè)比較典型的例子是掉電中斷,當(dāng)發(fā)生掉電時(shí),無論程一個(gè)比較典型的例子是掉電
7、中斷,當(dāng)發(fā)生掉電時(shí),無論程序正在進(jìn)行什么樣的運(yùn)算,它都肯定無法正常運(yùn)行下去。序正在進(jìn)行什么樣的運(yùn)算,它都肯定無法正常運(yùn)行下去。這種情況下,急需進(jìn)行的是一些掉電保護(hù)的操作。對(duì)這類這種情況下,急需進(jìn)行的是一些掉電保護(hù)的操作。對(duì)這類中斷,應(yīng)隨時(shí)進(jìn)行響應(yīng)。中斷,應(yīng)隨時(shí)進(jìn)行響應(yīng)。 9硬件中斷和軟件中斷硬件中斷和軟件中斷 v硬件中斷:由于硬件中斷:由于CPU外部的設(shè)備所產(chǎn)生的外部的設(shè)備所產(chǎn)生的中斷。中斷。異步事件異步事件:可能在程序執(zhí)行的任何位置發(fā)生,:可能在程序執(zhí)行的任何位置發(fā)生,發(fā)生中斷的時(shí)間通常是不確定的。發(fā)生中斷的時(shí)間通常是不確定的。v軟件中斷:同步中斷或是自陷,通過處理器軟件中斷:同步中斷或是自
8、陷,通過處理器的軟件指令來實(shí)現(xiàn)。的軟件指令來實(shí)現(xiàn)。 產(chǎn)生中斷的時(shí)機(jī)是預(yù)知的,可根據(jù)需要在程序產(chǎn)生中斷的時(shí)機(jī)是預(yù)知的,可根據(jù)需要在程序中進(jìn)行設(shè)定。中進(jìn)行設(shè)定。 軟件中斷的處理程序以軟件中斷的處理程序以同步的方式同步的方式進(jìn)行執(zhí)行。進(jìn)行執(zhí)行。 其處理方式同硬件中斷處理程序類似。其處理方式同硬件中斷處理程序類似。10硬件中斷和軟件中斷硬件中斷和軟件中斷 v軟件中斷是一種非常重要的機(jī)制:軟件中斷是一種非常重要的機(jī)制: 系統(tǒng)可通過該機(jī)制在系統(tǒng)可通過該機(jī)制在用戶模式執(zhí)行特權(quán)用戶模式執(zhí)行特權(quán)模式下的操作。模式下的操作。 是是軟件調(diào)試軟件調(diào)試的一個(gè)重要手段,如的一個(gè)重要手段,如Intel 80 x86中的中的
9、INT 3,設(shè)置斷點(diǎn),調(diào)試器可,設(shè)置斷點(diǎn),調(diào)試器可以用它來形成觀察點(diǎn),并查看隨程序執(zhí)以用它來形成觀察點(diǎn),并查看隨程序執(zhí)行而動(dòng)態(tài)變化的事件情況。行而動(dòng)態(tài)變化的事件情況。 11邊緣觸發(fā)中斷和電平觸發(fā)中斷邊緣觸發(fā)中斷和電平觸發(fā)中斷 v邊緣觸發(fā)中斷:中斷線邊緣觸發(fā)中斷:中斷線從低變到高從低變到高或是或是從高從高變到低變到低時(shí),中斷信號(hào)就被發(fā)送出去,并只有時(shí),中斷信號(hào)就被發(fā)送出去,并只有在下一次的從低變到高或是從高變到低時(shí)才在下一次的從低變到高或是從高變到低時(shí)才會(huì)再度觸發(fā)中斷。會(huì)再度觸發(fā)中斷。 事件發(fā)生的事件發(fā)生的時(shí)間非常短時(shí)間非常短,有可能出現(xiàn)中斷控制,有可能出現(xiàn)中斷控制器器丟失中斷丟失中斷的情況。的
10、情況。 如果多個(gè)設(shè)備連接到同一個(gè)中斷線,即使只有如果多個(gè)設(shè)備連接到同一個(gè)中斷線,即使只有一個(gè)設(shè)備產(chǎn)生了中斷信號(hào),也必須調(diào)用中斷線一個(gè)設(shè)備產(chǎn)生了中斷信號(hào),也必須調(diào)用中斷線對(duì)應(yīng)的所有中斷服務(wù)程序來進(jìn)行匹配,否則會(huì)對(duì)應(yīng)的所有中斷服務(wù)程序來進(jìn)行匹配,否則會(huì)出現(xiàn)中斷的軟件丟失情況。出現(xiàn)中斷的軟件丟失情況。 12邊緣觸發(fā)中斷和電平觸發(fā)中斷邊緣觸發(fā)中斷和電平觸發(fā)中斷 v電平觸發(fā)中斷:在硬件中斷線的電平觸發(fā)中斷:在硬件中斷線的電平發(fā)生變電平發(fā)生變化化時(shí)產(chǎn)生中斷信號(hào),并且中斷信號(hào)的有效性時(shí)產(chǎn)生中斷信號(hào),并且中斷信號(hào)的有效性將持續(xù)保持下去,直到中斷信號(hào)被清除。將持續(xù)保持下去,直到中斷信號(hào)被清除。 能夠降低中斷信號(hào)
11、能夠降低中斷信號(hào)傳送丟失傳送丟失的情況的情況 能通過更有效的方式來服務(wù)中斷,每個(gè)為該中能通過更有效的方式來服務(wù)中斷,每個(gè)為該中斷服務(wù)后的斷服務(wù)后的ISR都要向外圍設(shè)備進(jìn)行確認(rèn),然后都要向外圍設(shè)備進(jìn)行確認(rèn),然后取消該設(shè)備對(duì)中斷線的操作。取消該設(shè)備對(duì)中斷線的操作。 當(dāng)中斷線的最后一個(gè)設(shè)備得到中斷服務(wù)后,中當(dāng)中斷線的最后一個(gè)設(shè)備得到中斷服務(wù)后,中斷線的電平就會(huì)發(fā)生變化,不用對(duì)連接到同一斷線的電平就會(huì)發(fā)生變化,不用對(duì)連接到同一個(gè)硬件中斷線的所有中斷服務(wù)程序進(jìn)行嘗試。個(gè)硬件中斷線的所有中斷服務(wù)程序進(jìn)行嘗試。13向量中斷、直接中斷和間接中斷向量中斷、直接中斷和間接中斷 v向量中斷:通過向量中斷:通過中斷向
12、量中斷向量來調(diào)用中斷服務(wù)程來調(diào)用中斷服務(wù)程序。序。 v直接中斷:中斷對(duì)應(yīng)的中斷服務(wù)程序的直接中斷:中斷對(duì)應(yīng)的中斷服務(wù)程序的入口入口地址地址是一個(gè)固定值,當(dāng)中斷發(fā)生的時(shí)候,程是一個(gè)固定值,當(dāng)中斷發(fā)生的時(shí)候,程序執(zhí)行流程將直接跳轉(zhuǎn)到中斷服務(wù)程序的入序執(zhí)行流程將直接跳轉(zhuǎn)到中斷服務(wù)程序的入口地址,執(zhí)行中斷服務(wù)程序。口地址,執(zhí)行中斷服務(wù)程序。 v間接中斷:中斷服務(wù)程序的入口地址由間接中斷:中斷服務(wù)程序的入口地址由寄存寄存器器提供。提供。14向量中斷向量中斷 v中斷硬件設(shè)備的硬件中斷線(也稱為中斷請(qǐng)中斷硬件設(shè)備的硬件中斷線(也稱為中斷請(qǐng)求求IRQ)被中斷控制器匯集成)被中斷控制器匯集成中斷向量中斷向量(i
13、nterrupt vector);); v每個(gè)中斷向量對(duì)應(yīng)一個(gè)中斷服務(wù)程序每個(gè)中斷向量對(duì)應(yīng)一個(gè)中斷服務(wù)程序(interrupt service routine,ISR),用),用來存放來存放中斷服務(wù)程序的入口地址中斷服務(wù)程序的入口地址或是或是中斷服中斷服務(wù)程序的第一條指令務(wù)程序的第一條指令。 v系統(tǒng)中通常包含多個(gè)中斷向量,存放這些中系統(tǒng)中通常包含多個(gè)中斷向量,存放這些中斷向量對(duì)應(yīng)中斷服務(wù)程序入口地址的內(nèi)存區(qū)斷向量對(duì)應(yīng)中斷服務(wù)程序入口地址的內(nèi)存區(qū)域被稱為域被稱為中斷向量表中斷向量表。 15向量中斷向量中斷 v在在Intel 80 x86處理器中,中斷向量表處理器中,中斷向量表包含包含256個(gè)入口
14、,每個(gè)中斷向量需要四個(gè)入口,每個(gè)中斷向量需要四個(gè)字節(jié)(存放中斷服務(wù)程序的首址)。個(gè)字節(jié)(存放中斷服務(wù)程序的首址)。v ARM的中斷向量表開始于內(nèi)存地址的中斷向量表開始于內(nèi)存地址0 x00000000或是或是0 xFFFF0000處。處。 16中斷控制器中斷控制器 v對(duì)多個(gè)可屏蔽中斷源進(jìn)行管理對(duì)多個(gè)可屏蔽中斷源進(jìn)行管理,使,使CPU核心能和更多的中斷資源相聯(lián)系。核心能和更多的中斷資源相聯(lián)系。v 能夠?qū)χ袛噙M(jìn)行排隊(duì)能夠?qū)χ袛噙M(jìn)行排隊(duì): 避免中斷信號(hào)的丟失避免中斷信號(hào)的丟失 對(duì)不同的中斷進(jìn)行優(yōu)先級(jí)配置,使高優(yōu)對(duì)不同的中斷進(jìn)行優(yōu)先級(jí)配置,使高優(yōu)先級(jí)中斷能夠中斷低優(yōu)先級(jí)中斷,滿足先級(jí)中斷能夠中斷低優(yōu)先級(jí)
15、中斷,滿足系統(tǒng)中具有更高時(shí)間約束特性功能的需系統(tǒng)中具有更高時(shí)間約束特性功能的需要要17中斷控制器中斷控制器 v在基于在基于x86的架構(gòu)中,的架構(gòu)中,8259是一個(gè)非常通用的中斷控制器芯片(稱是一個(gè)非常通用的中斷控制器芯片(稱為為PIC,programmable interrupt controller)。)。 v每個(gè)每個(gè)PIC只能夠處理只能夠處理8個(gè)中斷,為支持更多數(shù)量的中斷,需要組織成個(gè)中斷,為支持更多數(shù)量的中斷,需要組織成菊花鏈(菊花鏈(daisy chain)的方式,把一個(gè))的方式,把一個(gè)PIC的輸出連接到另一個(gè)的輸出連接到另一個(gè)PIC的輸入上。的輸入上。 18中斷控制器中斷控制器 v在
16、基于在基于x86的架構(gòu)中,的架構(gòu)中,8259是一個(gè)非常通是一個(gè)非常通用的中斷控制器芯片(稱為用的中斷控制器芯片(稱為PIC,programmable interrupt controller)。)。 v每個(gè)每個(gè)PIC只能夠處理只能夠處理8個(gè)中斷,為支持更多個(gè)中斷,為支持更多數(shù)量的中斷,需要組織成菊花鏈(數(shù)量的中斷,需要組織成菊花鏈(daisy chain)的方式,把一個(gè))的方式,把一個(gè)PIC的輸出連接到的輸出連接到另一個(gè)另一個(gè)PIC的輸入上。的輸入上。 19ARM向量中斷控制器向量中斷控制器 v特特 性性 ARM PrimeCell TM向量中斷控制器;向量中斷控制器; 32個(gè)中斷請(qǐng)求輸入;個(gè)
17、中斷請(qǐng)求輸入; 16個(gè)向量個(gè)向量IRQ中斷;中斷; 16個(gè)優(yōu)先級(jí),可動(dòng)態(tài)分配給中斷請(qǐng)求;個(gè)優(yōu)先級(jí),可動(dòng)態(tài)分配給中斷請(qǐng)求; 軟件中斷產(chǎn)生。軟件中斷產(chǎn)生。20向量中斷控制器方框圖向量中斷控制器方框圖 21ARM向量中斷控制器向量中斷控制器 描描 述述v向量中斷控制器向量中斷控制器(VIC)具有具有32個(gè)中斷請(qǐng)求輸個(gè)中斷請(qǐng)求輸入,可將其編程分為入,可將其編程分為3類:類:lFIQl向量向量IRQl非向量非向量IRQv可編程分配機(jī)制意味著不同外設(shè)的中斷優(yōu)可編程分配機(jī)制意味著不同外設(shè)的中斷優(yōu)先級(jí)可以動(dòng)態(tài)分配并調(diào)整。先級(jí)可以動(dòng)態(tài)分配并調(diào)整。 22ARM向量中斷控制器向量中斷控制器 v 快速中斷請(qǐng)求快速中斷
18、請(qǐng)求(FIQ)要求具有要求具有最高優(yōu)先級(jí)最高優(yōu)先級(jí)。v如果分配給如果分配給FIQ的請(qǐng)求多于的請(qǐng)求多于1個(gè),個(gè),VIC將中將中斷請(qǐng)求相斷請(qǐng)求相“或或”后向后向ARM處理器產(chǎn)生處理器產(chǎn)生FIQ信號(hào)。信號(hào)。v當(dāng)只有一個(gè)中斷被分配為當(dāng)只有一個(gè)中斷被分配為FIQ時(shí),可實(shí)現(xiàn)時(shí),可實(shí)現(xiàn)最短的最短的FIQ等待時(shí)間等待時(shí)間,因?yàn)?,因?yàn)镕IQ服務(wù)程序只服務(wù)程序只要簡(jiǎn)單地啟動(dòng)器件的處理就可以了。但如要簡(jiǎn)單地啟動(dòng)器件的處理就可以了。但如果分配給果分配給 FIQ級(jí)的中斷多于級(jí)的中斷多于1個(gè),個(gè),F(xiàn)IQ服務(wù)服務(wù)程序從程序從VIC中讀出一個(gè)字來識(shí)別產(chǎn)生中斷中讀出一個(gè)字來識(shí)別產(chǎn)生中斷請(qǐng)求的請(qǐng)求的FIQ中斷源是哪一個(gè)。中斷源是
19、哪一個(gè)。 23ARM向量中斷控制器向量中斷控制器 v向量向量IRQ具有具有中等優(yōu)先級(jí)中等優(yōu)先級(jí)。v該級(jí)別可分配該級(jí)別可分配32個(gè)請(qǐng)求中的個(gè)請(qǐng)求中的16個(gè)個(gè)。32個(gè)請(qǐng)求中的任意一個(gè)請(qǐng)求中的任意一個(gè)都可分配到個(gè)都可分配到16個(gè)向量個(gè)向量IRQ Slot中的任意一個(gè),其中中的任意一個(gè),其中Slot0具有最高優(yōu)先級(jí),而具有最高優(yōu)先級(jí),而Slotl5則為最低優(yōu)先級(jí)。則為最低優(yōu)先級(jí)。v非向量非向量IRQ的的優(yōu)先級(jí)最低優(yōu)先級(jí)最低。v VIC將所有將所有向量和非向量向量和非向量IRQ相相“或或”向向ARM處理器產(chǎn)處理器產(chǎn)生生IRQ信號(hào)。信號(hào)。IRQ服務(wù)程序可通過讀取服務(wù)程序可通過讀取VIC的一個(gè)寄存器的一個(gè)寄
20、存器立即啟動(dòng)并跳轉(zhuǎn)到相應(yīng)地址。如果有任意一個(gè)向量立即啟動(dòng)并跳轉(zhuǎn)到相應(yīng)地址。如果有任意一個(gè)向量IRQ發(fā)出請(qǐng)求,則發(fā)出請(qǐng)求,則VIC提供最高優(yōu)先級(jí)請(qǐng)求提供最高優(yōu)先級(jí)請(qǐng)求IRQ服務(wù)程序的地服務(wù)程序的地址,否則提供默認(rèn)程序的地址。該默認(rèn)程序由所有非向址,否則提供默認(rèn)程序的地址。該默認(rèn)程序由所有非向量量IRQ共用。默認(rèn)程序可讀取任何共用。默認(rèn)程序可讀取任何VIC寄存器以確定哪個(gè)寄存器以確定哪個(gè)IRQ被激活。被激活。 247.1.3 中斷處理的過程中斷處理的過程 v中斷處理的過程分為:中斷處理的過程分為: 中斷檢測(cè)中斷檢測(cè) 中斷響應(yīng)中斷響應(yīng) 中斷處理中斷處理 25中斷檢測(cè)中斷檢測(cè) v中斷檢測(cè)在中斷檢測(cè)在每
21、條指令結(jié)束時(shí)每條指令結(jié)束時(shí)進(jìn)行,檢測(cè)進(jìn)行,檢測(cè)是否有中斷請(qǐng)求或是否滿足異常條件。是否有中斷請(qǐng)求或是否滿足異常條件。 為滿足中斷處理的需要,在指令周期中使為滿足中斷處理的需要,在指令周期中使用了用了中斷周期中斷周期。在中斷周期中,處理器檢查是否有中斷發(fā)在中斷周期中,處理器檢查是否有中斷發(fā)生,即是否出現(xiàn)中斷信號(hào)。生,即是否出現(xiàn)中斷信號(hào)。 v沒有中斷信號(hào):處理器繼續(xù)運(yùn)行,并通過取指沒有中斷信號(hào):處理器繼續(xù)運(yùn)行,并通過取指周期取當(dāng)前程序的下一條指令;周期取當(dāng)前程序的下一條指令; v有中斷信號(hào):將進(jìn)入中斷響應(yīng),對(duì)中斷進(jìn)行處有中斷信號(hào):將進(jìn)入中斷響應(yīng),對(duì)中斷進(jìn)行處理。理。 26 中斷和指令周期中斷和指令周
22、期 27中斷響應(yīng)中斷響應(yīng) v中斷響應(yīng)是由中斷響應(yīng)是由處理器內(nèi)部硬件處理器內(nèi)部硬件完成的中斷序完成的中斷序列,而不是由程序執(zhí)行的。列,而不是由程序執(zhí)行的。v在在Intel 80 x86中,中斷響應(yīng)過程的操作如中,中斷響應(yīng)過程的操作如下:下: 對(duì)可屏蔽中斷,從對(duì)可屏蔽中斷,從8259中斷控制器芯片讀取中中斷控制器芯片讀取中斷向量號(hào);斷向量號(hào); 將標(biāo)志寄存器將標(biāo)志寄存器EFLAG、CS和和IP壓棧;壓棧; 對(duì)于硬件中斷,復(fù)位標(biāo)志寄存器中的對(duì)于硬件中斷,復(fù)位標(biāo)志寄存器中的IF和和TF位,位,禁止可屏蔽外部中斷和單步異常;禁止可屏蔽外部中斷和單步異常; 根據(jù)中斷向量號(hào),查找中斷向量表,根據(jù)中斷根據(jù)中斷向
23、量號(hào),查找中斷向量表,根據(jù)中斷服務(wù)程序的首址轉(zhuǎn)移到中斷服務(wù)程序執(zhí)行。服務(wù)程序的首址轉(zhuǎn)移到中斷服務(wù)程序執(zhí)行。28中斷處理中斷處理 v中斷處理:執(zhí)行中斷服務(wù)程序。中斷處理:執(zhí)行中斷服務(wù)程序。 中斷服務(wù)程序用來處理自陷、異常或是中斷服務(wù)程序用來處理自陷、異常或是中斷。中斷。 盡管導(dǎo)致自陷、異常和中斷的事件不同,盡管導(dǎo)致自陷、異常和中斷的事件不同,但大都具有相同的中斷服務(wù)程序結(jié)構(gòu)。但大都具有相同的中斷服務(wù)程序結(jié)構(gòu)。29中斷處理中斷處理 v中斷服務(wù)程序的主要內(nèi)容:中斷服務(wù)程序的主要內(nèi)容: 保存上下文:保存中斷服務(wù)程序?qū)⒁褂玫谋4嫔舷挛模罕4嬷袛喾?wù)程序?qū)⒁褂玫乃兴屑拇嫫鞯膬?nèi)容寄存器的內(nèi)容,以便于
24、在退出中斷服務(wù)程序之前,以便于在退出中斷服務(wù)程序之前進(jìn)行恢復(fù);進(jìn)行恢復(fù); 如果中斷向量被多個(gè)設(shè)備所共享,為了確定產(chǎn)生如果中斷向量被多個(gè)設(shè)備所共享,為了確定產(chǎn)生該中斷信號(hào)的設(shè)備,需要該中斷信號(hào)的設(shè)備,需要輪詢輪詢這些設(shè)備的中斷狀這些設(shè)備的中斷狀態(tài)寄存器;態(tài)寄存器; 獲取中斷相關(guān)的其他信息;獲取中斷相關(guān)的其他信息; 對(duì)中斷進(jìn)行具體的處理;對(duì)中斷進(jìn)行具體的處理; 恢復(fù)保存的上下文恢復(fù)保存的上下文; 執(zhí)行執(zhí)行中斷返回指令中斷返回指令,使,使CPU的控制返回到被中斷的控制返回到被中斷的程序繼續(xù)執(zhí)行。的程序繼續(xù)執(zhí)行。30中斷處理中斷處理 v如果對(duì)一個(gè)中斷的處理還沒有完成,如果對(duì)一個(gè)中斷的處理還沒有完成,又
25、發(fā)生了另外一個(gè)中斷,則稱系統(tǒng)中又發(fā)生了另外一個(gè)中斷,則稱系統(tǒng)中發(fā)生了多個(gè)中斷。發(fā)生了多個(gè)中斷。 非嵌套的中斷處理方式非嵌套的中斷處理方式:在處理一個(gè)中:在處理一個(gè)中斷的時(shí)候,禁止再發(fā)生中斷。斷的時(shí)候,禁止再發(fā)生中斷。 嵌套的中斷處理方式嵌套的中斷處理方式:定義中斷優(yōu)先級(jí),:定義中斷優(yōu)先級(jí),允許高優(yōu)先級(jí)的中斷打斷低優(yōu)先級(jí)中斷允許高優(yōu)先級(jí)的中斷打斷低優(yōu)先級(jí)中斷的處理過程。的處理過程。31非嵌套的中斷處理方式非嵌套的中斷處理方式 v處理中斷的時(shí)候,將處理中斷的時(shí)候,將屏蔽屏蔽所有其他的中斷請(qǐng)求。所有其他的中斷請(qǐng)求。 新的中斷將被掛起,當(dāng)處理器再次允許中斷時(shí),再新的中斷將被掛起,當(dāng)處理器再次允許中斷時(shí)
26、,再由處理器進(jìn)行檢查。由處理器進(jìn)行檢查。 如果程序執(zhí)行過程中發(fā)生了中斷,在執(zhí)行中斷服務(wù)如果程序執(zhí)行過程中發(fā)生了中斷,在執(zhí)行中斷服務(wù)程序的時(shí)候?qū)⒔怪袛?;程序的時(shí)候?qū)⒔怪袛?;中斷服?wù)程序執(zhí)行完成后,恢復(fù)正常執(zhí)行流程被中中斷服務(wù)程序執(zhí)行完成后,恢復(fù)正常執(zhí)行流程被中斷的程序之前再使能中斷,并由處理器檢查是否還斷的程序之前再使能中斷,并由處理器檢查是否還有中斷。有中斷。 v非嵌套中斷處理方式使中斷能夠按非嵌套中斷處理方式使中斷能夠按發(fā)生順序發(fā)生順序進(jìn)進(jìn)行處理。行處理。 v沒有考慮優(yōu)先級(jí)沒有考慮優(yōu)先級(jí),使,使高優(yōu)先級(jí)中斷高優(yōu)先級(jí)中斷不能得到及不能得到及時(shí)的處理,甚至導(dǎo)致時(shí)的處理,甚至導(dǎo)致中斷丟失中斷丟
27、失。32中斷的非嵌套順序處理中斷的非嵌套順序處理 33嵌套的中斷處理方式嵌套的中斷處理方式 v中斷被劃分為多個(gè)優(yōu)先級(jí),中斷服務(wù)程序只中斷被劃分為多個(gè)優(yōu)先級(jí),中斷服務(wù)程序只屏蔽屏蔽那些那些比當(dāng)前中斷優(yōu)先級(jí)低或是與當(dāng)前中比當(dāng)前中斷優(yōu)先級(jí)低或是與當(dāng)前中斷優(yōu)先級(jí)相同斷優(yōu)先級(jí)相同的中斷,在完成必要的上下文的中斷,在完成必要的上下文保存后即使能中斷。保存后即使能中斷。 v高優(yōu)先級(jí)中斷請(qǐng)求高優(yōu)先級(jí)中斷請(qǐng)求到達(dá)的時(shí)候,需要對(duì)當(dāng)前到達(dá)的時(shí)候,需要對(duì)當(dāng)前中斷服務(wù)程序的狀態(tài)進(jìn)行保存,然后調(diào)用高中斷服務(wù)程序的狀態(tài)進(jìn)行保存,然后調(diào)用高優(yōu)先級(jí)中斷的服務(wù)程序。優(yōu)先級(jí)中斷的服務(wù)程序。 v當(dāng)高優(yōu)先級(jí)中斷的服務(wù)程序執(zhí)行完成后,再
28、當(dāng)高優(yōu)先級(jí)中斷的服務(wù)程序執(zhí)行完成后,再恢復(fù)恢復(fù)先前的中斷服務(wù)程序繼續(xù)執(zhí)行。先前的中斷服務(wù)程序繼續(xù)執(zhí)行。34 中斷的嵌套處理中斷的嵌套處理 357.1.4 實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v中斷服務(wù)程序通常包括三個(gè)方面的內(nèi)中斷服務(wù)程序通常包括三個(gè)方面的內(nèi)容:容:中斷前導(dǎo):中斷前導(dǎo): v保存中斷現(xiàn)場(chǎng),進(jìn)入中斷處理。保存中斷現(xiàn)場(chǎng),進(jìn)入中斷處理。 用戶中斷服務(wù)程序:用戶中斷服務(wù)程序:v 完成對(duì)中斷的具體處理。完成對(duì)中斷的具體處理。 中斷后續(xù):中斷后續(xù): v恢復(fù)中斷現(xiàn)場(chǎng),退出中斷處理。恢復(fù)中斷現(xiàn)場(chǎng),退出中斷處理。36實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v中斷前導(dǎo)和中斷后續(xù)通常由內(nèi)核的中斷前導(dǎo)和中
29、斷后續(xù)通常由內(nèi)核的中斷接管程序中斷接管程序來實(shí)現(xiàn)。來實(shí)現(xiàn)。 硬件中斷發(fā)生后,中斷接管程序獲得控制權(quán),先由中斷接管程硬件中斷發(fā)生后,中斷接管程序獲得控制權(quán),先由中斷接管程序進(jìn)行處理,然后才將控制權(quán)交給相應(yīng)的用戶中斷服務(wù)程序。序進(jìn)行處理,然后才將控制權(quán)交給相應(yīng)的用戶中斷服務(wù)程序。 用戶中斷服務(wù)程序執(zhí)行完成后,又回到中斷接管程序。用戶中斷服務(wù)程序執(zhí)行完成后,又回到中斷接管程序。37實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v中斷接管程序負(fù)責(zé)中斷處理的前導(dǎo)和后續(xù)部分的內(nèi)中斷接管程序負(fù)責(zé)中斷處理的前導(dǎo)和后續(xù)部分的內(nèi)容。容。 中斷處理前導(dǎo)中斷處理前導(dǎo):保存必要的寄存器,并根據(jù)情況在中斷棧:保存必要的寄存器,并
30、根據(jù)情況在中斷棧或是任務(wù)棧中設(shè)置堆棧的起始位置,然后調(diào)用用戶中斷服或是任務(wù)棧中設(shè)置堆棧的起始位置,然后調(diào)用用戶中斷服務(wù)程序。務(wù)程序。 中斷處理后續(xù)中斷處理后續(xù):實(shí)現(xiàn)中斷返回前需要處理的工作,主要包:實(shí)現(xiàn)中斷返回前需要處理的工作,主要包括恢復(fù)寄存器和堆棧,并從中斷服務(wù)程序返回到被中斷的括恢復(fù)寄存器和堆棧,并從中斷服務(wù)程序返回到被中斷的程序。程序。 v用戶中斷服務(wù)程序被組織為一個(gè)表,稱為用戶中斷服務(wù)程序被組織為一個(gè)表,稱為虛擬中斷虛擬中斷向量表向量表。 v如果需要在用戶中斷服務(wù)程序中使用關(guān)于如果需要在用戶中斷服務(wù)程序中使用關(guān)于浮點(diǎn)運(yùn)算浮點(diǎn)運(yùn)算的操作,中斷前導(dǎo)和中斷后續(xù)中還需要分別對(duì)浮點(diǎn)的操作,中斷
31、前導(dǎo)和中斷后續(xù)中還需要分別對(duì)浮點(diǎn)上下文進(jìn)行保存和恢復(fù)。上下文進(jìn)行保存和恢復(fù)。38實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v如果中斷處理導(dǎo)致系統(tǒng)中出現(xiàn)比被中斷如果中斷處理導(dǎo)致系統(tǒng)中出現(xiàn)比被中斷任務(wù)具有更任務(wù)具有更高優(yōu)先級(jí)的就緒任務(wù)高優(yōu)先級(jí)的就緒任務(wù)出現(xiàn):出現(xiàn): 需要把需要把高優(yōu)先級(jí)高優(yōu)先級(jí)任務(wù)放入就緒隊(duì)列;任務(wù)放入就緒隊(duì)列; 把被中斷的任務(wù)從執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榘驯恢袛嗟娜蝿?wù)從執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀就緒狀態(tài)態(tài); 完成用戶中斷服務(wù)程序后,在中斷接管程完成用戶中斷服務(wù)程序后,在中斷接管程序的中斷后續(xù)處理中激活序的中斷后續(xù)處理中激活重調(diào)度程序重調(diào)度程序,使,使高優(yōu)先級(jí)任務(wù)能在中斷處理工作完成后得高優(yōu)先級(jí)任務(wù)能在
32、中斷處理工作完成后得到調(diào)度執(zhí)行。到調(diào)度執(zhí)行。39實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v在允許中斷嵌套的情況下,在執(zhí)行中斷在允許中斷嵌套的情況下,在執(zhí)行中斷服務(wù)程序的過程中,如果出現(xiàn)服務(wù)程序的過程中,如果出現(xiàn)高優(yōu)先級(jí)高優(yōu)先級(jí)的中斷的中斷: 當(dāng)前中斷服務(wù)程序的執(zhí)行將被打斷,以執(zhí)當(dāng)前中斷服務(wù)程序的執(zhí)行將被打斷,以執(zhí)行行高優(yōu)先級(jí)中斷高優(yōu)先級(jí)中斷的中斷服務(wù)程序;的中斷服務(wù)程序; 當(dāng)高優(yōu)先級(jí)中斷的處理完成后,被打斷的當(dāng)高優(yōu)先級(jí)中斷的處理完成后,被打斷的中斷服務(wù)程序才又得到繼續(xù)執(zhí)行;中斷服務(wù)程序才又得到繼續(xù)執(zhí)行; 發(fā)生中斷嵌套時(shí),如果需要進(jìn)行任務(wù)調(diào)度,發(fā)生中斷嵌套時(shí),如果需要進(jìn)行任務(wù)調(diào)度,任務(wù)的調(diào)度將任務(wù)
33、的調(diào)度將延遲到最外層中斷處理結(jié)束延遲到最外層中斷處理結(jié)束時(shí)才能發(fā)生。時(shí)才能發(fā)生。40實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 v中斷服務(wù)程序使用被中斷任務(wù)的任務(wù)??臻g。中斷服務(wù)程序使用被中斷任務(wù)的任務(wù)棧空間。 在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服務(wù)程序所占用的任務(wù)的??臻g可能比較大,將導(dǎo)致任務(wù)棧溢出。務(wù)程序所占用的任務(wù)的棧空間可能比較大,將導(dǎo)致任務(wù)棧溢出。v使用使用專門的中斷棧專門的中斷棧來滿足中斷服務(wù)程序的需要,降低任來滿足中斷服務(wù)程序的需要,降低任務(wù)??臻g使用的不確定性。務(wù)棧空間使用的不確定性。 在系統(tǒng)中開辟一個(gè)單獨(dú)的
34、中斷棧,為所有中斷服務(wù)程序所共享。在系統(tǒng)中開辟一個(gè)單獨(dú)的中斷棧,為所有中斷服務(wù)程序所共享。中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中斷棧也不能溢出。斷棧也不能溢出。 v如果實(shí)時(shí)內(nèi)核沒有提供單獨(dú)的如果實(shí)時(shí)內(nèi)核沒有提供單獨(dú)的中斷棧中斷棧,就需要為任務(wù)棧,就需要為任務(wù)棧留出足夠的空間,不但要考慮通常的留出足夠的空間,不但要考慮通常的函數(shù)嵌套調(diào)用函數(shù)嵌套調(diào)用,還,還需要滿足需要滿足中斷嵌套中斷嵌套的需要。的需要。 使用單獨(dú)的中斷棧還能有效降低整個(gè)系統(tǒng)對(duì)??臻g的需求,否則使用單獨(dú)的中斷棧還能有效降低整個(gè)系統(tǒng)對(duì)棧空間的需求,否則需要為每
35、個(gè)任務(wù)棧都預(yù)留處理中斷的??臻g。需要為每個(gè)任務(wù)棧都預(yù)留處理中斷的??臻g。 41 C/OSII的中斷處理的中斷處理 42Interrupts Under uC/OS-IIYourISR: Save all CPU registers; (1) Call OSIntEnter() or, increment OSIntNesting directly; (2) if (OSIntNesting = 1) (3) OSTCBCur-OSTCBStkPtr = SP; (4) Clear interrupting device; (5) Re-enable interrupts (optional)
36、(6) Execute user code to service ISR; (7) Call OSIntExit(); (8) Restore all CPU registers; (9) Execute a return from interrupt instruction; (10)void OSIntEnter (void) OS_ENTER_CRITICAL(); OSIntNesting+; OS_EXIT_CRITICAL(); 43Interrupts Under uC/OS-IIvoid OSIntExit (void) OS_ENTER_CRITICAL(); (1) if
37、(-OSIntNesting | OSLockNesting) = 0) (2) OSIntExitY = OSUnMapTblOSRdyGrp; (3) OSPrioHighRdy = (INT8U)(OSIntExitY 0)v /* 0 means no delay! */ v OS_ENTER_CRITICAL(); v if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX) = 0) v /* Delay current task */ v OSRdyGrp &= OSTCBCur-OSTCBBitY; v v OSTCB
38、Cur-OSTCBDly = ticks; v /* Load ticks in TCB */ v OS_EXIT_CRITICAL(); v OS_Sched(); v /* Find next task to run! */ v v73時(shí)間管理時(shí)間管理 v管理功能是通過管理功能是通過tick處理程序來實(shí)現(xiàn)處理程序來實(shí)現(xiàn)的。的。 定時(shí)器發(fā)生中斷后,執(zhí)行系統(tǒng)時(shí)鐘中斷定時(shí)器發(fā)生中斷后,執(zhí)行系統(tǒng)時(shí)鐘中斷處理程序,并在中斷處理程序中調(diào)用處理程序,并在中斷處理程序中調(diào)用tick處理程序,實(shí)現(xiàn)系統(tǒng)中與時(shí)間和定時(shí)相處理程序,實(shí)現(xiàn)系統(tǒng)中與時(shí)間和定時(shí)相關(guān)的操作。關(guān)的操作。 tick處理程序作為實(shí)時(shí)內(nèi)核的一部分
39、,與處理程序作為實(shí)時(shí)內(nèi)核的一部分,與具體的定時(shí)器具體的定時(shí)器/計(jì)數(shù)器硬件無關(guān),由系統(tǒng)計(jì)數(shù)器硬件無關(guān),由系統(tǒng)時(shí)鐘中斷處理程序調(diào)用,使實(shí)時(shí)內(nèi)核具時(shí)鐘中斷處理程序調(diào)用,使實(shí)時(shí)內(nèi)核具有對(duì)不同定時(shí)器有對(duì)不同定時(shí)器/計(jì)數(shù)器硬件的適應(yīng)性。計(jì)數(shù)器硬件的適應(yīng)性。 74v圖圖vtick處理程序處理程序 75Tick Under uC/OS-IIvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OST
40、CBStkPtr = SP; v v Call OSTimeTick(); v Clear interrupting device; v Re-enable interrupts (optional); v Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v76vvoid OSTimeTick (void) v v#if OS_CRITICAL_METHOD = 3 v OS_CPU_SR cpu_sr; v#endif v OS_TCB *ptcb;
41、 v OSTimeTickHook(); (1) v#if OS_TIME_GET_SET_EN 0 v OS_ENTER_CRITICAL(); v OSTime+; (2) v OS_EXIT_CRITICAL(); v#endif v if (OSRunning = TRUE) v ptcb = OSTCBList; (3) v while (ptcb-OSTCBPrio != OS_IDLE_PRIO) (4) v OS_ENTER_CRITICAL(); v if (ptcb-OSTCBDly != 0) v if (-ptcb-OSTCBDly = 0) v if (ptcb-OS
42、TCBStat & OS_STAT_SUSPEND) = 0 x00) (5) v OSRdyGrp |= ptcb-OSTCBBitY; (6) v OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; v else v ptcb-OSTCBDly = 1; v v v v ptcb = ptcb-OSTCBNext; v OS_EXIT_CRITICAL(); v v v77Tick Under uC/OS-II based on DSRvvoid TickTask (void *pdata) v v pdata = pdata; v for (;) v O
43、SMboxPend(.); /* Wait for signal from Tick ISR */ v OSTimeTick(); v OS_Sched(); v vvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OSTCBStkPtr = SP; v v Post a dummy message (e.g. (void *)1) to the tick mailbox; v
44、Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v78OSTickISR Under 80 x86 vOSTickISR PROC FAR v PUSHA ; Save interrupted tasks context v PUSH ES v PUSH DS v MOV AX, SEG _OSIntNesting ; Reload DS v MOV DS, AX v INC BYTE PTR _OSIntNesting; Notify uC/OS-I
45、I of ISR v INT 081H ; Chain into DOSs tick ISR v CALL FAR PTR _OSTimeTick ; Process system tick v CALL FAR PTR _OSIntExit ; Notify uC/OS-II of end of ISR v POP DS ; Restore interrupted tasks context v POP ES v POPA v IRET ; Return to interrupted task v_OSTickISR ENDP79時(shí)間管理時(shí)間管理 v相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來
46、的相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來的時(shí)間,以時(shí)間,以tick為單位,每發(fā)生一個(gè)為單位,每發(fā)生一個(gè)tick,對(duì)系統(tǒng)的,對(duì)系統(tǒng)的相對(duì)時(shí)間進(jìn)行一次加相對(duì)時(shí)間進(jìn)行一次加1操作。操作。 v實(shí)時(shí)內(nèi)核根據(jù)實(shí)時(shí)內(nèi)核根據(jù)tick對(duì)應(yīng)的時(shí)間長(zhǎng)度,可以把相對(duì)時(shí)對(duì)應(yīng)的時(shí)間長(zhǎng)度,可以把相對(duì)時(shí)間轉(zhuǎn)換為以秒或是毫秒為單位的其他時(shí)間格式,并間轉(zhuǎn)換為以秒或是毫秒為單位的其他時(shí)間格式,并可根據(jù)實(shí)時(shí)時(shí)鐘獲得日歷時(shí)間。可根據(jù)實(shí)時(shí)時(shí)鐘獲得日歷時(shí)間。 如果對(duì)任務(wù)設(shè)置了時(shí)間片處理方式,需要在如果對(duì)任務(wù)設(shè)置了時(shí)間片處理方式,需要在tick處理程序處理程序中對(duì)當(dāng)前正在運(yùn)行的任務(wù)的已執(zhí)行時(shí)間進(jìn)行更新,使任務(wù)中對(duì)當(dāng)前正在運(yùn)行的任務(wù)的已執(zhí)
47、行時(shí)間進(jìn)行更新,使任務(wù)的已執(zhí)行時(shí)間數(shù)值加的已執(zhí)行時(shí)間數(shù)值加1。 執(zhí)行加執(zhí)行加1操作后,如果任務(wù)的已執(zhí)行時(shí)間同任務(wù)的時(shí)間片操作后,如果任務(wù)的已執(zhí)行時(shí)間同任務(wù)的時(shí)間片相等,表示任務(wù)使用完一個(gè)時(shí)間片的執(zhí)行時(shí)間,需要結(jié)束相等,表示任務(wù)使用完一個(gè)時(shí)間片的執(zhí)行時(shí)間,需要結(jié)束當(dāng)前任務(wù)的執(zhí)行,設(shè)置調(diào)度標(biāo)志,把當(dāng)前任務(wù)放置到就緒當(dāng)前任務(wù)的執(zhí)行,設(shè)置調(diào)度標(biāo)志,把當(dāng)前任務(wù)放置到就緒鏈。鏈。 80時(shí)間管理時(shí)間管理 v時(shí)間等待鏈用來存放需要延遲處理的時(shí)間等待鏈用來存放需要延遲處理的對(duì)象:對(duì)象: 產(chǎn)生產(chǎn)生tick后,需要對(duì)時(shí)間等待鏈中的對(duì)象后,需要對(duì)時(shí)間等待鏈中的對(duì)象的剩余等待時(shí)間值進(jìn)行處理。的剩余等待時(shí)間值進(jìn)行處理。
48、對(duì)于時(shí)間等待的對(duì)象,通常都被組織為對(duì)于時(shí)間等待的對(duì)象,通常都被組織為差分鏈表的方式進(jìn)行管理,以有效降低差分鏈表的方式進(jìn)行管理,以有效降低時(shí)間等待對(duì)象的管理開銷。時(shí)間等待對(duì)象的管理開銷。 在時(shí)間差分鏈中,每個(gè)表項(xiàng)所包含的計(jì)在時(shí)間差分鏈中,每個(gè)表項(xiàng)所包含的計(jì)時(shí)值并非當(dāng)前時(shí)刻到表項(xiàng)激活時(shí)刻的絕時(shí)值并非當(dāng)前時(shí)刻到表項(xiàng)激活時(shí)刻的絕對(duì)計(jì)數(shù),而是該表項(xiàng)和先于它的所有表對(duì)計(jì)數(shù),而是該表項(xiàng)和先于它的所有表項(xiàng)的計(jì)數(shù)值之和。項(xiàng)的計(jì)數(shù)值之和。81時(shí)間管理時(shí)間管理 v圖圖v差分鏈差分鏈 v在當(dāng)前時(shí)刻,在當(dāng)前時(shí)刻,A對(duì)象需要等待對(duì)象需要等待3個(gè)時(shí)間單位個(gè)時(shí)間單位就應(yīng)被激活,就應(yīng)被激活,B對(duì)象需要等待對(duì)象需要等待5(3+2
49、)個(gè)時(shí))個(gè)時(shí)間單位就應(yīng)被激活,間單位就應(yīng)被激活,C對(duì)象需要等待對(duì)象需要等待10(3+2+5)個(gè)時(shí)間單位就應(yīng)被激活,)個(gè)時(shí)間單位就應(yīng)被激活,D對(duì)象對(duì)象需要等待需要等待14(3+2+5+4)個(gè)時(shí)間單位就應(yīng)被)個(gè)時(shí)間單位就應(yīng)被激活。激活。 v在當(dāng)前時(shí)刻,如果有一個(gè)等待在當(dāng)前時(shí)刻,如果有一個(gè)等待7個(gè)時(shí)間單位個(gè)時(shí)間單位的對(duì)象的對(duì)象E需要插入到隊(duì)列中,由于需要插入到隊(duì)列中,由于7-3-2=2,而而7-3-2-5=-3,因此,因此E對(duì)象需要插入到差分對(duì)象需要插入到差分鏈中介于對(duì)象鏈中介于對(duì)象B和對(duì)象和對(duì)象C之間的位置。之間的位置。 82時(shí)間管理時(shí)間管理 v對(duì)于差分時(shí)間鏈,系統(tǒng)每接收到一個(gè)對(duì)于差分時(shí)間鏈,系統(tǒng)
50、每接收到一個(gè)tick,就修訂鏈?zhǔn)讓?duì)象的時(shí)間值。如,就修訂鏈?zhǔn)讓?duì)象的時(shí)間值。如果鏈表對(duì)象的時(shí)間單位為果鏈表對(duì)象的時(shí)間單位為tick,則每,則每發(fā)生一個(gè)發(fā)生一個(gè)tick,鏈?zhǔn)讓?duì)象的時(shí)間值就,鏈?zhǔn)讓?duì)象的時(shí)間值就減減1,當(dāng)減到,當(dāng)減到0時(shí),鏈?zhǔn)讓?duì)象就被激活,時(shí),鏈?zhǔn)讓?duì)象就被激活,并從差分時(shí)間鏈中取下來,下一個(gè)對(duì)并從差分時(shí)間鏈中取下來,下一個(gè)對(duì)象又成為鏈?zhǔn)讓?duì)象。象又成為鏈?zhǔn)讓?duì)象。 83時(shí)間管理時(shí)間管理 v為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定時(shí)器管理功能,應(yīng)用程序可根據(jù)需要?jiǎng)?chuàng)建、時(shí)器管理功能,應(yīng)用程序可根據(jù)需要?jiǎng)?chuàng)建、使用軟件定時(shí)器。使用軟件定時(shí)器。 軟件定時(shí)器在創(chuàng)建
51、時(shí),由用戶提供定時(shí)值,當(dāng)軟件定時(shí)器在創(chuàng)建時(shí),由用戶提供定時(shí)值,當(dāng)軟件定時(shí)器的定時(shí)值減法計(jì)數(shù)為軟件定時(shí)器的定時(shí)值減法計(jì)數(shù)為0時(shí),觸發(fā)定時(shí)時(shí),觸發(fā)定時(shí)器服務(wù)例程。器服務(wù)例程。 用戶可在此例程中完成自己需要的操作。用戶可在此例程中完成自己需要的操作。 在在tick處理程序中需要對(duì)軟件定時(shí)器的定時(shí)值進(jìn)處理程序中需要對(duì)軟件定時(shí)器的定時(shí)值進(jìn)行減行減1操作,并在定時(shí)值為操作,并在定時(shí)值為0時(shí),觸發(fā)掛接在該時(shí),觸發(fā)掛接在該定時(shí)器上的服務(wù)例程。定時(shí)器上的服務(wù)例程。 84時(shí)間管理時(shí)間管理 v軟件定時(shí)器可用于實(shí)現(xiàn)軟件定時(shí)器可用于實(shí)現(xiàn)“看門狗看門狗”(watchdog)。)。 在應(yīng)用的某個(gè)地方進(jìn)行軟件定時(shí)器的停止計(jì)時(shí)
52、在應(yīng)用的某個(gè)地方進(jìn)行軟件定時(shí)器的停止計(jì)時(shí)操作,確保定時(shí)器在系統(tǒng)正常運(yùn)行的情況下不操作,確保定時(shí)器在系統(tǒng)正常運(yùn)行的情況下不會(huì)到期,即不會(huì)觸發(fā)定時(shí)器服務(wù)例程;會(huì)到期,即不會(huì)觸發(fā)定時(shí)器服務(wù)例程; v如果某個(gè)時(shí)候系統(tǒng)進(jìn)入了定時(shí)器服務(wù)例程,如果某個(gè)時(shí)候系統(tǒng)進(jìn)入了定時(shí)器服務(wù)例程,就表示使用停止計(jì)時(shí)操作的地方?jīng)]有執(zhí)行到,就表示使用停止計(jì)時(shí)操作的地方?jīng)]有執(zhí)行到,系統(tǒng)出現(xiàn)了錯(cuò)誤。系統(tǒng)出現(xiàn)了錯(cuò)誤。 v如果需要進(jìn)行任務(wù)的重調(diào)度,如果需要進(jìn)行任務(wù)的重調(diào)度,tick處理程序處理程序還需要調(diào)用調(diào)度程序進(jìn)行任務(wù)調(diào)度處理,使還需要調(diào)用調(diào)度程序進(jìn)行任務(wù)調(diào)度處理,使需要執(zhí)行的下一個(gè)任務(wù)獲得對(duì)需要執(zhí)行的下一個(gè)任務(wù)獲得對(duì)CPU的控制
53、。的控制。 85時(shí)間管理時(shí)間管理 v在時(shí)間方面,內(nèi)核通常提供以下功能:在時(shí)間方面,內(nèi)核通常提供以下功能: 設(shè)置系統(tǒng)時(shí)間。使應(yīng)用能夠設(shè)置當(dāng)前系設(shè)置系統(tǒng)時(shí)間。使應(yīng)用能夠設(shè)置當(dāng)前系統(tǒng)的日期和時(shí)間。統(tǒng)的日期和時(shí)間。 獲得系統(tǒng)時(shí)間。以日歷時(shí)間、系統(tǒng)啟動(dòng)獲得系統(tǒng)時(shí)間。以日歷時(shí)間、系統(tǒng)啟動(dòng)以來所經(jīng)歷的以來所經(jīng)歷的tick數(shù)等形式獲得當(dāng)前的系數(shù)等形式獲得當(dāng)前的系統(tǒng)時(shí)間;統(tǒng)時(shí)間; 維護(hù)系統(tǒng)時(shí)基、處理定時(shí)事件。通過時(shí)維護(hù)系統(tǒng)時(shí)基、處理定時(shí)事件。通過時(shí)鐘中斷,維持系統(tǒng)日志時(shí)間、任務(wù)延遲鐘中斷,維持系統(tǒng)日志時(shí)間、任務(wù)延遲時(shí)間、超時(shí)、單調(diào)速率周期、實(shí)現(xiàn)時(shí)間時(shí)間、超時(shí)、單調(diào)速率周期、實(shí)現(xiàn)時(shí)間片等內(nèi)容。片等內(nèi)容。86日歷時(shí)
54、間數(shù)據(jù)結(jié)構(gòu)日歷時(shí)間數(shù)據(jù)結(jié)構(gòu) vtypedef struct v v unsigned32 year; /* year*/ v unsigned32 month; /* month,1-12 */ v unsigned32 day; /* day,1-31 */ v unsigned32 hour; /* hour,0-23 */ v unsigned32 minute; /* minute,0-59 */ v unsigned32 second; /* second,0-59 */ v unsigned32 ticks; /* elapsed ticks between secs */ v TOD; /*Time Of Day*/87OSTimeGet and OSTimeSet Under uC/OS-II vINT32U OSTimeGet (void) v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力干線遷移施工方案
- 新中式瓦工施工方案
- 文官街地鐵施工方案
- TSHPA 0006-2024 學(xué)校有害生物綜合管理指南
- 2025年度跨境電商貸款擔(dān)保合同
- 二零二五年度餐飲管理輔導(dǎo)合同
- 二零二五年度柜臺(tái)品牌授權(quán)與推廣合同
- 茶樓茶藝師勞動(dòng)合同2025年度與勞動(dòng)合同簽訂流程
- 二零二五年度影視演員網(wǎng)絡(luò)直播聘用協(xié)議
- 二零二五年度個(gè)體店面轉(zhuǎn)讓與市場(chǎng)準(zhǔn)入條件協(xié)議
- 五年(2020-2024)高考地理真題分類匯編(全國(guó))專題03地球上的大氣+原卷版
- 工資調(diào)級(jí)制度模版(3篇)
- 2023年新疆省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 語文新課標(biāo)“整本書閱讀”深度解讀及案例
- 2024年中藥學(xué)類之中藥學(xué)(士)試題庫(有答案)
- 2024至2030年中國(guó)毛絨玩具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 數(shù)字媒體藝術(shù)概論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 中國(guó)腫瘤藥物治療相關(guān)惡心嘔吐防治專家共識(shí)(2022年版)解讀
- 現(xiàn)代家政導(dǎo)論-課件 5.1.1認(rèn)識(shí)家政服務(wù)業(yè)
- 床旁血液凈化治療的原理及應(yīng)用
- 八年級(jí)上學(xué)期語文12月月考試卷
評(píng)論
0/150
提交評(píng)論