Re: [請益] 排程相關的演算法(優先佇列)

作者: Apache (阿帕契)   2022-10-21 22:09:00
這書不好是他直接假設你知道計算機的timer怎麼用
這邊有個範例
https://www.embeddedrelated.com/showarticle/182.php
計算機底層沒有提供幾點幾分做什麼事這種很高階的排程器
你如果要計算時間的話 唯一的精確方式就是用CPU提供的timer interrupt
概念上大概就是對timer寫入要等待的時間跟一些參數
時間到的時候timer會拉一個interrupt 跳轉到timer的ISR(一個函數)
這樣就完成一次時間的計算
但問題來了 CPU通常不會有太多timer
所以你一次只能計很有限的事情
要多排幾個東西的話 就要把task都存起來
進到ISR的時候來檢查現在要做什麼
其中最有效的方式就是PQ
因為PQ保證頂端的工作必定是下一個工作
只要取pq.top().time - now()就能得到下一次要等待的時間
如果中途插入也是一樣的操作
當然你要用list 或array也可以 但這就單純浪費複雜度
至於RR還是SJF 跟這邊沒有任何關係
頂多就是你在實現multitasking的時候會需要用timer來做scheduling
作者: ntpuisbest (阿龍)   2022-10-21 22:49:00
原來底層沒有提供幾點幾分喔,想問為何array是浪費複雜度
作者: gasbomb (虛空雷神獸)   2022-10-21 22:51:00
因為array你沒辦法用O(1)拿到最優先的task除非你每次insert的時候都sort 可是這樣更浪費
作者: Apache (阿帕契)   2022-10-21 23:09:00
你再想一下 我覺得你沒有搞清楚問題
作者: MoonCode (MoonCode)   2022-10-21 23:39:00
這id好棒 內容也讚
作者: humanfly (laguna@HEADSHOT)   2022-10-22 00:32:00
感謝分享
作者: jasonwung (路人JJ)   2022-10-22 00:40:00
推推
作者: ntpuisbest (阿龍)   2022-10-22 00:46:00
概念上大概就是對timer寫入要等待的時間跟一些參數時間到的時候timer會拉一個interrupt 跳轉到timer的ISR(一個函數)我想重點應該在這句?
作者: viper9709 (阿達)   2022-10-22 00:49:00
推解說
作者: Firstshadow (IamCatづミ'_'ミづ)   2022-10-22 08:59:00
大師
作者: oneheat (等待)   2022-10-22 13:56:00
不是Kernel沒有提供幾點幾分,而是Kernel的機制是會有一個固定的timer 每n ms(看freq 多少),會起來做一次一系列的操作
作者: jason222333 (發呆)   2022-10-22 14:03:00
作者: longlongint (華哥爾)   2022-10-22 14:56:00
講的不錯而且有看對問題 推
作者: Hsins (翔)   2022-10-23 14:01:00
這文章好棒欸
作者: Karlsland (Erica)   2022-10-23 23:16:00
大師
作者: richer6605 (Rhapsody)   2022-10-25 02:52:00
作者: sxy67230 (charlesgg)   2022-10-25 10:31:00
補充一下計時的部分,現在很多年輕一輩都不知道主機板其實有一個RTC電池,主要是要儲存物理時鐘透過石英晶體來計時,早期PC那個壞掉要做schedule就很麻煩,現在基本上這塊已經做到很難壞了我覺得原原PO把一個複合的問題沒有想得很透徹,timer、interrupt、scheduler是一個複合的概念,全部都變成一個就很難抽象思考

Links booklink

Contact Us: admin [ a t ] ucptt.com