基于xenomai构建自己的实时linux操作系统心得体会.docx
- 文档编号:4203654
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:9
- 大小:25.03KB
基于xenomai构建自己的实时linux操作系统心得体会.docx
《基于xenomai构建自己的实时linux操作系统心得体会.docx》由会员分享,可在线阅读,更多相关《基于xenomai构建自己的实时linux操作系统心得体会.docx(9页珍藏版)》请在冰豆网上搜索。
基于xenomai构建自己的实时linux操作系统心得体会
基于xenomai构建自己的实时linux操作系统,心得体会
篇一:
基于Linux的实时操作系统的研究
基于Linux的实时操作系统的研究
【摘要】本文分析和研究了Linux系统在实时性方面存在的问题,并分析了实时系统的原理,以及提出了实时Linux系统的系统结构和应用程序的结构。
【关键词】Linux;实时操作系统;FIFO;实时应用程序
一、引言
随着计算机性能的不断提高,人们对计算机的数据处理能力提出了新的要求,比如在视频数据处理,网络数据处理等。
因此,实时操作系统处理数据的效率成为当前计算机用户关注的焦点。
目前,比较流行的实时操作系统主要有两大类:
基于DOS的实时操作系统和基于UNIX操作系统。
基于DOS的实时操作系统是指在原有DOS的基础上,提高其相应功能来实现实时操作系统的特性,但是,由于DOS系统存在单任务的缺陷,因而其只能适应于需求时间较小任务量较少的实时任务处理。
基于UNIX的操作系统是通过UNIX的分时系统设计实时操作系统,来达到实时操作系统的最优平均性能。
因此,基于UNIX的实时操作成为当前主要的实时操作系统,但其存在价格昂贵和应用开发环境匮乏的缺陷。
由于Linux操作系统是开放源代码的类UNIX的操作系统,同时性能稳定,处理数据效率高,是一款性能高价格低廉的操作系统。
鉴于此,基于Linux的操作系统来开发一个高效性能的实时操作系统是可行的。
二、标准Linux系统在实时特性方面所存在的问题
实时操作系统的实时特性主要表现在以下几方面:
(1)运行期间和处理数据的高可靠性特性;
(2)处理数据请求的及时特性;(3)完成数据请求和处理的时限保证特性,即实时操作系统必须保证在指定的数据请求的响应时间内或者数据处理时间内完成请求或者处理任务,具有此功能的操作系统也称为硬实时操作系统;如果没有在数据处理请求,或者数据处理时间期限内完成数据处理,即未能实现时限保证特性,此类实时操作系统也称为软实时操作系统。
实时操作系统的实时性主要体现在时限保证,因此,超出时限保证范围的大小直接反映着实时操作系统的性能,即最坏情况。
考虑到实时操作系统多方面的性能,所以,在设计Linux实时操作系统时,采用最优平均性能来衡量操作系统的实时性。
的调度问题
Linux操作系统的调度问题主要是指进程调度。
Linux操作系统的核心是不可竞争的,在规定的时间内对进程实现等级优先调度。
一个等级较低的进程在调用系统核心进程时,则其会被操作系统挂起,只有当等级高的内核进程完成后,才能继续执行,但是,在执行系统核心进程期间,其完成时间的不可预测性可能造成等待后续进程的持久挂起,进而不能满足系统的实时性。
的进程问题
Linux操作系统的进程问题主要包括进程的同步和进程的互斥问题。
Linux操作系统的进行同步和进程互斥是通过信号量来实现的。
在信号量的使用过程中,其存在信号量的加锁操作和解锁操作。
由于信号量的频繁加锁和解锁操作会造成一定量时间的损耗,同时影响操作系统的实时特性。
鉴此,Linux操作系统采用了粗粒度策略,但是仍然存在信号的加锁和解锁的问题,其系统性能较差。
篇二:
硬实时操作系统_RT-Linux
硬实时操作系统-RTLinux
摘要:
介绍了RTLinux两个重点特点:
硬实时性和完备性及其在嵌入式系统应用中些重要功能并结合实时处理具体实例对其编程方法加以说明
关键词:
操作系统实时处理Linux嵌入式系统
近年来基于PC嵌入式系统得到迅速发展在各种不同操作系统中由于Linux操作系统廉价、源代码开放性以及系统稳定性使其在基于PC嵌入式系统中应用日益广泛RTLinux(RealTimeLinux)[1]是种基于Linux实时操作系统是由FSMLabs公司(FiniteStateMachineLabsInc.)推出与Linux操作系统共存硬实时操作系统它能够创建精确运行符合标准实时进程;并且作为种遵循GPLv2协议开放软件可以达GPLv2协议许可范围内自由地、免费地使用、修改和再发生本文介绍了RTLinux特点及功能并结合个实时处理具体实例对其编程方法加以说明
1、RTLinux特点
在Linux操作系统中调度算法(其于最大吞吐量准则)、设备驱动、不可中断系统、中断屏蔽以及虚拟内存使用等因素都会导致系统在时间上不可预测性决定了Linux操作系统不能处理硬实时任务RTLinux为避免这些问题在Linux内核与硬件之间增加了个虚拟层(通常称作虚拟机)构筑了个小、时间上可预测、与Linux内核分开实时内核使得在其中运行实时进程满足硬实时性并且RTLinux和Linux构成个完备整体能够完成既包括实时部分又包括非实时部分复杂任务。
硬实时性
RTLinux将Linux源码中所有cli、sti、iret指令分别用宏S_CLI、S_STI、S_IRET替换引入虚拟层将截取所有硬件中断分割Linux系统与硬件中断之间直接联系当RTLinux虚拟层接收到与实时处理有关硬件中断时立即启动执行相应实时中断服务;而接收到与实时处理无关中断时先保存相应信息等到RTLinux内核空闲时通过软中断传递给Linux内核去处理这样就使得RTLinux内核不受各种软、硬件中断影响不会造成时间上不可预测性同时又区别于其他实时处理方案它并未对操作系统内核作结构性修改因此并不会妨碍Linux操作系统进步发展和变化Linux采用基于最大吞吐量准则调度策略并不能确保各个实时进程及时调度而RTLinux在缺省情况下采用优先级调度策略即系统调度器根据各个实时任务优先级来确定执行先后次序优先级高先执行优先级低后执行这样就保证了实时进程迅速调度同时RTLinux也支持其它调度策略如最短时限最先调度(EDP)、确定周期调度(RM)(周期短实时任务具有高优先级)RTLinux将任务调度器本身设计成个可装载内核模块用户可以根据自己实际需要编写适合自己调度算法操作系统精确定时机制可以提高任务调度器效率但增加CPU处理定时中断时间开销RTLinux采用种折衷方案不将8354定时器设计成10毫秒产生次定时中断固定模式而是根据最近事件(进程)时间需要不断调整定时器定时间隔这样既可以提供高精度时间值又避免过多增加CPU处理定时中断时间开销RTLinux系统同时将各时间间隔相加保持个系统全局时间变量并使用软中断方式来模拟传统100Hz定时中断将其传递给Linux系统使用。
完备性
过去实时操作系统仅是组原始、简单可执行它所做仅仅是向应用提供库但如今实时应用通常要求能够支持TCP/IP、图形显示、文件和数据库系统及其它复杂服务为了满足当今实时应用多种需求通常采用在实时控制内核上增加这些服务或完全修改标准操作系统内核方法而RTLinux所采用是种新型高效方式将个简单小型实时内核与Linux内核共存用简单小型实时内核处理实时任务将非实时任务交给Linux内核去处理而Linux内核本身也作为个RTLinux实时内核在空闲时运行进程这种将实时系统和平均时间优化标准Linux操作系统协同工作方式使得许多实时应用都显示出种增效实时内核中实时任务可以直接访问硬件不使用虚拟内存给实时进程提供了很大灵活性;运行在Linux用户空间中非实时任务可以方便地使用系统提供各种资源(网络、文件系统等)并受到系统保护增加了系统安全性
2、RTLinux主要功能
RTLinux提供了整套对硬实时进程支持集在此仅对在嵌入式系统中最重要三个方面:
进程间通讯、中断和硬件设备访问以及线程间同步加以阐述。
进程间通信(IPC)
RTLinux要求将应用分成实时部分和非实时部分应用实时部分应该是简单和轻负荷在RTLinux实时内核中完成;而非实时部分在Linux用户空间完成因此RTLinux提过了多种内核实时进程和Linux用户空间进程间通讯机制最重要是实时FIFO和共享内存实时FIFO是能够被内核实时进程和Linux用户空间进程访问快进快出队列是种单向通讯机制可以通过两路实时FIFO构成双向数据交换方式在使用实时FIFO前先要对实时FIFO通道化:
#
rtf_create(unsignedfo,size)
使用后应该注销实时FIFO通道:
rtf_destroy(unsignedfo)
在化实时FIFO通道后RTLinux内核实时进程和Linux用户空间进程都可以使用标准POSIXopen、read、write和close等对实时FIFO通道进行访问内核实时进程还可以使用RTLinux专有rtf_put和rtf_get对实时FIFO通道进行读写。
RTLinux共享内存由模块支持可以使用下面分配和释放共享内存块:
#
void*mbuff_alloc(constchar*name,size)
voidmbuff_free(constchar*name,void*mbuf)
mbuff_alloc有两个参数共享内存名name和共享内存块大小size如果指定内存共享名并不存在分配成功时返回共享内存指针访问计数置为1分配失败时返回空指针;如果指定内存共享名已经存在返回该块共享内存指针并将访问计数值直接加1mbuff_free将该块共享内存访问计数值减1当计数值为0时该共享内存被释放在实时内核模块中使用该时应该将mbuff_alloc和mbuff_free分别放在init_module和cleanup_module模块之中。
中断和访问硬件
硬中断(实时中断)具有最低延时在系统内核中只有少数实时进程使用rtl_request_irq和rtl_free_irq用于安装和卸载指定硬件中断中断服务
#
rtl_request_irq(unsignedirq,unsigned(*handler)(unsigned,structpt_regs*))
rtl_free_irq(unsignedirq)
中断驱动线程可以使用唤醒和挂起:
pthread_wakeup_np(pthread_tthread)
pthread_suspend_np(void)
个中断驱动线程可以pthread_suspend_np(pthread_self)阻塞自身线程执行然后由中断服务pthread_wakeup_np唤醒该线程换行直到此线程再次thread_suspend_np(pthread_self())将自身挂起软中断是Linux内核常常使用中断它能够更安全地系统无论如何对于许多任务来说并不能提供硬实时性能将会导致定延时
Intrtl_get_soft_irq(void(*handler)(,void*,struetpt_regs)constchar*devname)分配个虚中断并安中断
;voidrtl_free_soft_irq(unsignedirq)释放分配虚中断RTLinux与Linux样通过/dev/mem设备访问物理内存具体由模块rtl_提供此项功能首先应用应该打开/dev/mem设备通过mmap对某段物理内存进行映射后即可使用映射后地址访问该段物理内存应用只能在Linux进程中(即在应用init_module模块中)mmap在实时进程中mmap将会失败另种访问物理内存方法是通过Linux将会失败另种访问物理内存方法是通过Linuxioremap
(2)RTLinux访问I/O端口如下(对于x86结构):
输出个字节到端口:
#
voidoutb(unsignedvalue,unsignedport)
voidoutb_p(unsignedvalue,unsignedport)
输出个字到端口:
#
voidoutw(unsignedvalue,unsignedport)
voidoutw_p(unsignedvalue,unsignedport)
从端口读个字节:
#
charinb(unsignedport)
charinb_p(unsignedport)
从端口读个字:
#
inw(unsignedport)
inw_p(unsignedport)
其中带后缀_p使读写端品时有个小延时这在快速计算机访问慢速ISA设备时是必需。
线程同步
当多个实时线程需要访问共享资源时如果没有种同步机制将破坏共享资源中数据完整性RTLinux提供种简单加锁方法mutex来控制对共享资源存取并支持OSIXpthread_mutex_family组[3]目前有以下可以使用:
pthread_mutexattr_getpshared//得到指定属性线程共享属性值;
pthread_mutexattr_pshared//设置指定属性线程共享属性值;
pthread_mutexattr_init//化mutex属性;
pthread_mutexattr_destroy//删除mutex属性;
pthread_mutexattr_type//设置mutex信号类型;
pthread_mutexattr_gettype//得到mutex信号类型;
pthread_mutex_init//按指定属性化mutex;
pthread_mutex_destroy//删除给定mutex;
pthread_mutex_lock//锁定mutex,如果mutex已被锁定阻塞当前线程直到解锁;
prhread_untex_trylock//锁定mutex,如果mutex已被锁定立即返回;
pthread_untex_unlock//解锁mutex;
互斥信号类型有PTHREAD_MUTEX_NORMAL(defaultPOSIXmutexes)PTHREAD_MUTEX_SPINLOCK(spinlocks)
3、RTLinux编程实例分析
下面结合个具体[4]对RTLinux编程特点加以说明中实时线程在并口2、3脚(并口数据D0和D1)上周期输出信号1而对应硬件中断7实时中断服务将在并口2、3脚输出信号0连接并口2脚和10脚(并口确认信号线对应于计算机中断7)则可在并口2、3脚上产生个方波信号源如下:
#
#
#
#
#
#
pthread_tthread;
unsignedr_handler(unsignedirq,structpt_regs*regs);{//中断服务
outb(0,0x378);//输出字节0到并口数据线
rtl_hard_enable_irq(7);//使能硬件中断7
0;
}
void*start_routine(void*arg){//实时线程
structsched_paramp;//定义实时线程控制参数数据结构
_priority=1;//设置优先级为1
pthread_schedparam(pthread_self,SCHED_FIFO,&p);//设置实时线程控制参数
pthread_make_periodic_np(pthread_self,gethrtime,100000);
//启动周期为10ns实时线程
while
(1){
pthread_wait_np;//实时线程挂起
outb(3,0x378);//实时线程周期执行输出3到并口数据线
}
0;
}
init_module(void){//化模块
status;
rtl_irqstate_tf;//保存当前中断状态标志到变量f并禁止中断
status=rtl_request_irq(7,irtr_handler);//设置硬件中断7处理
rtl_prf("rtl_request_irq:
%d",status);//输出控制台
outb_p(inb_p(0x37A)|0x10,0x37A);//使能并口中断(硬件上)
rtl_hard_enable_irq(7);//使能中断7(软件上)
rtl_restore_errupts(f);//按照变量f恢复当前中断状态标志并使能中断
pthread_create(&thread,NULL,start_routine0);
//创建实时进程thread
}
voidcleanup_module(void){//清除模块
rtl_free_irq(7);//禁止中断7
pthread_delete_np(thread);//删除实时进程thread
}
文件如下:
all:
clean:
rm-f*.0
按照如下命令对进行编译:
make
运行对采用以下命令:
modprobertl_sched//调入所需处理模块
insmod//调入模块
连接并口2脚和10脚即可通过示波器在并口3脚上观测到输出方波信号。
可以看到RTLinux实时被编写成可加载Linux内核模块它能被动态地加入内存不能执行Linux系统模块化代码对实时任务结构作化把实时任务时限、周期和释放时间等实时参数传递给RTLinux。
通过对Linux最小改动提供种可靠且廉价硬实时操作系统RTLinuxRTLinux开发者可以充分利用Linux提供各种方便来编写任务非实时部分加速自己任务进度目前RTLinux最新版本为支持内核源代码可以通过网站p> 篇三:
嵌入式Linux实时操作系统习题总结
第1章
1.嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。
嵌入式系统一般有3个主要的组成部分:
硬件、实时操作系统以及应用软件。
2.嵌入式系统的三要素是嵌入、专用、计算机;即以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3.目前国际较为知名的有:
VxWorks、NeutrinoRTOS、NucleusPlus、OS/9、VRTX、LynuxOS,RTLinux、BlueCatRT等。
4.嵌入式系统一般由硬件层、中间层、软件层和功能层组成。
其作用分别如下:
(1)硬件层:
由嵌入式微处理器、外围电路和外设组成。
操作系统和应用程序都可以固化在ROM或者Flash中。
为方便使用,有的模块在此基础上增加了LCD、键盘、USB接口,以及其他一些功能的扩展电路。
(2)中间层:
硬件层与软件层之间为中间层,其作用将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关;
(3)软件层:
主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。
操作系统是一个标准的内核,将中断、I/O、定时器等资源都封装起来,以方便用户使用。
(4)功能层:
由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。
5.非占先式调度法也称作合作型多任务(cooperativemultitasking),各个任务彼此合作共享一个CPU。
中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。
但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。
当系统响应时间很重要时,要使用占先式(preemptive)内核。
最高优先级的任务一旦就绪,总能得到CPU的控制权。
当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了。
6.在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称硬实时系统。
在弱实时系统中,超时却不会发生致命的错误。
其实时性的要求比硬实时系统要差一些。
7.嵌入式系统的设计步骤及各部分的主要工作如下。
(1)需求分析阶段,罗列出用户的需求;
(2)体系结构设计阶段,描述系统的功能如何实现;
(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现;
(4)系统集成,把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误;
(5)系统测试,对设计好的系统进行测试,看其是否满足给定的要求。
8.Linux作为嵌入式操作系统的优势主要有以下几点:
(1)可应用于多种硬件平台。
(2)Linux的高度模块化使添加部件非常容易。
(3)Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件的一种通用操作系统。
(4)Linux可以随意地配置,不需要任何的许可证或商家的合作关系。
(5)Linux带有Unix用户熟悉的完善的开发工具。
其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。
9.Linux执行进程调度一般是在以下情况发生的:
(1)正在执行的进程运行完毕;
(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态;
(3)正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;
(4)执行中的进程提出I/O请求后被阻塞;
(5)系统分配的时间片已经用完;
(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级。
第4章
1、Linux内核的编译菜单有好几个版本,运行:
(1)makeconfig:
进入命令行,可以一行一行的配置,但使用不十分方便。
(2)makemenuconfig:
大多数开发人员使用的Linux内核编译菜单,使用方便。
(3)makexconfig:
在以及以前版本中xconfig菜单是基于TCL/TK的图形库的。
2、在完成内核的裁减之后,内核的编译就只要执行以下几条命令:
makeclean编译内核之前先把环境给清理干净。
(来自:
小龙文档网:
基于xenomai构建自己的实时linux操作系统,心得体会)
makedep编译相关依赖文件
makezImage创建内核镜像文件
makemodules创建内核模块。
makeinstall把相关文件拷贝到默认的目录。
3、此命令是装载压缩映像文件zImage到flash存储器中,地址是kernel分区,并采用xmodem传输协议。
4、此命令是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 xenomai 构建 自己 实时 linux 操作系统 心得体会