30天自制操作系统
文章平均质量分 60
刘秋杉
区块链资深研究者
展开
-
30天自制操作系统之第11天 制作窗口
这一节虽然题目是“制作窗口”,但实际上制作窗口只需用像素画一个即可,难点是由于加入了计数器,会出现闪烁的情况,这里就讲一下消除闪烁的做法。counter窗口在疯狂的计数,鼠标放在飞了的数字上,会出现闪烁,解决方法是:在每次画面的重新绘制中,只绘制counter所在的图层,让鼠标所在的图层不用进行绘制。根据这个思路,具体的方法如下。我们用不同的数字代表不同的层,2便是coun原创 2014-08-08 23:23:02 · 2625 阅读 · 0 评论 -
30天自制操作系统之第12天 定时器(1)
定时器的中断处理程序要保证高效率,需要进行一些优化,这里介绍优化的方法。对于一个操作系统来说,会有多个定时器,假设该操作系统维护了500个定时器,当每一次定时中断发生时(这里我们设定1秒发生100次中断),调用中断处理程序,中断处理程序会对这500个定时器进行if判断,看哪些正在被使用,这样1秒内,就会有500X100=10000次if判断,而中断处理程序最讲究节省时间。实际上,我们不必每发生一次原创 2014-08-09 22:32:07 · 2285 阅读 · 0 评论 -
30天自制操作系统之第13天 定时器(2)
这一节我们同样只讲优化工作,关于缓冲区的优化。我们为键盘、鼠标和定时器各维护了一个FIFO缓冲区,如果定时器有100个,我们要创建100个FIFO缓冲区。这是不优雅的。FIFO缓冲区的作用:拿定时器1来说,我们怎样知道定时器1超时了。假设它的超时时间是10s,那么10s后,定时器1被告知超时,同时往它的FIFO缓冲区写入数据,这样在其他地方,我们只需查看它的FIFO缓冲区是否有数据,就知道原创 2014-08-10 16:56:32 · 1932 阅读 · 0 评论 -
30天自制操作系统之第15天 多任务(1)
多任务的本质是利用定时器和far跳转在任务之间进行切换,具体来说,一开始先运行main函数(就是处理我们的鼠标、键盘和定时器等事件),0.02s后定时器超时,执行如下语句:farjmp(0, 4 * 8);这是一个far跳转,先看一下farjmp的实现:_farjmp: ; void farjmp(int eip, int cs) JMP FAR [ESP+4] ; eip, c原创 2014-08-15 15:05:25 · 2084 阅读 · 0 评论 -
30天自制操作系统之第17天 命令行窗口
我们把命令行窗口单独做成一个新的任务。 要实现字符输入,只要在键盘被按下的时候向console_task(命令行窗口任务)的FIFO发送数据即可。但要发送数据必须要知道struct FIFO的内存地址才行。 把 struct FIFO 放到 struct TASK里面。基本上没有什么任务是完全用不到FIFO的,因此我们把它们绑定起来。struct TASK { int sel, fl原创 2015-10-11 20:39:49 · 3615 阅读 · 0 评论