首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

VxWorks内核 3

VxWorks内核 3

保护全局和静态变量:有些库会访问一些公有数据。不如内存分配函数库。MemLib,它管理许多任务共同使用的内存池。这个库使用自己的静态数据变量来跟踪内存块的定位。
    这种库在需要当心,因为它的函数不是天然可以重入的。多哥任务同时调用函数时可能会引起公共变量的冲突。这种库必须使用互斥信号量防止多个任务同时访问临界区,以明确实现函数的可重入。
    任务变量:在一些函数中,它可以被多个任务同时调用,但是它需要具有不同的值的全局和静态变量。比如:一些任务需要用同一个变量来指示私有的内存缓冲区。
    为了适应这种需求,VxWorks提供了一种叫“任务变量”的机制。它允许将一个四字节的变量家加到任务的上下文中。这样每次进行任务切换操作时,变量的值都会发生切换。
    典型的例子中,如果多个任务申明了一个相同的变量(4字节)作为任务变量。每一个任务都可以把这个变量作为自己的私有地址空间。这个功能由taskVarLib提供的taskVarAdd()
    ,taskVarDelete(),taskVarSet(),taskVarGet()一组函数实现。任务变量的使用见下图:
    要尽量得使用这种机制,因为任务变量的值作为任务上下文的一部分,在任务切换时必需要进行存取,每个任务变量将增加几个微秒的任务上下文切换时间。因此把模块中所有的任务变量反倒一个单独的动态分配数据结构中,然后间接通过一个指针访问这个结构,再把这个指针作文所有使用了这个模块的任务变量,这种方法最节省系统资源。
    同一程序,多道任务在VxWorks中,允许使用同一个程序产生多个任务。没一个产生的新任务都有自己的堆栈和上下文。每次产生新任务时都可以传递不同的参数。此时,可以使用任务变量的方法实现重入规则。
    当同一个函数使用不同的参数设置在系统中同时运行时,任务变量是十分有用的。比如,一个特殊设备监控程序可能要派生出多道任务来监控好几个这样的设备。这是可以使用特定设备的编号来作文主任务的输入参量。
    在下图中,机械手的多关节使用同样的代码,任务通过调用joint()函数事项对关节的操作。关节的编号(jointNum)用于指示被操作的关节。
    2.3.10 VxWorks系统任务VxWorks包括以下几个系统任务:
    根任务:tUsrRoot根任务tUsrRoot是由内核执行的第一个任务。根任务的入口函数是installDir/target/c onfig/all/usrConfig.c下的usrRoot()函数,此函数初试化多数的VxWorks功能。它产生其他任务,诸如,注册任务,常处理任务,网络功能任务,以及tRlogind守护进程。一般情况下,当所有的初始化完成后,根任务将被结束删除。你可以随意在根任务中添加需要的初始化过程。
    注册任务:tLogTask注册任务tLogTask,VxWorks模块使用注册任务可以实现不通过当前任务的上下文进行I/O操作而发送系统消息。比如printf将发送要打印的系统消息,可以直接将系统消息挂到Lo gTask的队列中。再由Log任务发送此消息,而调用printf的任务并不直接对I/O端口操作。
    本任务在logLib库中。
    异常处理任务:tExcTask异常处理任务tExcTask支持捕获那些不会引起中断的VxWorks异常。这个任务必需是系统中任务优先级最高的任务。而且不允许挂起,删除和改变优先级。本任务在excLib库中。
    网络任务:tNetTask tNetTask守护任务处理任务级函数中所需的VxWorks网络功能。
    目标代理任务:tWdbTask如果任务模式中设置了目标代理,系统将创建一个tWdbTask任务。它负责响应Tornado的目标服务器。主要用于观察调试。
    可选模块的任务:以下的系统任务是根据VxWorks中相关的配置宏定义创建的任务。
    TShell如果你在VxWorks配置中包含懒得目标shell,系统就会产生这个任务。任何一个任务和函数都可以在tshell任务的上下文中运行。
    TRlogind如果配置了目标shell和rlogin特性,当一个远程用户注册到VxWorks主机上,在连接的两端都产生tRlogInTask和tRlogOutTask作为tty终端提供给用户。
    tTelnetd如果配置了目标shell和telnet特性,守护进程远程用户通过telnet连接在VxWorks上。它可以接受远程用户注册在VxWorks或主机系统上,并产生tTelnetInTask和tTelnetOutTask输入输出任务。提供一个TTY的模拟终端给用户使用。
    TPortmapd如果你配置了RPC特性,这个守护任务将成为同一个机器中的所有的RPC服务的注册中心。
    PRC的客户都必须通过这个tPortmapd守护任务才能访问服务。
返回列表