欢迎来到天天文库
浏览记录
ID:6338416
大小:91.50 KB
页数:19页
时间:2018-01-10
《1.基本操作系统现代时实操作系统主要的补充了多任务处理与》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.基本操作系统现代时实操作系统主要的补充了多任务处理和任务间通讯两个概念。多任务环境意味着允许在一个时实应用程序中构架一组独立的任务。每一个都有自己独立的执行路线和自己的系统资源。任务间通讯的机制(facility)则允许任务间的同步和通讯,以调整系统的行为。VxWorks中,任务间通讯的机制包括从快速信号量到消息队列,管道,网络传输套接口。另一个时实系统的关键机制是硬件中断处理。因为中断常常是构成系统外部事件的机制。为了达到中断的快速响应。中断处理程序(ISR)使用一种特殊的上下文,不同与任务的上下文。以下将讨论多任务内核,任务
2、机制,任务间通讯,和中断处理机制。这些是VxWorks运行时环境的核心。 Wind特征和POSIX特征:POSIX的时实扩展标准(1003.1b)定义了一组特殊的内核机制。为了提高应用程序性,Wind,Vxworks的内核,同时包括了POSIX接口和VxWorks的特殊接口。在本文中“Wind”特指VxWorks的wind内核机制所有的特性。 任务:我们经常需要把应用程序组织成独立的,相互协作的一些程序。每一个单独执行的程序是一个任务。在Vxworks中,任务能直接共享所有的系统资源,当然各个独立的线程控制所需要的各自的上下文是
3、必需保留的。 多任务:多任务处理提供了进行对应用程序控制和对多样的,离散的真实世界事件的反应的基本机制。WXWORKS的时实内核,提供了基本的多任务环境。多任务机制从表面上看起来是创建了许多同时运行的线程,但实际上是内核在按照一定的数学法则对它们的执行进行调度。每一个显然是独立的程序都叫做一个任务。每个任务都有自己的上下文。(所谓上下文是指:有系统内核运行调度的任务可能会在任何时刻访问的CPU环境和系统资源。)在一次上下文切换中,一个任务的上下文将保存在任务控制块中(TCB)。一个任务的上下文包括以下内容:线程执行情况,即任务程序
4、记数器。CPU寄存器和浮点寄存器。动态数据堆栈和函数调用。标准输入,输出和错误的I/O分配。延时定时器。时间片定时器。内核控制结构。信号句柄。调试和运行监视值。 在VxWorks中,一个不属于上下文的重要资源是内存和地址空间。所有的Wind内核任务调度: 多任务处理需要一个调度法则对CPU准备运行的任务进行分配。对于wind内核来说需共享处理器时,一个任务如果不阻塞的话,就可能会独占CPU,导致其它所有的任务都无法运行。轮转调度实现在同级任务中公平分配CPU资源的方法一般是时间片轮转。一组任务中的每个任务执行指定的时间间隔或时间片
5、;然后另一个任务执行相同的时间间隔,依次类推。这种调度方法的公平之处在于,只有所有的任务都获得过依次时间间隔运行后,才能有任务获得第二个时间片运行的机会。系统中使用函数kernelTimeSlice()允许系统实现轮转调度。更精确地,每个任务有一个运行时间记数器(run-timecounter)记录增加的始终TICK数。当一个特定的时间片结束时。计数器将清空,并且将任务挂到同级任务的队尾。当一个新任务加入优先级组时,本任务将挂到队尾,并且将运行时间计数器初始化为0。如果一个任务在自己的运行时间间隔中被高优先级的任务抢占,它的运行时间
6、计数器将被保存,直到任务重新运行时再恢复。下图是轮转调度系统的示例:T1,T2,T3是同级任务,T2被高优先级的T4任务抢占,当T4运行完后,T2继续运行至结束。 Wind内核调度器可以在一个任务中通过taskLock()和taskUnLock()函数,明确地禁止或使能。当一个任务通过调用taskLock()函数禁止内核调度时,这个任务将运行在不被其它任务中断的方式下。但是,如果此任务明确地阻塞或挂起,调度器将选择一个优先级最高的合格任务执行。不过,当关闭了调度器的任务阻塞解除再次执行时,抢占式调度将再次被关闭。注意:抢占调度关闭
7、只是禁止任务上下文的切换,但是并不禁止中断处理的发生。抢占禁止可以用于实现互斥(mutualexclusion)。不过最好让调度禁止的时间尽量短。 任务控制:以下将论述VxWorks与任务有关的系统调用的基本情况。它们存在与VxWorks的库文件taskLib中。这些系统调用包括任务创建,控制,和信息获取。 任务创建:其它的有关任务的系统调用的函数详见系统手册。 任务名和ID号:当一个任务产生时,可以使用一个指定的任意长的ASCII字符串作为任务的任务名。VxWorks系统将返回一个四字节的任务ID号作为任务数据结构的句柄。所
8、有的任务程序获得一个ID作为不同任务的标识。VxWorks系统中约定ID=0表示正在调度的任务。一个任务的名字不得和任何已经存在的任务名字相冲突。此外,在使用Tornado开发工具进行开发时,最好不要让任务名和任何全局变量名以及全局函
此文档下载收益归作者所有