楼主:
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
原来底层没有提供几点几分喔,想问为何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
推推
概念上大概就是对timer写入要等待的时间跟一些参数时间到的时候timer会拉一个interrupt 跳转到timer的ISR(一个函数)我想重点应该在这句?
作者:
oneheat (等待)
2022-10-22 13:56:00不是Kernel没有提供几点几分,而是Kernel的机制是会有一个固定的timer 每n ms(看freq 多少),会起来做一次一系列的操作
作者: longlongint (华哥尔) 2022-10-22 14:56:00
讲的不错而且有看对问题 推
作者:
Hsins (翔)
2022-10-23 14:01:00这文章好棒欸
作者:
sxy67230 (charlesgg)
2022-10-25 10:31:00补充一下计时的部分,现在很多年轻一辈都不知道主机板其实有一个RTC电池,主要是要储存物理时钟透过石英晶体来计时,早期PC那个坏掉要做schedule就很麻烦,现在基本上这块已经做到很难坏了我觉得原原PO把一个复合的问题没有想得很透彻,timer、interrupt、scheduler是一个复合的概念,全部都变成一个就很难抽象思考