关闭

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

标签: 30天自制操作系统
1274人阅读 评论(0) 收藏 举报
分类:

        昨天一直在搭建环境,想在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:减少对少数特殊情况的测试


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

      

0
1
查看评论

30天自制操作系统之第12天 定时器(1)

定时器的中断处理程序要保证高效率,需要进行一些优化,这里介绍优化的方法。对于一个操作系统来说,会有多个定时器,假设该操作系统维护了500个定时器,当每一次定时中断发生时(这里我们设定1秒发生100次中断),调用中断处理程序,中断处理程序会对这500个定时器进行if判断,看哪些正在被使用,这样1秒内,...
  • BlueCloudMatrix
  • BlueCloudMatrix
  • 2014-08-09 22:32
  • 1561

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

来开始第14 天的内容吧。                                       ...
  • u011879578
  • u011879578
  • 2014-02-27 14:30
  • 739

30天自制操作系统之第15天 多任务(1)

多任务的本质是利用定时器和far跳转在任务之间进行切换,具体来说,一开始先运行main函数(就是处理我们的鼠标、键盘和定时器等事件),0.02s后定时器超时,执行如下语句: farjmp(0, 4 * 8); 这是一个far跳转,先看一下farjmp的实现: _farjmp: ; void farj...
  • BlueCloudMatrix
  • BlueCloudMatrix
  • 2014-08-15 15:05
  • 1355

<30天自制操作系统>第四天

第四天内容主要是基于第三天的图形界面显示更进了一步。主要是更复杂的显示,而不是单纯的切换到显示模式。对显卡内存进行数据写入,从而显示出我们想要的画面。想要画东西,只要往VRAM里写数据即可,先看以下程序:_write_mem8: ; void write_mem8(int addr, int ...
  • talent_CYJ
  • talent_CYJ
  • 2016-07-22 14:03
  • 579

《30天自制操作系统》第1天

1.下载一个二进制编辑器(网上很多下载,google一下即可,也叫十六进制编辑器),他能直接对二进制数进行编辑。如果你对(某种处理器的)机器码非常熟悉的话,理论上可以用二进制编辑器完成(此处理器上的)任何软件的制作,小至一个计算器,大至一个编译器,操作系统(因为所有软件本质上都是CPU的机器指令和一...
  • a379039233
  • a379039233
  • 2013-12-21 18:18
  • 2709

《30天自制操作系统》 第三天

程序: 本次的程序,汇编语言:; haribote-os ; TAB=4 ORG 0xc200 ; 这个程序将要被装载到内存的什么地方呢? MOV AL,0x13 ; VGA显卡,320x200x8位彩色 MOV AH,0x00 INT 0x10 fin: H...
  • e891377
  • e891377
  • 2016-09-26 23:42
  • 301

《30天自制操作系统》——从汇编到C

这次我们要用到4个文件,分别是ipl.nas、asmhead.nas、func.nas和 bootpack.c。 ipl.nas是引导扇区中的16bit程序,用于从磁盘中加载数据并跳转到asmhead.nas中。 asmhead.nas也是16bit程序,用于加载全局变量表,切换cpu到32位的保护...
  • ekkie
  • ekkie
  • 2016-05-12 00:32
  • 892

《30天自制操作系统》——虚拟机使用

《30天自制操作系统》是一本学习操作系统的好教材,它教我们怎么从建立引导区开始,从零实现一个操作系统。但是,实现书中例子的时候,我们需要不断将我们写好的操作系统代码写入软盘并且还要不断重启电脑来试验我们的代码,大家一定感到很头疼吧。 与其不停的重启,不如使用模拟器,向大家推荐一款模拟器qemu,它是...
  • ekkie
  • ekkie
  • 2016-05-08 12:45
  • 1026

《30天自制操作系统》学习笔记(六)

IDT学习心得 (一)什么是中断?     通常被定义为一个事件,该事件改变处理器执行的指令顺序。例如通过键盘输入、点击鼠标等 (二)为什么要引入中断?     因为CPU的处理速度远高于外围硬件设备的响应速度,为了提高...
  • qq_35041101
  • qq_35041101
  • 2016-07-03 14:51
  • 402

30天自制操作系统——用U盘启动自制系统

最近试读了《30天自制操作系统》的前两章,感觉很有意思。 但是发现里面写的系统都是用软盘启动的,现在在大多数电脑上已经看不见软驱了,所以如果想运行书中的操作系统只能通过qemu(随书光盘中已经附带)模拟运行。这样的话成就感就会少很多,感觉像是在做一个简单的控制台程序,相信大多数童鞋都希望能做出...
  • h820911469
  • h820911469
  • 2014-02-28 14:52
  • 4751
    个人资料
    • 访问:376046次
    • 积分:5139
    • 等级:
    • 排名:第6418名
    • 原创:116篇
    • 转载:2篇
    • 译文:1篇
    • 评论:84条
    博客专栏