日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件

作者:李智敏,華清遠見嵌入式學院上海中心講師。

Linux的調度程序是一個叫Schedule()的函數(shù),由它來決定是否要進行進程的切換。而所謂的調度時機則是在什么情況下執(zhí)行調度程序。

主要有一下幾種狀況:

1、進程狀態(tài)轉換的時刻:進程終止、進程睡眠;

2、當前進程的時間片用完時(current->counter=0);

3、設備驅動程序

4、進程從中斷、異常及系統(tǒng)調用返回到用戶態(tài)時;

時機1,進程要調用sleep()或exit()等函數(shù)進行狀態(tài)轉換,這些函數(shù)會主動調用調度程序進行進程調度;

時機2,由于進程的時間片是由時鐘中斷來更新的,因此,這種情況和時機4是一樣的。

時機3,當設備驅動程序執(zhí)行長而重復的任務時,直接調用調度程序。在每次反復循環(huán)中,驅動程序都檢查need_resched的值,如果必要,則調用調度程序schedule()主動放棄CPU。

時機4,如前所述,不管是從中斷、異常還是系統(tǒng)調用返回,最終都調用ret_from_sys_call(),由這個函數(shù)進行調度標志的檢測,如果必要,則調用調用調度程序。那么,為什么從系統(tǒng)調用返回時要調用調度程序呢?這當然是從效率考慮。從系統(tǒng)調用返回意味著要離開內核態(tài)而返回到用戶態(tài),而狀態(tài)的轉換要花費一定的時間,因此,在返回到用戶態(tài)前,系統(tǒng)把在內核態(tài)該處理的事全部做完。

下面簡單看一下每個時鐘中斷發(fā)生時內核要做的工作,首先對這個最頻繁的調度時機有一個大體了解,然后再詳細討論調度程序的具體工作過程。

每個時鐘中斷(timer interrupt)發(fā)生時,由三個函數(shù)協(xié)同工作,共同完成進程的選擇和切換,它們是:schedule()、do_timer()及ret_form_sys_call()。

schedule():進程調度函數(shù),由它來完成進程的選擇(調度);

do_timer():暫且稱之為時鐘函數(shù),該函數(shù)在時鐘中斷服務程序中被調用,是時鐘中斷服務程序的主要組成部分,該函數(shù)被調用的頻率就是時鐘中斷的頻率即每秒鐘100次(簡稱100赫茲或100Hz);

ret_from_sys_call():系統(tǒng)調用返回函數(shù)。當一個系統(tǒng)調用或中斷完成時,該函數(shù)被調用,用于處理一些收尾工作,例如信號處理、核心任務等等。

這三個函數(shù)是如何協(xié)調工作的呢?

時鐘中斷是一個中斷服務程序,它的主要組成部分就是時鐘函數(shù)do_timer(),由這個函數(shù)完成系統(tǒng)時間的更新、進程時間片的更新等工作,更新后的進程時間片counter作為調度的主要依據(jù)。

在時鐘中斷返回時,要調用函數(shù)ret_from_sys_call(),

在這個函數(shù)中有如下幾行:

cmpl $0, _need_resched

jne reschedule

……

reSTore_all:

RESTORE_ALL

reschedule:

call SYMBOL_NAME(schedule)

jmp ret_from_sys_call

這幾行的意思很明顯:檢測 need_resched 標志,如果此標志為非0,那么就轉到reschedule處調用調度程序schedule()進行進程的選擇。調度程序schedule()會根據(jù)具體的標準在運行隊列中選擇下一個應該運行的進程。當從調度程序返回時,如果發(fā)現(xiàn)又有調度標志被設置,則又調用調度程序,直到調度標志為0,這時,從調度程序返回時由RESTORE_ALL恢復被選定進程的環(huán)境,返回到被選定進程的用戶空間,使之得到運行。

以上就是時鐘中斷這個最頻繁的調度時機。討論這個的主要目的是為了對時機4有個大致的了解。

最后要說明的是,系統(tǒng)調用返回函數(shù)ret_from_sys_call()是從系統(tǒng)調用、異常及中斷返回函數(shù)通常要調用的函數(shù),但并不是非得調用,對于那些要經常被響應的和要被盡快處理的中斷請求信號,為了減少系統(tǒng)開銷,處理完成后并不調用 ret_from_sys_call()(因為很顯然的,從這些中斷處理程序返回到的用戶空間肯定是那個被中斷的進程,無需重新選擇),并且,它們作的工作要盡可能少,因為響應的頻率太高了。

Linux 調度程序和其他的UNIX調度程序不同,尤其是在“nice level”優(yōu)先級的處理上,與優(yōu)先權調度(priority高的進程最先運行)不同,Linux用的是時間片輪轉調度(Round Robing),但同時又保證了高優(yōu)先級的進程運行的既快、時間又長(both sooner and longer)。而標準的UNIX調度程序都用到了多級進程隊列。大多數(shù)的實現(xiàn)都用到了二級優(yōu)先隊列:一個標準隊列和一個實時(“real time”)隊列。一般情況下,如果實時隊列中的進程未被阻塞,它們都要在標準隊列中的進程之前被執(zhí)行,并且,每個隊列中,“nice level”高的進程先被執(zhí)行。

總體上,Linux 調度序程在交互性方面表現(xiàn)很出色,當然了,這是以犧牲一部分“吞吐量”為代價的。

“本文由華清遠見http://www.embedu.org/index.htm提供”



華清遠見

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉