VxWorks 6.9 内核编程指导之读书笔记 -- POSIX
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的更多相关文章
- VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer
中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- Singnals
Signals 信号是操作系统用于异常处理和异步控制流的关键.在很多方面,信号相当于软件方面的硬件中的中断.操作系统产生的信号包括总线错误和浮点处理异常.信号也提供了API来管理和产生信号.在应用程序 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)
#1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务
概述 VxWork系统任务 任务调度 任务创建和管理 任务的错误状态 任务异常处理 共享代码和重入 概述 现代实时操作系统是基于多任务和任务间通信的概念的.多任务环境运行一个实时进程RTP可以被作为一 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Small-Footprint Configuration
什么是Small-footprint? Small-footprint常见关键配置? 如何配置Small-footprint? 什么是Small-footprint? Small-footprint配 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务(二)
VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- C++开发
5.1 介绍 针对C++的VxWorks配置 C++头文件 使用C++启动任务 C和C++之前调用代码 C++编译器说明 在信号处理和ISR中使用C++ 下载C++编写的内核模块 C++编译器的不同 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)
#1 内核对象的静态实例化 内核对象的静态实例化 任务的静态实例化 VX_TASK宏用来在编译时声明一个任务对象.该宏带有2个参数:任务名和栈大小.不像taskSpawn函数,任务名称可以是NULL. ...
- 《Linux/Unix系统编程手册》读书笔记9(文件属性)
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
随机推荐
- Oracle DB 使用调度程序自动执行任务
• 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...
- TCP具体解释(2):三次握手与四次挥手
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你给别人打电话.必须等线路接通了.对方拿 ...
- 《Java虚拟机原理图解》 1.2、class文件里的常量池
[最新更新:2014/11/11] 了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...
- 【小白的java成长系列】——面向对象基础
今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向 ...
- RotateAnimation详解
其他构造器的旋转也可参考这副图. RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度. 1.RotateAnimation(fr ...
- iOS开发——动画编程Swift篇&(四)CABasicAnimation动画
CABasicAnimation动画 //CABasicAnimation-不透明度 @IBAction func cabOpacity() { let animation = CABasicAnim ...
- EntityFrameWork关系映射
转:http://kb.cnblogs.com/page/108643/ Entity Framework 实体关系总结 作者: dudu 来源: 博客园 发布时间: 2011-10-28 20: ...
- Linux显示全部执行中的进程
Linux显示全部执行中的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps aux | less USER PID %CPU %MEM VSZ RSS ...
- python 调试工具
https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...
- 基于HTML5的捕鱼达人游戏网页版
之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...