打印

发贴自贺:“零耗时键盘OS理论”雷翻了Linux的动态优先调度

[复制链接]
1553|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2009-2-24 02:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
hotpower 发表于 2009-2-24 02:05 侃单片机 ←返回版面    

20楼: 菜农的“零耗时键盘OS理论”雷翻了Linux的动态优先调度算法 

想与18楼01dxwlm再次讨论任务调度资源再优化问题

首先我们的方法没什么雷同问题,因为想做OS的都能想到这个主意。

这个方法实际类似Linux的动态优先调度算法,它的初值是任务的级别。
并初始化级别就绪计数器。

每次节拍中断时,计数器依据此值逐次递减,减到零时认为该任务就绪。

楼主位的思路是为每个任务都配置一对,因为他们的初值及级别不同,

想到每组的配备无可厚非。

但是仔细分析后感觉没必要,观点论述如下:

因为考虑同级问题,为区分快捷和不排序,遍历时对每个任务的就绪

计数器作递减操作,至零则就绪。

俺又考虑强实时,故将节拍加速,及倍频为8.

这样就绪计数器的初值就变成了级别的8倍。

由于我又改变了设计,0级别最高且为事件而非任务服务,

这样级别1要8个节拍后才递减为0而就绪,若其他7个任务级别都为1时

第8个节拍后这7个任务都将就绪,但由于考虑强实时问题,这7个任务

必须依次在各自的节拍内就绪。

注意:这里每个级别被中断了8次,原来一个节拍10mS,现在实际变为

10ms/8=1.25mS.

这8个节拍首个节拍(0级别)为系统事件(俺定义级别高于任务)

这样完全满足了强实时的要求。

那么为了继续节约,若是一个就绪计数器都不要了又将如何???

俺被菜农“零耗时键盘”的时间片轮询思想所迷惑,更被“扫而不描”

之“理论”所雷翻~~~故设想如下:

1.设置一个公用的节拍计数器,永远没有初值(初始化为0后一直滚动+1)
2.规定此节拍计数器的低3位D2D1D0为同级优先的该任务的级别。
  高3位D5D4D3为任务的序号。最高2位无意思。
任务级别表:
(键盘列)(键盘行)
  任务0:    级别0(恒为最高0)
  任务1:    级别1
  任务2:    级别2
  任务3:    级别1
...................
当节拍计数器运行(注意"键盘"的扫而不描)时,

注意下面“扫描”的次数为8进制。
00次:(“扫而要描”--就绪,任务级别表里有任务0,级别0)
    D5D4D3=0即“键盘的0行”,OS任务级别0
    D2D1D0=0即“键盘的0列”,OS任务序号0---系统任务就绪
01次:(“扫而不描”,任务级别表里没有任务1,级别0)
    D5D4D3=0即“键盘的0行”,OS任务级别0
    D2D1D0=1即“键盘的1列”,OS任务序号1
02次:(“扫而不描”,任务级别表里没有任务2,级别0)
    D5D4D3=0即“键盘的0行”,OS任务级别0
    D2D1D0=2即“键盘的2列”,OS任务序号2
.....................................................
07次:(“扫而不描”,任务级别表里没有任务7,级别0)
    D5D4D3=0即“键盘的0行”,OS任务级别0
    D2D1D0=7即“键盘的7列”,OS任务序号7
.....................................................
10次:(“扫而不描”,任务级别表里没有任务0,级别1)
    D5D4D3=1即“键盘的1行”,OS任务级别1
    D2D1D0=0即“键盘的0列”,OS任务序号0---系统任务强行就绪
11次:(“扫而要描”--就绪,任务级别表里有任务1,级别1)
    D5D4D3=1即“键盘的1行”,OS任务级别1
    D2D1D0=1即“键盘的1列”,OS任务序号1---任务1级别1就绪
12次:(“扫而不描”,任务级别表里没有任务2,级别1)
    D5D4D3=1即“键盘的1行”,OS任务级别1
    D2D1D0=2即“键盘的2列”,OS任务序号2
13次:(“扫而要描”--就绪,任务级别表里有任务3,级别1)
    D5D4D3=1即“键盘的1行”,OS任务级别1
    D2D1D0=3即“键盘的3列”,OS任务序号3---任务3级别1就绪
.....................................................
17次:(“扫而不描”,任务级别表里没有任务7,级别1)
    D5D4D3=1即“键盘的1行”,OS任务级别1
    D2D1D0=7即“键盘的7列”,OS任务序号7
20次:(“扫而不描”,任务级别表里没有任务0,级别2)
    D5D4D3=2即“键盘的2行”,OS任务级别2
    D2D1D0=0即“键盘的0列”,OS任务序号0---系统任务强行就绪
21次:(“扫而不描”,任务级别表里没有任务1,级别2)
    D5D4D3=2即“键盘的2行”,OS任务级别2
    D2D1D0=1即“键盘的1列”,OS任务序号1
22次:(“扫而要描”--就绪,任务级别表里有任务2,级别2)
    D5D4D3=2即“键盘的2行”,OS任务级别2
    D2D1D0=2即“键盘的2列”,OS任务序号2---任务2级别2就绪
..........................................................

看看上面的“零耗时键盘”运行结果和任务级别表的就绪是否一致
00次:(“扫而要描”--就绪,任务级别表里有任务0,级别0)
10次:(“扫而不描”,任务级别表里没有任务0,级别1)
    D2D1D0=0即“键盘的0列”,OS任务序号0---系统任务强行就绪
11次:(“扫而要描”--就绪,任务级别表里有任务1,级别1)
13次:(“扫而要描”--就绪,任务级别表里有任务3,级别1)
20次:(“扫而不描”,任务级别表里没有任务0,级别2)
    D2D1D0=0即“键盘的0列”,OS任务序号0---系统任务强行就绪
22次:(“扫而要描”--就绪,任务级别表里有任务2,级别2)
再看看任务级别表:
(键盘列)(键盘行)
  任务0:    级别0(恒为最高0)00次,10次,20次
  任务1:    级别1 11次 (因为它比任务2,2级别高,故在第1*8+1=9次时就绪)
  任务2:    级别2 22次 (因为它比任务3级别低,故在第2*8+2=18次时就绪)
  任务3:    级别1 13次 (因为它比任务2级别高,故在第1*8+3=11次时就绪)

“零耗时键盘”中的“扫而不描”把人雷翻了~~~


昨天菜农用5个位(不到1个字节)雷翻了4×8×16位任务函数指针即64个字节
现在用6个位D5D4D3D2D1D0替代了至少7个任务级别就绪计数器。

那么2天菜农之“战果”为:
用5+6=11位算2字节雷翻了64+7=71个字节~~~

71个字节对于MCS51单片机可怜的RAM而言,真是“功德无量”呀~~~

再次感谢“苍天”~~~“感谢菜农80年代的零耗时键盘OS理论”~~~

相关帖子

沙发
HotC51| | 2009-2-24 08:12 | 只看该作者

哈哈~~~团课一定要讲~~~

使用特权

评论回复
板凳
| | 2009-2-24 09:35 | 只看该作者

感觉离一个完整的OS不远了,加油啊.注意身体.

模仿与创新....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝