30天自制操作系统 pdf_30天自制操作系统阅读心得PartC

Task与小根堆timer结合

上一篇文章,我们用小根堆优化了timer设计与实现。今天阅读15-16天章节,内容为挑战多任务。通过阅读,发现多任务管理主要是基于之前实现的timer。最初的设计就是用timer计时,每隔0.02s切换一次进程,后面加入了任务优先级,任务分层优化,是的不同进程分配的运行时间不同。但归根结底,主要是基于之前实现的timer。

ok,那么我们来对比一下,我们优化后的timer和作者提供的timer。改代码,编译,排错。几轮过后,我们的timer和task系统兼容了(其实遇到了一个坑点,开机小概率黑屏,浪费了我2小时debug)

98123fe23557b00536949f2ea85dbd89.png
https://www.zhihu.com/video/1126507875445772288

测试时,额外开启的5个进程,左为小根堆timer,右为作者timer。观察可知,除去5号进程相差无几外,其他4个进程运算速度都大幅度提高。

Task设计与实现

这个作者给出的版本,性能还是堪忧。我现在有个未经验证的想法,就是用两个链表来管理task数据。

  • 双向环形链表(保存正在运行中的task数据),外加指向正在运行的task数据指针p_curRunTask。
  • 单链表(保存未使用的task数据),外加表头p_unusedHead。

新建task时,可做如下操作:

p_taskToAdd 

删除task时,可做如下操作:

p_taskToDelete->pre->next = p_taskToDelete->next;
p_taskToDelete->next->pre = p_taskToDelete->pre;
p_taskToDelete->next = p_unusedHead ;
p_unusedHead = p_taskToDelete;

执行task,就是循环遍历环形列表。

依照如此,设计无论新建,删除,执行task都是

,当然还需要改进来适配分层的任务。

就目前来说,由于布娃娃系统,没有过多任务需要并行,所以我还没有把这个代码合入到系统中。如果之后有空闲时间,可以合入代码并验证性能是否能够提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值