[原创] RockOS.TASK v0.3 版发布
=============RockOS.TASK
=============
RockOS 简介
------------
编写一个属于自己的操作系统一直都是我的梦想,并且我也一直都在为之努力。在大学时我就开始了操作系统技术的一些思考、探索和实践,现在工作三年多了,接触过 linux, ucos, wince 等等操作系统,并研究过其源代码,而操作系统的工作原理,我也一直在思考和研究。
在 PC 机上我见过许多网友的 OS 作品,但是这些作品也称不上是操作系统,其实只是完成了操作系统的一部,即 bootloader 部分。而真正的任务管理,内存管理,文件系统等,却没有涉及。
工作中,我曾经完整的实现过 s3c2410/2440 平台的 bootloader 部分,包括了 nand 的读写,sd 的读写,fat16/32 文件系统,lcd 屏的显示,基本图形函数等功能,最终为我们公司的产品提供了具备开机 logo,图形化界面的 sd 卡升级等等强大功能的 bootloader 程序。
另外我完整实现了 WinCE OS 的 oal kernel 层,以及 sdcard, wavedev, display, touch, uart, 等等众多的 wince driver,理解了 OS 如何通过 oal kernel 的接口函数进行 WinCE OS 的初始化,中断管理等。而对 WinCE 的内存管理方式,中断管理方式,和驱动接口的不断认识,也使得我对 OS 的结构和原理有了更加深刻的理解。
RockOS 将是一个我理想中的 OS,它由 bootloader, taskman, memman, filesys, deviceman, api, shell 等部分组成。目前也只是停留在空想阶段,许多部分还没有清晰的设计。(人总有爱炫耀的时候吧,现在我就是这个状态了)
RockOS.TASK
------------
RockOS.TASK 是 RockOS 的一个组成部分,它实现了 RockOS 的多任务调度和管理功能。目前这个模块是在 Turbo C 下开发的,可以稳定的运行在真实 dos 已经 windows 的虚拟 dos 环境下。
它巧妙利用了 Turbo C 编译器的一些特性,简单的实现了一个稳定的多任务的系统,程序中几乎就没有使用一句汇编代码,就实现了多任务的切换和管理。他提供了任意多个任务的创建,抢占式的任务调度,就绪态任务按时间片轮转进行调度。
支持 idletask 空闲任务,当系统没有可调度任务时,会自动调度 idletask,idletask 中可以使用 hlt 指令使处理器进入 idle 模式,减少功耗。
支持任务的创建和参数,一个任务就类似于 windows 中的一个线程,任务可以有两个 void* 的传人参数。每个任务都有自己独立的堆栈,单个任务的出错不会影响到其他任务。
支持 tasksleep, suspendtask, resumetask, 用于任务的休眠挂起和唤醒。任务运行结束,会自动从任务队列中删除自己,并且会保存自己的返回值,使用 gettaskexitcode 可以取得返回值。
支持 event 和 mutex 两个同步方式,event 用于事件,所有等待 event 的任务,在事件发生以后,都会被唤醒。event 在创建时具有初始值和自动复位等属性。setevent 和 resetevent 可以设置会复位时间。mutex 用于任务的互斥,使用 mutex 可以方便的解决多任务中 dos 功能调用不可重入的问题。对于 Turbo C 中实现了 dos 功能调用的库函数,只要做一下互斥,就可以避免不可重入的问题。
提供 waitfortaskobject 同步函数,可用于等待任务运行结束,等待 event 的产生,等待 mutex 的释放。使用相当方便。
可以看到 RockOS.TASK 的接口设计基本上跟 windows 的多线程接口保持一致。而且已经实现了 windows 才能提供的大部分的多任务功能。使用 RockOS.TASK.forDOS 可以极为方便的将原有的单任务的 dos 系统,扩展为多任务的系统。
源代码开放计划
--------------
RockOS.TASK 将开放源代码,但是只会开放旧版本的源代码,最新版本会以 lib 库的形式发布。
总结
----
TASK 的代码是很巧妙的,大家要仔细阅读和体会。其实操作系统主要是跟硬件打交道,只要熟悉了硬件平台,已经理解了操作系统的架构和原理,要实现一个简单的系统还是比较容易的。任务调度算法,其实就是对任务队列的管理,算法上也没有什么难度。(比起编译器技术视频编解码技术操作系统相对简单一些)
RockCarry
2009-6-25
[ 本帖最后由 RockCarry 于 2009-8-19 17:23 编辑 ]
task.rar
(30.02 KB)