| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1907 人关注过本帖
标题:[原创] RockOS.TASK v0.3 版发布
只看楼主 加入收藏
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
结帖率:95.65%
收藏
已结贴  问题点数:20 回复次数:25 
[原创] 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)
搜索更多相关主题的帖子: RockOS TASK 
2009-07-26 14:10
沙漠水手
Rank: 2
等 级:论坛游民
帖 子:69
专家分:40
注 册:2007-3-17
收藏
得分:20 
一直都很关注你的东西
2009-07-26 17:57
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
看来大家对这个不感兴趣
2009-07-27 15:02
jammyzm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:90
专家分:126
注 册:2008-12-1
收藏
得分:0 
本人了解不深。你很棒
2009-07-29 10:01
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
今天又改了一下,在空闲任务中采用了 DPMI int 2F 功能来释放处理器时间片,这样大大减小了在 XP 系统下运行的 cpu 占用率。而在 real dos 环境下,则使用 hlt 指令,使处理器进入休眠状态。
等晚上再发布相关程序。
2009-07-29 12:04
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
顶一个

我也一直想做这样个东西,但我想做完全基于自己平台的。
我正在开发自己的C语言编译器,等这个成熟后,我就写个虚拟机,模拟一个中挡CPU和一些简单外设,
然后就可以在这个基础上做一个系统内核。呵呵,很美好的梦想,希望我自己能做下来。

个人网站 -  http://.h001.
2009-07-30 20:12
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
终于有懂这个的人来了。
2009-07-30 20:37
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
改进了一下,空闲式系统会调用空闲处理线程,xp 平台上空闲线程采用 DPMI 的接口释放 cpu 时间片,在 real dos 下使用 hlt 指令释放处理器
2009-07-30 20:48
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
有最新进展没?发个来看看

个人网站 -  http://.h001.
2009-08-06 16:33
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
发了啊,还是在一楼下载,加入了空闲任务,当系统空闲时会释放处理器资源,xp 下的话就算有多个任务在跑,也不会占用太多的处理器。当然前提是任务中要有 sleep。另外还修改了 1ch 触发频率,为了 70Hz 左右,相当于任务每隔 1/70 秒就会调度一次。另外修改了 mutex 对象在等待是的队列排序。
2009-08-06 17:38
快速回复:[原创] RockOS.TASK v0.3 版发布
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017926 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved