《30天自制操作系统》学习笔记--第12天
昨天一直在搭建环境,想在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天相关推荐
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...
- 《30天自制操作系统》笔记(04)——显示器256色
<30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...
- 《30天自制操作系统》笔记(09)——绘制窗口
<30天自制操作系统>笔记(09)--绘制窗口 进度回顾 上一篇中介绍了图层式窗口管理的思路和算法.在此基础上,本篇就解决绘制窗口及其简单的优化问题. 这里稍微吐槽一下<30天自制操 ...
- 30天自制操作系统【笔记】
Day1 第四节我贴出部分源代码: ; hello-os ; TAB=4ORG 0x7c00 ; 指明装载的地址; 以下的记述用于标准FAT12格式的软盘JMP entryDB 0x90DB &quo ...
- 30天自制OS学习笔记 (四)C语言与画面显示的练习
(四)C语言与画面显示的练习 1. 用C语言实现内存导入 这里说的用C语言实现内存写入不是用指针实现,而是用汇编语言写的内存写入函数,用C语言调用. _write_mem8: ; void write ...
- 《30天自制操作系统》笔记----Day6
DAY6: 1.分割源文件: 文件分类大致流程图: #mermaid-svg-XEka8fgOQPpmAR7z .label{font-family:'trebuchet ms', verdana, ...
- 30天自制操作系统读书笔记(三)
来吧.第三天. 制作真正的IPL: 作者又是那样,一上来就甩一堆代码,用他的话猜测,下面这段代码应该是用来装载下一个512字节的内容的. MOV AX,0x0820MOV ES,AXMOV CH,0 ...
- 自制操作系统学习笔记(3)-INT 0x10软中断显示字符串
Makefile: syslearn: learn.nas Makefilenasm learn.nas -o syslearn.img clean:del *.img 描述: 以电传打字机的方式显示 ...
- 自制操作系统学习笔记(2)-汇编程序体验
Netwide Assembler https://www.nasm.us/ ;learn2-osDB 0xeb,0x4e,0x90DB " lxaipro";启动区名称DW 51 ...
- 自制操作系统学习笔记(1)-虚拟机启动软盘
visualbox新建其它虚拟电脑,启动顺序选择软驱. 安装UltraEdit
最新文章
- singleton设计模式_让我们研究一下Singleton设计模式的优缺点
- SAP HUM 使用HU02将几个HU打包到一个外层新的HU号码里
- 防止过拟合以及解决过拟合
- 【封装那些事】 泄露的封装
- LeetCode 230. Kth Smallest Element in a BST
- 解决H5的a标签的download属性下载service上的文件/图片出现跨域问题
- html中什么是围堵标签,HTML回顾(基础标签)
- python rsa加密解密 字符串_python_rsa加密解密
- matlab聚合矩阵,c#和ILNumerics与Matlab中最有效的矩阵聚合方式
- Atitit 防伪防篡改方法总结关键数据的防篡改检验方法
- c语言日历程序实验报告,万年历实验报告.doc
- 一文带你了解隐私 Layer1
- linux实用技巧:通过命令行安装deb软件包
- 文件 或者 图片 与 base64 之间的转换
- python躲方块_pygame实现的《躲小球》
- 助力金融科技产业发展 360金融AI之夜成功举办
- Excel VBA基础教程
- Anaconda------环境管理
- Baumer工业相机堡盟相机使用CameraExplorer软件进行相机参数保存与 UserSet参数设置
- linuxprobe 正式开课
热门文章
- Python字符串杂谈
- (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
- 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
- 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...
- html怎么叠加透明图片,css – 您可以在图片上叠加透明div
- 关于使用stm8单片机的“外部计数”TIMx_ETR测脉冲的软件配置问题!
- 2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战
- 恭贺德林教点穴网成立
- Python中in和has_key的性能比较
- exec函数用法总结