0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是時(shí)間片輪轉(zhuǎn)調(diào)度?時(shí)間片輪轉(zhuǎn)調(diào)度算法基本原理

要長(zhǎng)高 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2024-03-22 14:54 ? 次閱讀

單片機(jī)在系統(tǒng)中充當(dāng)CPU的角色,需要同時(shí)處理多個(gè)事務(wù)。如與PC機(jī)通信,將收到的信息轉(zhuǎn)發(fā)給從機(jī),監(jiān)視數(shù)據(jù)處理情況等一些繁雜而又重要的事情。如何協(xié)調(diào)好各個(gè)事務(wù)之間的關(guān)系,并有條不紊的執(zhí)行各個(gè)事務(wù),這就需要在編寫程序時(shí)采用合適的算法進(jìn)行處理。

一般的方法就是在單片機(jī)中移植操作系統(tǒng),由操作系統(tǒng)來(lái)管理各個(gè)事務(wù)。但由于系統(tǒng)要占用一定的內(nèi)部資源,這對(duì)本身資源非常有限的單片機(jī)來(lái)說(shuō)是不現(xiàn)實(shí)的。所以,很少在單片機(jī)中采用操作系統(tǒng),而是采用時(shí)間片輪詢調(diào)度的方法進(jìn)行各任務(wù)的管理。

時(shí)間片,簡(jiǎn)單來(lái)說(shuō)就是CPU分配給各個(gè)程序的時(shí)間,使各個(gè)程序從表面上看是同時(shí)進(jìn)行的,而不會(huì)造成CPU資源浪費(fèi)。

在宏觀上:我們可以同時(shí)打開多個(gè)應(yīng)用程序,每個(gè)程序并行不悖,同時(shí)運(yùn)行。但是在微觀上:由于只有一個(gè)CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時(shí)間片,每個(gè)程序輪流執(zhí)行。

時(shí)間片輪詢調(diào)度是一種古老而又簡(jiǎn)單的算法,廣泛運(yùn)用于無(wú)操作系統(tǒng)的微處理器中。在系統(tǒng)中,每個(gè)進(jìn)程被分配一個(gè)時(shí)間段,稱作時(shí)間片,即該進(jìn)程允許運(yùn)行的時(shí)間。

如果在時(shí)間片結(jié)束時(shí)進(jìn)程還在運(yùn)行,則CPU將被剝奪并分配給另一個(gè)進(jìn)程。如果進(jìn)程在時(shí)間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進(jìn)行切換。調(diào)度程序所要做的就是維護(hù)一張就緒進(jìn)程列表,當(dāng)進(jìn)程用完它的時(shí)間片后,它被移到隊(duì)列的末尾。

時(shí)間片輪詢調(diào)度中有趣的一點(diǎn)是如何確定時(shí)間片的長(zhǎng)度。從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程是需要一定時(shí)間的,因?yàn)橐4婧脱b入寄存器值及內(nèi)存映像等保護(hù)現(xiàn)場(chǎng)的工作,更新各種表格和隊(duì)列等。假如進(jìn)程切換,有時(shí)稱為上下文切換,需要的時(shí)間為5毫秒,再假設(shè)時(shí)間片長(zhǎng)度設(shè)定為20毫秒,則在做完20毫秒有用的工作之后,CPU將花費(fèi)5毫秒來(lái)進(jìn)行進(jìn)程切換。CPU時(shí)間的20%被浪費(fèi)在了管理開銷上。

進(jìn)程切換時(shí)間一定的情況下,如果時(shí)間片長(zhǎng)度設(shè)定的越小時(shí),這種浪費(fèi)更明顯。所以,時(shí)間片長(zhǎng)度與CPU利用率是一對(duì)不可調(diào)和的矛盾,必須處理好它們之間的關(guān)系。

為了提高CPU效率,我們可以將時(shí)間片長(zhǎng)度設(shè)得大一些,這時(shí)浪費(fèi)的時(shí)間只有就會(huì)相對(duì)減小。但在一個(gè)分時(shí)系統(tǒng)中,各個(gè)任務(wù)對(duì)時(shí)間片長(zhǎng)度的要求是不一致的。例如在一個(gè)系統(tǒng)中,可能要求每秒鐘更新一下顯示內(nèi)容,每幾十毫秒要掃描一下按鍵,每幾毫秒要檢測(cè)一下串口緩沖區(qū)等……可見(jiàn),各個(gè)任務(wù)對(duì)時(shí)間的依賴程度是不一樣的。如果時(shí)間片設(shè)得太長(zhǎng),某些對(duì)實(shí)時(shí)性要求高的任務(wù)可能得不到執(zhí)行,使得系統(tǒng)的實(shí)時(shí)性變差。

總之,時(shí)間片的設(shè)定應(yīng)滿足對(duì)實(shí)時(shí)性要求最高的那個(gè)任務(wù),這樣才能確保每個(gè)任務(wù)都可以及時(shí)得到執(zhí)行而不被錯(cuò)過(guò)。

時(shí)間片輪轉(zhuǎn)調(diào)度算法基本原理

在早期的時(shí)間片輪轉(zhuǎn)法中,系統(tǒng)將所有的就緒進(jìn)程按先來(lái)先服務(wù)的原則,排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。

時(shí)間片的大小從幾ms到幾百ms.當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請(qǐng)求,調(diào)度程序便據(jù)此信號(hào)來(lái)停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。這樣就可以保證就緒隊(duì)列中的所有進(jìn)程,在一給定的時(shí)間內(nèi),均能獲得一時(shí)間片的處理機(jī)執(zhí)行時(shí)間。

單片機(jī)時(shí)間片輪詢和時(shí)間調(diào)度的區(qū)別

單片機(jī)時(shí)間片輪詢和時(shí)間調(diào)度是兩個(gè)與任務(wù)管理相關(guān)的概念,它們?cè)趯?shí)現(xiàn)方式和目的上存在一些區(qū)別。

時(shí)間片輪詢是一種任務(wù)調(diào)度方法,它將時(shí)間分時(shí),分別分配給不同的任務(wù)去執(zhí)行任務(wù)。每個(gè)任務(wù)被分配一個(gè)時(shí)間段,即時(shí)間片,用于執(zhí)行其操作。當(dāng)時(shí)間片結(jié)束時(shí),如果任務(wù)仍在運(yùn)行,CPU將被剝奪并分配給另一個(gè)任務(wù)。這種方法的目的是確保每個(gè)任務(wù)都有機(jī)會(huì)執(zhí)行,從而實(shí)現(xiàn)多個(gè)任務(wù)之間的公平運(yùn)行。時(shí)間片輪詢常用于無(wú)操作系統(tǒng)的微處理器中,它維護(hù)一張就緒進(jìn)程列表,當(dāng)進(jìn)程用完它的時(shí)間片后,它被移到隊(duì)列的末尾。

而時(shí)間調(diào)度則是一種更廣泛的概念,它涉及對(duì)任務(wù)執(zhí)行順序和時(shí)間的整體管理。時(shí)間調(diào)度可以包括多種不同的算法和策略,以優(yōu)化系統(tǒng)性能、響應(yīng)時(shí)間和任務(wù)完成率。它可能考慮任務(wù)的優(yōu)先級(jí)、資源需求、依賴關(guān)系等因素,以確定任務(wù)的執(zhí)行順序和時(shí)間。時(shí)間調(diào)度不僅關(guān)注任務(wù)的公平運(yùn)行,還關(guān)注整體系統(tǒng)效率和任務(wù)完成的質(zhì)量。

單片機(jī)時(shí)間片輪詢是時(shí)間調(diào)度的一種具體實(shí)現(xiàn)方式,它關(guān)注于將時(shí)間分配給不同的任務(wù)以確保公平運(yùn)行。而時(shí)間調(diào)度則是一個(gè)更廣泛的概念,涉及任務(wù)執(zhí)行順序和時(shí)間的整體管理,可以包含多種不同的算法和策略。

單片機(jī)中的任務(wù)調(diào)度和時(shí)間管理是一個(gè)復(fù)雜且多樣的領(lǐng)域,不同的系統(tǒng)和應(yīng)用可能會(huì)采用不同的方法和策略。因此,在實(shí)際應(yīng)用中,需要根據(jù)具體需求和系統(tǒng)特點(diǎn)來(lái)選擇合適的任務(wù)調(diào)度和時(shí)間管理方法。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631996
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210846
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4588

    瀏覽量

    92505
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2244

    瀏覽量

    82267
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)UCOSIII時(shí)間輪轉(zhuǎn)調(diào)度執(zhí)行任務(wù)的先后順序能設(shè)置嗎?

    UCOSIII時(shí)間輪轉(zhuǎn)調(diào)度在同一優(yōu)先級(jí)下的任務(wù)能設(shè)置他們的執(zhí)行的先后順序嗎,怎么在視頻中沒(méi)看到有這樣,難道內(nèi)核已經(jīng)默認(rèn)登記了任務(wù)就緒表?默認(rèn)了同一優(yōu)先級(jí)下任務(wù)的先后順序?
    發(fā)表于 10-11 00:40

    ucos時(shí)間輪轉(zhuǎn)調(diào)度同優(yōu)先級(jí)的兩個(gè)任務(wù)是同時(shí)進(jìn)行嗎?

    剛剛看了原子哥的關(guān)于時(shí)間輪轉(zhuǎn)調(diào)度的例程,還沒(méi)完全弄懂到底是怎么回事,就拿同優(yōu)先級(jí)的兩個(gè)任務(wù)來(lái)說(shuō),主要的疑問(wèn)點(diǎn)是:(1)這兩個(gè)任務(wù)應(yīng)該不是同事執(zhí)行的吧?那為什么LCD屏幕上顯示在同事進(jìn)行呢?(2
    發(fā)表于 10-21 23:43

    為什么時(shí)間輪轉(zhuǎn)調(diào)度實(shí)驗(yàn)中時(shí)間不起作用?

    開發(fā)板探索者STM32F407,學(xué)習(xí)UCOSIII,按照例程做到時(shí)間輪轉(zhuǎn)調(diào)度實(shí)驗(yàn)。按照例程結(jié)果是對(duì)的,現(xiàn)在想看看時(shí)間沒(méi)起作用是個(gè)什么情況
    發(fā)表于 11-08 04:35

    UCOS III時(shí)間輪轉(zhuǎn)調(diào)度問(wèn)題

    UCOS III時(shí)間輪轉(zhuǎn)調(diào)度,如果時(shí)間到了程序沒(méi)有運(yùn)行完,那下一次進(jìn)入是是否是接著上一次退出的地方繼續(xù)運(yùn)行如果時(shí)間
    發(fā)表于 03-09 04:36

    ask2和task3使用時(shí)間輪轉(zhuǎn)調(diào)度執(zhí)行完后不會(huì)回到task1怎么辦?

    輪轉(zhuǎn)調(diào)度test()獲得信號(hào)恢復(fù)task2和task3;為什么task2和task3執(zhí)行完后 不會(huì)回到task1
    發(fā)表于 05-07 23:19

    ucosIII時(shí)間輪轉(zhuǎn)調(diào)度是否需要轉(zhuǎn)讓CPU使用權(quán)?

    入delay_ms 后三個(gè)任務(wù)又正常了delay_ms 中有轉(zhuǎn)讓CPU使用權(quán)的功能時(shí)間輪轉(zhuǎn)調(diào)度 不是一個(gè)任務(wù)執(zhí)行一段時(shí)間 系統(tǒng)再執(zhí)行另一個(gè)任的嗎怎么還要在任務(wù)里轉(zhuǎn)讓CPU使用權(quán)?不解。。
    發(fā)表于 05-17 23:22

    UCOSiii時(shí)間輪轉(zhuǎn)調(diào)度printf打印不太正常的解決辦法?

    如題 利用時(shí)間輪轉(zhuǎn)調(diào)度的歷程 添加了另外幾個(gè)任務(wù) printf打印不太正常 怎么解決此問(wèn)題 把時(shí)間片長(zhǎng)度增加也不行
    發(fā)表于 05-20 04:36

    怎樣利用時(shí)間輪轉(zhuǎn)調(diào)度算法去實(shí)現(xiàn)同步時(shí)間調(diào)度的程序呢

    怎樣利用時(shí)間輪轉(zhuǎn)調(diào)度算法去實(shí)現(xiàn)同步時(shí)間調(diào)度的程序呢?
    發(fā)表于 12-20 06:16

    調(diào)度器的原理及其任務(wù)調(diào)度代碼實(shí)現(xiàn)

    、超級(jí)循環(huán)2、時(shí)間與時(shí)標(biāo)3、調(diào)度算法介紹1)時(shí)間輪轉(zhuǎn)調(diào)度
    發(fā)表于 02-17 07:07

    UCOIII時(shí)間輪轉(zhuǎn)法主要有哪些應(yīng)用呢

    前提:時(shí)間輪轉(zhuǎn)法:主要用于分時(shí)系統(tǒng)中的進(jìn)程調(diào)度。為了實(shí)現(xiàn)輪轉(zhuǎn)調(diào)度,系統(tǒng)把所有就緒進(jìn)程按先入先出的原則排成一個(gè)隊(duì)列的隊(duì)首進(jìn)程,讓它在CPU上
    發(fā)表于 02-18 06:12

    UCOSIII的任務(wù)管理與任務(wù)調(diào)度和切換簡(jiǎn)述

    就緒表7、任務(wù)調(diào)度和切換1、任務(wù)調(diào)度時(shí)間輪轉(zhuǎn)調(diào)度2、任務(wù)切換8、UCOSIII的任務(wù)管理常用API創(chuàng)建任務(wù)OSTaskCreate刪除任務(wù)
    發(fā)表于 02-18 06:14

    rtthread nano時(shí)間輪轉(zhuǎn)調(diào)度線程失敗怎么辦呢?

    1)我用cubemx生成的rtthread-nano的makefile工程,不同優(yōu)先級(jí)的線程可以正常調(diào)度。但我用官網(wǎng)上給出的線程時(shí)間輪轉(zhuǎn)調(diào)度示例程序無(wú)法正常運(yùn)行。 2)例程里面的t
    發(fā)表于 05-12 16:58

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks內(nèi)核調(diào)度機(jī)制分析

    本文簡(jiǎn)要介紹了多任務(wù)內(nèi)核,重點(diǎn)分析了嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的內(nèi)核調(diào)度機(jī)制——優(yōu)先級(jí)搶占調(diào)度時(shí)間輪轉(zhuǎn)調(diào)度
    發(fā)表于 12-11 16:15 ?14次下載

    UCOS擴(kuò)展例程-UCOSIII時(shí)間輪轉(zhuǎn)調(diào)度

    UCOS擴(kuò)展例程-UCOSIII時(shí)間輪轉(zhuǎn)調(diào)度
    發(fā)表于 12-14 17:24 ?21次下載

    UCOIII時(shí)間輪轉(zhuǎn)調(diào)度

    前提:時(shí)間輪轉(zhuǎn)法:主要用于分時(shí)系統(tǒng)中的進(jìn)程調(diào)度。為了實(shí)現(xiàn)輪轉(zhuǎn)調(diào)度,系統(tǒng)把所有就緒進(jìn)程按先入先出的原則排成一個(gè)隊(duì)列的隊(duì)首進(jìn)程,讓它在CPU上
    發(fā)表于 12-23 19:54 ?1次下載
    UCOIII<b class='flag-5'>時(shí)間</b><b class='flag-5'>片</b><b class='flag-5'>輪轉(zhuǎn)調(diào)度</b>