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标准。
转载于:https://www.cnblogs.com/C-Sharp2/p/5923872.html
VxWorks 6.9 内核编程指导之读书笔记 -- POSIX相关推荐
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)
#1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...
- 《Java 并发编程实战》--读书笔记
Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...
- 《Java编程思想》读书笔记 第十三章 字符串
<Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...
- 《编程珠玑》 读书笔记
<编程珠玑> 读书笔记 娄雨禛 PB16060356 准确的问题描述 很多时候,我们总是过度关注了解决问题所用的巧妙算法,而将问题本身的重要性忽视.当我们拿到一个问题时,应当反复研读问题的 ...
- 《javascript面向对象编程指南》读书笔记
<javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...
- 与孩子一起学编程python_与孩子一起学编程(Python读书笔记3)
第十一章 嵌套与可变循环 Python 3.X里 print()函数默认是自动换行的,所以本章代码会有很多问题,实际上 print()函数里有一个默认参数 end, 默认情况下: end= " ...
- 《Java多线程编程核心技术》读书笔记
为什么80%的码农都做不了架构师?>>> <Java多线程编程核心技术>读书笔记. ###第一章 Java多线程技能 使用Java多线程两种方式. 继承Thread ...
- 《Java编程思想》读书笔记
前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...
- 《JavaScript DOM 编程艺术》读书笔记
<JavaScript DOM 编程艺术>读书笔记--其一 第二章 1.Javascript代码编写方式: (1)将JavaScript代码放在文档<head>标签中的< ...
最新文章
- learning to rank_排序
- 2021-03-18TOMCAT的非双亲委派机制众家辨解
- Servlet的延迟加载和预加载
- Yii2 获取URL的一些方法
- 信息编码:位操作布尔值编码
- python 三数之和
- java 大文件 md5_使用Java为大文件生成MD5非常慢
- 浮动div,回到顶部
- Oracle数据库分页总结
- java写入出错class_JAVA新人常犯错误集锦
- 自编基于jQuery实现分页插件
- ElasticSearch全文搜索引擎之Windows集群搭建
- 最强大脑《智行营救》
- java邮件群发代码_基于jsp的邮件群发系统-JavaEE实现邮件群发系统 - java项目源码...
- 【Codeforces301E】Yaroslav and Arrangements
- DB2 V9.7新特性 - 降低高水位标记
- 纽脉医疗冲刺港交所上市:核心人员从微创医疗出走,创业后被起诉
- RabbitMQ-direct直通模式
- 蒲慕明院士:脑机融合技术或许会成为未来人工智能的一个热门方向
- Android之后,Google找的未来是给一切加上人工智能
热门文章
- 大数据技术与应用实训心得_信息学院成功举办大数据技术与应用论坛
- python gmm em算法 2维数据_AI大语音(六)——混合高斯模型(GMM)(深度解析)...
- 2013蓝桥杯C++B:错误票据
- 常见图片格式与调色算法
- UnityShader21:程序纹理
- Unity3D基础22:GUI Texture组件/Sence下显示图片
- 贪心算法 (Greedy Algorithm)
- matlab imresize
- [Python] set()函数 创建一个无序不重复元素集
- matlab2c使用c++实现matlab函数系列教程-sortrows函数