30天自制操作系统

来源:互联网 发布:非平衡面板数据是什么 编辑:程序博客网 时间:2024/05/02 01:16

叠加处理
本章作者接着解决了上文内存分配的小问题,然后又对前文鼠标移动显示问题,提出了解决方案,就是本文的重点。
本章可以简单分为两个模块:解决内存分配问题,解决多层显示的问题。
1.解决内存分配问题
上文,内存分配我们并没有对分配空间最最小的限制。因此,如果大量的小空间分配,当释放时,就会出现许多不连续的小空间。会把frees耗尽。
因此,我们这里设置最小分配单位为4KB,对要求大小进行向上取整。
这里要主要提一下的就是作者巧妙的实现了向上取整功能,速度很快。
size = (size + 0xfff) & 0xfffff000;
这种理解就相当于对十进制取整123,对10 取整,123+9,在向下取整得到130一样。
2.叠加处理
对于多个图层显示问题,我们的解决思路就是分别储存每个图层数据,然后从底层向上层依次显示,这样,就能解决多层显示的问题。
因此,为了管理多个图层数据的存储、显示。我们设置了专门对图层管理的结构体。程序中主要有updown函数和refresh函数,其中作者连续二次对refresh进行改写。
最初,refresh函数只是简单的把各个图层显示出来。
改版一:refresh只是改写了需要重绘的一小块,这样就大大提高了速度。
改版2:refresh对改版一中大多无用的判断,进行修改,这样保证只有与重绘部分相关的图层那部分需要修改,不联系的图层就不用重绘。
通过两次的修改,程序运行的速度有了很大的提高。

0 0
原创粉丝点击