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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2019 Python最新面试题及答案16道题

    在Python相关的工作岗位面试中,基础语法是必考的一个部分,它考察求职者对Python语言的最基本掌握情况;其次是数据库相关的问题,如查询,修改,插入数据等,数据库所占的比重也很大,不容小觑。

    2022年1月18日
    71
  • 1、win10下的python3.5.4安装

    现在越来越多人入坑python了,当然我也不例外。作为一个java程序员的我,在空余时间就慢慢学习python了 。第一件事就是安装Python啦。(主要以Python 3.5.4为例)一、官网下载安装包官网地址:https://www.python.org/downloads/windows/ 都说越新越好嘛,其实我觉得都差不多,但是3.6跟3.5还是有点区别的嘛,所以我…

    2021年11月30日
    61
  • Java程序员必看的 14 本 Java 书籍![通俗易懂]

    Java程序员必看的 14 本 Java 书籍![通俗易懂]关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书!毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单。在下面这13本书籍中小编还是要建议大家可以先去关注英文原版,毕竟翻译的书籍中都有一定的语法错误。 入门 《HeadFirstJava》作者:KathySierra/…

    2022年7月7日
    118
  • 电子书 android高薪之路-android程序员面试宝典.pdf

    电子书 android高薪之路-android程序员面试宝典.pdf《Android高薪之路:Android程序员面试宝典》取材于各大IT公司面试真题,所给出的试题尽可能地覆盖了Android应用开发的各个方面,而且大多数试题都有解析部分,读者可以通过这部分更深入地理解试题中所包含的技术内容,希望真正做到由点成线,举一反三。 书中还将Android中涉及的各个常用技术问题进行筛选、分类。这样读者可以有的放矢,对自己还没有掌握的Android技术进行重点攻…

    2022年4月28日
    119
  • Java程序员烂大街了吗?是,也不是

    Java程序员烂大街了吗?是,也不是Java程序员烂大街了吗?有网友吐槽精通的人少,半吊子的人烂大街。半吊子程序员确实不少,除了自身学习有关,还跟培训机构教学有关,工作后能不能继续学造有关,现在学编程的越来越多,所以企业要求相对也比前些年要高很多。  企业想招一个合格的Jjava程序员很不容易。烂大街的说法有网友不怎么赞同,因为市场自己会过,留下好的淘汰掉不合格的。不合格的程序员有一些会放弃,从事别的工作,也有的会坚持学习达到市场的要求。只不过还有很多人在选择进入这个行业而已,很正常的现象。  以前可能知道大概会怎么使用就能找份不

    2022年7月7日
    315
  • 2020年到来,还不为来年的Python面试做准备?

    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要给大家介绍一些Python面试题,例如:迭代器和生成器的区别;什么是线程安全;什么是私有变量;内置变量;函数和方法;类;模块和包等等问题。

    2022年1月18日
    66

发表回复

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

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