您的位置:首页 > 其它

30天自制操作系统

2015-03-11 18:30 183 查看
叠加处理

本章作者接着解决了上文内存分配的小问题,然后又对前文鼠标移动显示问题,提出了解决方案,就是本文的重点。

本章可以简单分为两个模块:解决内存分配问题,解决多层显示的问题。

1.解决内存分配问题

上文,内存分配我们并没有对分配空间最最小的限制。因此,如果大量的小空间分配,当释放时,就会出现许多不连续的小空间。会把frees耗尽。

因此,我们这里设置最小分配单位为4KB,对要求大小进行向上取整。

这里要主要提一下的就是作者巧妙的实现了向上取整功能,速度很快。

size = (size + 0xfff) & 0xfffff000;

这种理解就相当于对十进制取整123,对10 取整,123+9,在向下取整得到130一样。

2.叠加处理

对于多个图层显示问题,我们的解决思路就是分别储存每个图层数据,然后从底层向上层依次显示,这样,就能解决多层显示的问题。

因此,为了管理多个图层数据的存储、显示。我们设置了专门对图层管理的结构体。程序中主要有updown函数和refresh函数,其中作者连续二次对refresh进行改写。

最初,refresh函数只是简单的把各个图层显示出来。

改版一:refresh只是改写了需要重绘的一小块,这样就大大提高了速度。

改版2:refresh对改版一中大多无用的判断,进行修改,这样保证只有与重绘部分相关的图层那部分需要修改,不联系的图层就不用重绘。

通过两次的修改,程序运行的速度有了很大的提高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息