荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (佐治·希尔), 信区: Linux
标  题: RTLinux 简介(1)
发信站: BBS 荔园晨风站 (Wed Jan 12 21:48:37 2000), 转信

发信人: xog (雪剑心), 信区: Linux
标  题: RTLinux 简介(1)
发信站: BBS 水木清华站 (Wed Jan 12 09:54:29 2000)


  Linux的应用主要有网络服务器、桌面应用、及嵌入式实时应用,对于
Linux的嵌入式应用,相对来说是一片空白。
我正在做Linux下的实时应用的项目,现在把我整理的一些文档贴出来,
希望起到抛砖引玉的作用,并希望和有共同兴趣的朋友一起探讨.


   POSIX是为保证UNIX系统的兼容和可移植幸而建立的国际标准,在POSIX1.b中,规定
了一些
实时特性,Linux中已开始实现这些特性,但由于Linux内核的不可抢先性(nonpreemta
ble),
无法在标准的Linux环境下实现真正的实时应用。而RTLinux用巧妙的技术解决了此问题

   RTLinux并没有重写Linux的内核,因为这样的工作量会非常大,而且将会失去Linux
的兼容
性。RTLinux实现了一个高效的可抢先的实时调度核心,并把Linux作为此核心的一个优
先级最
低的进程运行,用户可以编写自己的实时进程,和标准Linux共同运行。
   为了达到中断的实时响应,RTLinux接收所有中断,然后传给Linux内核处理,因此当
Linux
内核屏蔽中断时,斌顾不影响中断的处理,据测试,在Pentium 120的PC上,Linux中断
延迟是
20 uS左右。
3.1 RTLinux的接口
   int RTLoad(const char *FILE):装载一个RTLinux实时任务,并返回其ID。
   int RTRun(int pid):运行由RTLoad装载的任务,初始优先级为低。
   int RTKill(int pid):终止实时进程。
   int RTGet_time(RTime *t):返回从系统启动到函数调用止的是中滴达数,常量
       RT_ticks_per_sec 表示每秒时钟滴达数。
   int RTset_params(RTime *start,RTime *period,int priority):设置实时任务的

       参数。
   int RTwait_start(RTime *start,RTime *period,int priority):挂起实时进程直

       到启动时间到达,并重设优先级。
   int RTwait_period():挂起实时进程直到下一个调度周期?1
1.2 RTLinux的进程通讯机制
   RTLinux中存在两种进程:实时进程,运行在实时核心下,普通进程,运行在普通Lin
ux核心
下,Linux核心可被实时进程抢先。实时进程间的通信采用修改过的 UNIX V IPC机制:
共享内
存,信号和消息队列。而实时进程和普通进程的通信采用FIFO,接口如下:
   int RTfifo_creat(unsigned int fifo,int size): 创建fifo,并分配size字节的数

       据容量,fifo的编号从0到RT_MAX_FIFO-1,fifo的数目是全局变量
   int RTififo_destroy(unsigned int fifo):删除一个fifo。
   int RTfifo_get(unsigned int fifo,char *buf,int count):从fifo读取count字节

       的数据,如无足够数据,则返回-1,否则返回count。
   int RTfifo_put(unsigned int fifo,char *buf,int count):写入fifo count字节
       的数据,如无足够空间,则返回-1,否则返回count。

--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 39_38.xjtu.edu.]
--

     书山有路勤为径;
     学海无涯苦作舟!

         欢迎各位光临Linux版!
 我是来自大富翁的小美!^_^

※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店