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