BBS水木清华站∶精华区

发信人: 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.] 

BBS水木清华站∶精华区