现在的位置: 首页 > 综合 > 正文

《30天自制操作系统》学习笔记——第十三天

2014年06月10日 ⁄ 综合 ⁄ 共 624字 ⁄ 字号 评论关闭

        好的,来到第十三天。

                                           

       第十三天继续优化定时器。首先是合并FIFO缓冲区。这点上次已经提及。不同的timer在中断处理时,把数据都写在一个FIFO里,区分各个timer的就是写入的data。以下是特征图:

                                

       后面还会加入任务切换的专用timer,data为2。

       为了加快中断处理,我们考虑把中断处理中的移位处理去掉,可是怎么去呢?当各个timer是以顺序表的结构存在时,每当一个timer超时,管理剩下的timer就必须移位。那怎么办?解决方法应该从数据结构入手。我们知道,顺序表的数据结构的优点是可以随机地插入,但缺点就是插入和删除很复杂。而链表的则插入和删除非常便利。并且此处timer的增删不是固定的顺序,而是需要挨个比较超时时间,所以这里顺序表的结构没有优势,此处换成链表。插入节点的原理图如下:

                                        

      接下来,作者用了一个小技巧,并将其称为“哨兵”。说的是,在timer_settime的函数中,我们必须考虑到timer有可能出现以下四种情况:

                                          

      针对这四种情况要有不同的处理方法,显得很麻烦。那我们如何将其精简?可以设置一个时间长近乎无穷大的timer,那就可以省掉第一种和最后一种情况的讨论。于是进一步提高了程序的速度。

      今天的内容不多,收工!

抱歉!评论已关闭.