POSIX能力

VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件。VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSIX.1可选功能中的一些实时接口。

POSIX和实时系统

VxWorks提供了很多POSIX兼容的API,但并非全部POSIX API都适合嵌入式和实时系统,或完全兼容VxWorks操作系统。因此,VxWorks在少量情况下强加了以下很小的限制来满足实时系统和VxWorks兼容。

  • 交换内存到磁盘不适合实时系统,VxWorks没有提供这种能力。它提供了POSIX的页锁定功能方便移植到VxWorks。这函数并没有其它用途--在VxWorks中页总是被锁定。
  • VxWorks任务在系统层被调度,进程本身不被调度。因而,POSIX访问函数允许2种植(PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS),VxWorks只实现了系统层范围。

配置VxWorks使用POSIX能力

默认配置并不包含POSIX支持。BUNDLE_POSIX捆绑组件为内核空间提供了通用POSIX的支持。如果要细粒度控制POSIX的支持,可以选择单个的组件。

注意:对于内核空间和用户空间的POSIX支持的组件是不同的。

POSIX的组件配置

下表提供了支持内核空间的POSIX的独立组件

POSIX能力 内核要求的组件 进程要求的VxWorks组件
Standard C Library INCLUDE_ANSI_*组件 Dinkum C 类库(libc)

Asynchornous I/O with

system driver

INCLUDE_POSIX_AIO

INCLUDE_POSIX_AIO_SYSDRV

INCLUDE_PIPES

INCLUDE_POSIX_CLOCKS

INCLUDE_POSIX_TIMERS

Clocks INCLUDE_POSIX_CLOCKS INCLUDE_POSIX_CLOCKS
Diretory and file utilities INCLUDE_POSIX_DIRLIB N/A
ftruncate() INCLUDE_POSIX_FTRUNC N/A
Memory locking INCLUDE_POSIX_MEM N/A
Memory management N/A INLUCE_RTP
Memory-mapped files N/A INCLUDE_POSIX_MAPPED_FILES
Shared Memory objects N/A

INCLUDE_POSIX_MAPPED_FILES

INCLUDE_POSIX_SHM

Message queues INCLUDE_POSIX_MQ INCLUDE_POSIX_MQ
pthreads INCLUDE_POSIX_THREADS

INCLUDE_POSIX_CLOCKS

INCLUDE_POSIX_PTHREAD_SCHEDULE

INCLUDE_PTHREAD_CPUTIME

Process Scheduling API INCLUDE_POSIX_SCHED N/A
Semaphores INCLUDE_POSIX_SEM INCLUDE_POSIX_SEM
Signals INCLUDE_POSIX_SIGNALS N/A
Timers INCLUDE_POSIX_TIMERS INCLUDE_POSIX_TIMERS
Trace N/A INCLUDE_POSIX_TRACE
POSIX_PSE52 support N/A BUNDLE_RTP_POSIX_PSE52

通用POSIX支持

VxWorks提供了大多数POSIX兼容类库。这些类库如下

 功能  类库
 Asynchronous I/O   aioPxLib 
 Buffer manipulation  bLib
 Clock facility  clockLib
 Direcotry handling  dirLib
 Environment handling  C library
 File duplication  iosLib
 File management  fxPxLib and ioLib
 I/O functions  ioLib
 Options handling  getopt
 POSIX message queues   mqPxLib
 POSIX semaphores  semPxLib
 POSIX timers  timerLib
 POSIX threads  pthreadLib
 Standard I/O and some ANSI  C library
 Math  C library
 Memory allocation  memLib and memPartLib
 Network / Socket APIs  network libraries
 String manipulation  C library
 Trace facility  pxTraceLib

注意:风河公司建议不要同时使用POSIX类库和类似功能的本地VxWorks类库。这样做将导致不可预期的行为。

在运行时检查是否支持POSIX

POSIX应用程序可以在运行时使用以下API来判断POSIX支持的状态:

  • sysconf函数返回当前可配置系统变量的值,运行应用程序判断是否支持可选特性及系统限制的精确值。
  • confstr函数返回与可用系统相关的字符串这个版本,confstr只返回系统默认路径的字符串。

uname函数让应用程序获得真正运行的系统信息。VxWorks提供的标识消息是系统名称VxWorks,系统的网络名称,系统的发布版本、机器名称(BSP模块),架构的大小端,内核版本,处理器名称(CPU家族),BSP的修订版本和系统构建日期。

POSIX的头文件

POSIX 1003.1标准定义了一系列头文件作为应用程序开发环境的一部分。用户端的开发环境比内核的开发环境有更多的POSIX头文件,它们的内容也比内核的头文件与POSIX标准更一致。

内核环境的头文件

 Header File  Description
 aio.h asynchornous input and output
 assert.h verify program assertion
 ctype.h  character types
 dirent.h  format of directory entries
 errno.h  system error Numbers 
 fcntl.h  file control options
 limits.h  implementation-defined constants
 locate.h  category macros
 math.h  mathematical declarations
 mqueue.h  message queues
 pthread.h  pthreads
 sched.h  execution scheduling
 semaphore.h  semaphores
 setjmp.h  stack environment declarations
 signal.h  signals
 stdio.h  standard buffered input/output
 stdlib.h  standard library dfinitions
 string.h  string operations
 sys/mman.h  memory management declarations
 sys/resource.h   definitions for XSI resource operations 
 sys/stat.h  data returned by the stat() function
 sys/un.h  definitions for UNIX domain socket
 time.h  time types 
 trace.h  trace facility
 unistd.h  standard symbolic constants and types 
 utime.h  access and modification times structure 
 sys/typs.h data types
   

POSIX命名空间

用户模式的RTP进程可用POSIX命名空间。

POSIX Clocks 和 Timers

VxWorks提供了POSIX 1003.1b标准的 Clocks和Timer接口。

POSIX Clocks

POSIX定义了各种软(虚拟)时钟,作为CLOCK_REALTIME时钟,CLOCK_MONOTONIC时钟,处理CPU-time时钟及线程的CPU-time的时钟。这些时钟都使用一个系统硬件时钟。real-time和monotonic时钟是系统级时钟,因此支持内核和进程。CPU-time时钟在VxWorks中不支持。线程CPU-time时钟只支持RTP进程。POSIX线程可以为它的进程使用real-time时钟、monotonic时钟和线程CPU-time时钟。

real-time时钟只能被内核复位。monotonic时钟不能被复位,它表示系统从启动到现在流逝了多少时间。real-time时钟可以被用CLOCK_REALTIME作为clock_id参数使用的POSIX时钟和定时器函数访问。real-time可以在运行时被复位,通过从内核中调用clock_settime函数(不是进程中)。

monotonic时钟可以通过使用CLOCK_MONOTONIC参数作为clock_id来调用clock_gettime函数来访问。monotonic时钟指示了系统从启动到现在使用了多少时间,即,该函数的返回值是系统启动到现在的秒和纳秒数。monotonic不能被复位。因此,应用程序可以依赖于这样的事实:可以对时间间隔的测量,来证明系统没有被clock_settime()篡改。

CLOCK_REALTIEM和CLOCK_MONOTONIC定义在time.h。

POSIX时钟函数

 Routine   Description
 clock_getres()  得到时钟分辨率 (CLOCK_REALTIME和CLOCK_MONOTONIC) 
 clock_setres()  设置时钟分辨率。(废弃,是为了保留向前兼容)
 clock_gettime()   得到当前时间 (CLOCK_REALTIME和CLOCK_MONOTONIC)
 clock_settime() 为CLOCK_REALTIME设置指定时间(不能用于CLOCK_MONOTONIC怕;不支持在内核中的线程CPU-time时钟)

为了包含clockLib类库,配置INCLUDE_POSIX_CLOCKS组件。对于线程CPU-time时钟,使用INCLUDE_POSIX_PTHREAD_SCHEDULER和INCLUDE_POSIX_THREAD_CPUTIME组件。

POSIX定时器

POSIX定时器提供了任务在将来某个时候通知本身的能力。提供了创建,设置和删除定时器的函数。

定时器基于时钟。在内核中,CLOCK_REALTIME和CLOCK_MONOTONIC时钟支持定时器。在进程中,除了这2个,还支持线程CPU-time时钟(CLOCK_THREAD_CPUTIME_ID时钟)。

当定时器触发,默认signal,SIGALRM,被发送给任务。使用sigaction函数来安装signal处理函数。VxWorks的timerLib类库包含了一系列以下函数:timer_open(),timer_close(),tiemr_cancel(),timer_connect()和timer_unlink()。这些函数比使用POSIX定时器更容易、更强大。

 Routine   Description
 timer_create()   使用指定的时钟分配一个定时器基于(CLOCK_REALTIME或CLOCK_MONOTONIC)
 timer_delete()  删除前面创建的定时器
 timer_open()  打开命名的定时器。VxWorks特定的POSIX扩展函数
 timer_close()  关闭命名的定时器。VxWorks的扩展函数
 timer_gettime()   在过期和重新加载之前得到剩余时间。
 timer_getoverun()   返回过期溢出定时器
 timer_settime()  Set the time until the next expiration and arm timer。
 timer_canncel()  取消定时器
 timer_connect()  连接用户函数到定时器信号。
 timer_unlink() 解除命名定时器的连接。
 nanosleep() 挂起当前线程(任务)直到时间间隔用完。
 sleep()  延迟一定数量的时间
 alarm()  为signal提交设置一个报警时钟。

注意:在VxWorks中,不是用"/"开头的命名的定时器是私有的,不能从其它进程访问。以"/"开始命名的定时器是公开的,其它进程可以访问。

POSIX的nanosleep提供了秒或毫秒的睡眠和延迟,而不是VxWorks的taskDelay的tick数,但是两者的进度是一样的,由时钟率决定,只是单位不同而已。

要使用timerLib类库,必须配置INCLUDE_POSIX_TIMERS组件。

POSIX异步I/O (AIO)

POSIX异步I/O函数由aioPxLib类库提供。VxWorks的AIO实现满足POSIX 1003.1标准。

VxWorks 6.9 内核编程指导之读书笔记 -- POSIX的更多相关文章

  1. VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer

    中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联 ...

  2. VxWorks 6.9 内核编程指导之读书笔记 -- Singnals

    Signals 信号是操作系统用于异常处理和异步控制流的关键.在很多方面,信号相当于软件方面的硬件中的中断.操作系统产生的信号包括总线错误和浮点处理异常.信号也提供了API来管理和产生信号.在应用程序 ...

  3. VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)

    #1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...

  4. VxWorks 6.9 内核编程指导之读书笔记 -- 多任务

    概述 VxWork系统任务 任务调度 任务创建和管理 任务的错误状态 任务异常处理 共享代码和重入 概述 现代实时操作系统是基于多任务和任务间通信的概念的.多任务环境运行一个实时进程RTP可以被作为一 ...

  5. VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Small-Footprint Configuration

    什么是Small-footprint? Small-footprint常见关键配置? 如何配置Small-footprint? 什么是Small-footprint? Small-footprint配 ...

  6. VxWorks 6.9 内核编程指导之读书笔记 -- 多任务(二)

    VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级 ...

  7. VxWorks 6.9 内核编程指导之读书笔记 -- C++开发

    5.1 介绍 针对C++的VxWorks配置 C++头文件 使用C++启动任务 C和C++之前调用代码 C++编译器说明 在信号处理和ISR中使用C++ 下载C++编写的内核模块 C++编译器的不同 ...

  8. VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)

    #1 内核对象的静态实例化 内核对象的静态实例化 任务的静态实例化 VX_TASK宏用来在编译时声明一个任务对象.该宏带有2个参数:任务名和栈大小.不像taskSpawn函数,任务名称可以是NULL. ...

  9. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

随机推荐

  1. Oracle DB 使用调度程序自动执行任务

    • 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...

  2. TCP具体解释(2):三次握手与四次挥手

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你给别人打电话.必须等线路接通了.对方拿 ...

  3. 《Java虚拟机原理图解》 1.2、class文件里的常量池

    [最新更新:2014/11/11]  了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...

  4. 【小白的java成长系列】——面向对象基础

    今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向 ...

  5. RotateAnimation详解

    其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度.        1.RotateAnimation(fr ...

  6. iOS开发——动画编程Swift篇&(四)CABasicAnimation动画

    CABasicAnimation动画 //CABasicAnimation-不透明度 @IBAction func cabOpacity() { let animation = CABasicAnim ...

  7. EntityFrameWork关系映射

    转:http://kb.cnblogs.com/page/108643/ Entity Framework 实体关系总结 作者: dudu  来源: 博客园  发布时间: 2011-10-28 20: ...

  8. Linux显示全部执行中的进程

    Linux显示全部执行中的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps aux | less USER PID %CPU %MEM VSZ RSS ...

  9. python 调试工具

    https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...

  10. 基于HTML5的捕鱼达人游戏网页版

    之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...