昨天一直在搭建环境,想在mac下实现书上制作镜像和编译连接相关文件的功能,无奈,弄了一天还是不太好用,看到另外一个微博上的童鞋用Linux完成了相关操作,想试一下,但os x上没有objcopy等命令,而且gcc好像也是改版的,而且现在被我折腾的连命令行下使用command line tools 都有问题,所以,我还是回来把笔记补上。一会儿再去弄,争取放假之前能把环境搞定,这样寒假就可以专心研制自己的系统了,而不用把时间花到细枝末节上。

昨天的内容讲的是计时器,我一开始没觉得定时器有啥功能,无非是弄个钟表出来,后来我看到了超时(timeout)恍然觉得这个东西很主要,作者并没有直接说去定时器在以后的实现中有什么作用,但是一直对中断处理程序进行优化可以看出,这个东西以后要被不停地使用,而且作者提出定时器后,马上有多弄了几个,而且最多能实现500个定时器,第十二天的主要工作就是优化处理速度,因为中断处理时所有的中断信号都被屏蔽了,所以必须快速的处理,恢复中断响应。

下面的图是作者最开始的设计:

其中条状的是定时器的执行时间,横坐标是时间,纵坐标是各定时器,不论有多少个定时器,都要循环500次(也就是最多个的情况),所以这对要求效率的工作并不是个好主意,于是开始优化。

首先可以将定时器排队,就像我们有两场球赛在不同的频道,一个十分钟后在c1频道,一个二十分钟后在c2频道,我们只要盯着那个十分钟后开始的c1频道就可以了,你可以每两分钟过来看一下,如果c1开始了,我们才会去关注c2是否开始(寝室有一哥们能同时看三场球。。。。)也就是说c1不发生,理论上来说c2绝不会发生,所以就优化出了下图:

上图横轴是时间,没有纵轴,每个小格子就是不同的定时器之间的间隔,每个定时器都是从头开始到对应的线,也就是把所有定时器从小到大排列起来,然后弄到一根轴上,这样就可以只监视下一个要超时的定时器就可以了。

而上图还是要监视500个,于是下一步的优化就是记录当前计时器的个数,减少循环,之前还有一步就是尽量减少循环中的计算,包括比较(if语句)尽量减少少数情况的判断,提高速度。

涉及到的主要问题就是速度优化,下面列举一些常用到的比较简单的循环体的优化方式:

1:将在循环里面多次计算,但是结果不会改变的计算,移到循环外面去。

2:减少函数调用

3:减少内存访问

4:减少对少数特殊情况的测试

目前就这些,以后用到定时器会继续说。。

《30天自制操作系统》学习笔记--第12天相关推荐

  1. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  2. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

  3. 《30天自制操作系统》笔记(09)——绘制窗口

    <30天自制操作系统>笔记(09)--绘制窗口 进度回顾 上一篇中介绍了图层式窗口管理的思路和算法.在此基础上,本篇就解决绘制窗口及其简单的优化问题. 这里稍微吐槽一下<30天自制操 ...

  4. 30天自制操作系统【笔记】

    Day1 第四节我贴出部分源代码: ; hello-os ; TAB=4ORG 0x7c00 ; 指明装载的地址; 以下的记述用于标准FAT12格式的软盘JMP entryDB 0x90DB &quo ...

  5. 30天自制OS学习笔记 (四)C语言与画面显示的练习

    (四)C语言与画面显示的练习 1. 用C语言实现内存导入 这里说的用C语言实现内存写入不是用指针实现,而是用汇编语言写的内存写入函数,用C语言调用. _write_mem8: ; void write ...

  6. 《30天自制操作系统》笔记----Day6

    DAY6: 1.分割源文件: 文件分类大致流程图: #mermaid-svg-XEka8fgOQPpmAR7z .label{font-family:'trebuchet ms', verdana, ...

  7. 30天自制操作系统读书笔记(三)

    来吧.第三天. 制作真正的IPL: 作者又是那样,一上来就甩一堆代码,用他的话猜测,下面这段代码应该是用来装载下一个512字节的内容的. MOV AX,0x0820MOV ES,AXMOV CH,0 ...

  8. 自制操作系统学习笔记(3)-INT 0x10软中断显示字符串

    Makefile: syslearn: learn.nas Makefilenasm learn.nas -o syslearn.img clean:del *.img 描述: 以电传打字机的方式显示 ...

  9. 自制操作系统学习笔记(2)-汇编程序体验

    Netwide Assembler https://www.nasm.us/ ;learn2-osDB 0xeb,0x4e,0x90DB " lxaipro";启动区名称DW 51 ...

  10. 自制操作系统学习笔记(1)-虚拟机启动软盘

    visualbox新建其它虚拟电脑,启动顺序选择软驱. 安装UltraEdit

最新文章

  1. singleton设计模式_让我们研究一下Singleton设计模式的优缺点
  2. SAP HUM 使用HU02将几个HU打包到一个外层新的HU号码里
  3. 防止过拟合以及解决过拟合
  4. 【封装那些事】 泄露的封装
  5. LeetCode 230. Kth Smallest Element in a BST
  6. 解决H5的a标签的download属性下载service上的文件/图片出现跨域问题
  7. html中什么是围堵标签,HTML回顾(基础标签)
  8. python rsa加密解密 字符串_python_rsa加密解密
  9. matlab聚合矩阵,c#和ILNumerics与Matlab中最有效的矩阵聚合方式
  10. Atitit 防伪防篡改方法总结关键数据的防篡改检验方法
  11. c语言日历程序实验报告,万年历实验报告.doc
  12. 一文带你了解隐私 Layer1
  13. linux实用技巧:通过命令行安装deb软件包
  14. 文件 或者 图片 与 base64 之间的转换
  15. python躲方块_pygame实现的《躲小球》
  16. 助力金融科技产业发展 360金融AI之夜成功举办
  17. Excel VBA基础教程
  18. Anaconda------环境管理
  19. Baumer工业相机堡盟相机使用CameraExplorer软件进行相机参数保存与 UserSet参数设置
  20. linuxprobe 正式开课

热门文章

  1. Python字符串杂谈
  2. (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  3. 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
  4. 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...
  5. html怎么叠加透明图片,css – 您可以在图片上叠加透明div
  6. 关于使用stm8单片机的“外部计数”TIMx_ETR测脉冲的软件配置问题!
  7. 2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战
  8. 恭贺德林教点穴网成立
  9. Python中in和has_key的性能比较
  10. exec函数用法总结