30天自制操作系统之第13天 定时器(2)

30天自制操作系统之第13天 定时器(2)

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

这一节我们相同仅仅讲优化工作,关于缓冲区的优化。

我们为键盘、鼠标和定时器各维护了一个FIFO缓冲区,假设定时器有100个,我们要创建100个FIFO缓冲区。这是不优雅的。

FIFO缓冲区的作用:拿定时器1来说,我们如何知道定时器1超时了。如果它的超时时间是10s,那么10s后,定时器1被告知超时,同一时候往它的FIFO缓冲区写入数据,这样在其它地方,我们仅仅需查看它的FIFO缓冲区是否有数据,就知道它是否发生了超时,如果超时了进行对应的提示工作。事实上简单的说,FIFO缓冲区起到了通讯员的作用。

回到我们的”优雅“问题,我们不必为每个定时器都维护一个FIFO缓冲区,100个定时器共享一个缓冲区,这样来进行区分:每个定时器超时后往FIFO缓冲区写入不同数据,到时我们读取数据,依据数据是什么得知是哪个定时器超时了。但有一个问题,如果有两个定时器的超时时间是一样的,会不会混乱?如果它们写入FIFO缓冲区的数据是5(5通常是它们的超时时间),我们仅仅需当读到5时,遍历定时器,看谁的超时时间是5,那么这两个定时器都会被处理了,所以不必操心。

这样本来100个缓冲区缩减到了1个,使得以下对全部缓冲区状态的检查代码得以解脱:

if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) + fifo8_status(&timerfifo) == 0) {

否则,后面要接着fifo8_status(&timerfifo2), fifo8_status(&timerfifo3), …。同理我们也能够将键盘、鼠标、定时器的缓冲区进行合并,用缓冲区存的数字来区分。

(写入FIFO的数值        中断类型)

0~1 ………………………… 光标闪烁用定时器

3 …………………………….. 3秒定时器

10 ………………………….. 10秒定时器

256~511 ………………… 键盘输入(从键盘控制器读入的值再加上256)

512~767 ………………… 鼠标输入(从鼠标控制器读入的值再加上512)

这样我们就能够用一个缓冲区进行统一管理了。

这样仅仅需对一个缓冲区的状态进行check,而不用再对1000个,3个进行check,从而大大提高性能。

以下是优化前后的对照,counter窗体的数字越大,说明性能越好。

优化前:

30天自制操作系统之第13天 定时器(2)

优化后:

30天自制操作系统之第13天 定时器(2)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118039.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java程序员烂大街了吗?No or yes?

    Java程序员烂大街了吗?No or yes?Java程序员烂大街了吗?当下,越来越多的企业需要程序员,即使不是互联网公司,很普通的公司程序员也是标配。过去程序员属于稀缺岗位,而今随着技术的发展在二三线城市,甚至四线五线城市,小县城都有程序员的需求。作为一个发展越来越成熟的行业,Java程序员越来越多,自然会感觉程序员到处都是。小乐认为,虽然越来越多,也不必过分的担忧。虽然现在学Java做Java的人很多,但不难发现依旧有很多公司在招聘Java程序员。究其原因就是现在Java程序员虽然很多,但是精的很少。简单的增删该查估计一个门外汉网上找个开源

    2022年7月8日
    46
  • 移动互联网寒冬,Android 程序员的出路在哪里?

    移动互联网寒冬,Android 程序员的出路在哪里?安卓行业主要问题是初级Android太多了,会写XML和Activity的程序员太多了,初中级程序员面临很大的竞争,现状也就偏于高级开发者。越来越多的初中级Android程序员找不到满意的工作,甚至根本找不到工作!所以很多人觉得Android要凉了,甚至不惜转行,从头学其它技术。现在的Android招聘要求,已经不是多年之前的要求了。Android应用开发发展到今天,已经成为…

    2022年6月14日
    36
  • Android程序员的年终总结「建议收藏」

    Android程序员的年终总结「建议收藏」欢迎您能进来,如果你也和我一样,对接下来的工作行情充满了太多的不确定性,那不妨停下您冲忙前进的脚步,和我一起重新刷新一下你自己的看法和规划吧!我的提问2019年Android真的还可以养活你自己? 2019年我的工作重心在哪一块? 2019年是继续留在原地做技术积累还是考虑跳槽? 对过去2018年的总结是否满意?我能做什么管理方向(天赋欠缺,暂不做讨论) 技术方向从An…

    2022年6月14日
    34
  • 给Android程序员的一些面试建议「建议收藏」

    给Android程序员的一些面试建议「建议收藏」前言应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程。我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司。我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试。什么是合适的候选者在介绍如何面试之

    2022年6月14日
    103
  • 12个Python程序员面试必备的问题与答案「建议收藏」

    本文列举了12个Python程序员面试必备的问题与答案,便于大家学习。例如:什么是pickling和unpickling、什么是Python的命名空间、*args,**kwargs?参数是什么、负索引是什么,等等。

    2022年1月18日
    139
  • Java程序员,到底要不要转行大数据?

    Java程序员,到底要不要转行大数据?前几天有个朋友在群里提问:如何看待大数据的未来?有必要转大数据方向吗?关于这个问题,谈谈我的思考。伴随公有云厂商的兴起,大数据的应用进入了2.0时代。传统大数据那种需要大量购买机器以及Hadoop发行商版本的时代一去不复返了,企业可以非常便利的按照自己的需要,在云端弹性的分配资源,并按照使用量付费。这使得大数据技术不但进入到了传统意义上的大中型企业,更是深入到了各行各业的小企业和创…

    2022年7月7日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号