您的位置:首页 > 产品设计 > UI/UE

个人编写的多任务调度器及GUI图形多窗口界面

2007-04-21 23:27 411 查看
个人编写的多任务调度器及GUI图形多窗口界面

 


本人是个业余编程爱好者,花费了不少业余时间对任务调度和GUI图形界面进行了相当的研究,看了大量的书,尤其是对Minix和Windows NT(单CPU)任务调度算法和内核结构的研究时间较长,同时对Mini GUI和FireXOS的窗口裁减和消隐处理也有较为深入的研究。

在观摩他人理论和实践的基础上,自己也进行了一定量的动手练习和学习验证,下面超链接中的小小演示就是对个人业余学习的一个总结,也是自己对自己进行的一个开卷考试(真诚希望有兴趣的网友批评指正其中的不足之处)。

在此演示中包含两个部分:任务调度内核和视口裁减及消隐处理引擎,其功能分别如下。

任务调度内核(rtCell):

1.      完全抢占的实时微内核结构,独立的内核栈,中断和系统调用均切换到内核栈执行;

2.      256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级,空闲任务不占用正常优先级:0~255(0~63或0~31);

3.      不同优先级任务完全抢占,相同优先级之间可按先进先出或时间片轮转方式执行(可在创建任务时选择其执行方式);

4.      在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定时器、任务延迟、一次性定时(此时需定义一超时后执行的异步过程APC);此定时器服务任务的优先级由其客户任务的最高优先级驱动,随之动态改变,以消除隐式优先级反转现象;

5.      提供任务(Task)、互斥锁(Mutex)、信号量(Semaphore)、位域标志(Flag)、定时器(Timer)、优先级消息(Message)和环形队列(Ring buffer)共7种内核对象;

6.      任何内核对象用一整数ID标识,而非指针,从而可避免用户任务中野指针的副作用,内核对象总数不超过61440(即60K);

7.      互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且在互斥锁被占用时总按任务的优先级排队等待,优先级高者被优先唤醒并取得互斥锁;优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议则可支持不同互斥锁的多次嵌套调用;

8.      其它内核对象的等待方式有两种:优先级等待和先进先出(节省内存)等待,可在创建时选择;

9.      内核数据同步(互斥)执行时,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它地方均以延迟过程调用(Window用语DPC)方式执行;

10.  任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此异步过程(或信号)将在该任务下次被调度时执行;

11.  删除避免机制,拥有互斥锁的任务及处于忙(或被占有)状态的互斥锁均具有防止被意外删除的机制;要删除拥有互斥锁的任务必须使其自行终止或调用任务终止函数强行终止该任务,而要删除任一个互斥锁则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除;

12.  对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。

13.  在内核中实现了中断的进出接口,因此用户中断处理只需编写标准的C函数,而不必关心中断处理过程与内核底层的相互关系和细节;

14.  系统调用以陷阱指令(x86中int指令)实现,易于扩展到支持“内存保护”的进程模式;

15.  在内核库之外提供了一个简单的堆内存分配机制,用于内核对象动态内存分配时调用。

 

视口裁减及消隐处理引擎(giCell):

1.    完善而精巧的多视口裁剪和消隐处理引擎,与微内核rtCell紧密结合;

2.    真正的事件(或消息)驱动的多窗口(视口)技术,支持顶层窗口和透明窗口的显示和裁剪处理;

3.    当前支持Label、Edit、Botton、Slider、Listbox、TreeView和Checkbox控件,其中的Edit控件支持剪切、复制和粘贴(ctrl+x,ctrl+c,ctrl+v);

4.    支持窗口的平移、缩放,和窗口系统按钮,及窗口和控件的过程回调;

5.    基于透明视口(或窗口)的裁剪和消隐处理,可生成任何非矩形(多态)窗口,本示例中的三角形窗口就是基于透明视口来实现的;

6.    内存需求小(不到64K),窗口和控件所耗内存很小(全部采用直接读写显存技术,没有内存设备),因此实用性强,包括rtCell调度内核、鼠标、键盘及图形驱动,在DOS下也仅 100 多 K 字节;
7. 鼠标光标动态改变功能。

 

最新演示:https://gro.clinux.org/frs/download.php/2083/giCell_1024x768.rar
演示方法:解压缩giCell.rar到一文件夹,在windows下(双击)执行该文件夹my_gui.bat,或在纯dos下直接执行my_gui.exe(在windows的dos窗口中无鼠标)。

最新源代码包含TreeView、ListView; ListView支持标题栏平移和缩放,Scrollbar支持鼠标滚轮驱动。 可在Windows的DOS窗口中全屏方式下运行。 注意: giCell_20070713.rar中为源代码; my_demo.zip中为最新演示。 支持12点阵汉字(需要文件 hz12.bin ),可调用DOS文件功能 ,按下键“SHIFT + ESC”退出rtCell,并返回到DOS系统。 
最新虚拟机演示( http://zhenlove.com.cn/cndos/fileup/files/hz_demo.rar)
更多详情:http://www.cn-dos.net/forum/viewthread.php?tid=25419&page=2&fpage=1
 

真诚希望与有兴趣的网友多多交流!

电子邮箱:taowentao_twt@163.comtaowentao_twt@sohu.com

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息