POSIX标准及其一致性/功能/压力测试
1 POSIX标准
POSIX: Portable Operating System Interface of Unix.,可移植操作系统接口。X表示其是对Unix API的传承。
POSIX标准由IEEE(电气和电子工程师协会)发布,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行软件而定义的一系列API标准的总称。
简单可以理解POSIX标准是为操作系统设计API时遵循的规范,一套规范的系统调用集。
1.1 1997年以前的部分
1997年之前,POSIX包括几个标准:
- POSIX.1:核心服务(包含标准ANSI C) (IEEE标准1003.1-1988)
- 进程创建和控制
- 信号
- 浮点异常
- 分段/内存违规
- 非法指令
- 总线错误
- 定时器
- 文件和目录操作
- 管道
- C语言库(标准C)
- 输入输出端口接口和控制
- 进程触发器
- POSIX.1b:实时扩展(IEEE Std 1003.1b-1993,后来成为libt——实时扩展库)[8]
- 优先级调度
- 实时信号
- 时钟和计时器
- 信号灯
- 消息传递
- 共用存储器
- 异步和同步输入输出
- 内存锁定接口
- POSIX.1c:线程扩展(IEEE标准1003.1c-1995)
- 线程创建、控制和清理
- 线程调度
- 线程同步
- 信号处理
- POSIX.2:Shell和实用程序(IEEE标准1003.2-1992)
- 命令解释程序
- 实用程序
1.2 1997年以后的版本
1997年后,奥斯汀工作组开发了POSIX修订版。这些规范在被ISO正式批准成为POSIX标准之前,被称为单一UNIX规范。
POSIX.1-2001:POSIX.1-2001(或IEEE标准1003.1-2001)等同于单个UNIX规范第3版。
该标准包括:
- 基础定义,第6期,
- 系统接口和标题,第6期,
- 命令和实用程序,第6期。
POSIX.1-2004(有两个TCs):IEEE Std 1003.1-2004涉及POSIX.1-2001的小更新。它包含了两个小的更新或勘误表,称为技术勘误表(TCs)。 其内容可在网上查阅。
POSIX.1-2008(含两个技术勘误表):基础规范,第7项(或IEEE标准1003.1-2008,2016版)类似于当前的2017版(截至2018年7月22日)。 免费的在线拷贝可能仍然可用。
本标准包括:
- 基础定义,第7期,
- 系统接口和标题,第7期,
- 命令和实用程序,第7期,
- 基本原理卷。
POSIX.1-2017:IEEE标准1003.1-2017(IEEE标准1003.1-2008的修订版)- IEEE信息技术标准-便携式操作系统接口(POSIX(R))基本规范,第7期可从Open Group或IEEE获得,截至2018年7月22日为当前标准。
POSIX标准主要包括以下几方面:Batch Environment Services、Development Utilities Index、Headers Index、Math Interfaces Index、Networking Services Index、Realtime Services Index、Threads Index。
2 POSIX标准相关测试
Linux的ltp中提供了对POSIX测试用例:
testcases/open_posix_testsuite/ ├── AUTHORS ├── bin ├── conformance--POSIX一致性测试,检查头文件是否正确,API接口一致性测试等。参考《HOWTO_ConformanceTest》。 │ ├── behavior │ │ ├── Makefile │ │ ├── timers │ │ └── WIFEXITED │ ├── definitions │ │ ├── aio_h │ │ ├── errno_h │ │ ├── Makefile │ │ ├── mqueue_h │ │ ├── pthread_h │ │ ├── sched_h │ │ ├── signal_h │ │ ├── sys │ │ ├── time_h │ │ └── unistd_h │ ├── interfaces │ │ ├── access │ │ ├── aio_cancel │ │ ├── aio_error │ │ ├── aio_fsync │ │ ├── aio_read │ │ ├── aio_return │ │ ├── aio_suspend │ │ ├── aio_write │ │ ├── asctime │ │ ├── clock │ │ ├── clock_getcpuclockid │ │ ├── clock_getres │ │ ├── clock_gettime │ │ ├── clock_nanosleep │ │ ├── clock_settime │ │ ├── ctime │ │ ├── difftime │ │ ├── fork │ │ ├── fsync │ │ ├── getpid │ │ ├── gmtime │ │ ├── kill │ │ ├── killpg │ │ ├── lio_listio │ │ ├── localtime │ │ ├── Makefile │ │ ├── mktime │ │ ├── mlock │ │ ├── mlockall │ │ ├── mmap │ │ ├── mq_close │ │ ├── mq_getattr │ │ ├── mq_notify │ │ ├── mq_open │ │ ├── mq_receive │ │ ├── mq_send │ │ ├── mq_setattr │ │ ├── mq_timedreceive │ │ ├── mq_timedsend │ │ ├── mq_unlink │ │ ├── munlock │ │ ├── munlockall │ │ ├── munmap │ │ ├── nanosleep │ │ ├── pthread_atfork │ │ ├── pthread_attr_destroy │ │ ├── pthread_attr_getdetachstate │ │ ├── pthread_attr_getinheritsched │ │ ├── pthread_attr_getschedparam │ │ ├── pthread_attr_getschedpolicy │ │ ├── pthread_attr_getscope │ │ ├── pthread_attr_getstack │ │ ├── pthread_attr_getstacksize │ │ ├── pthread_attr_init │ │ ├── pthread_attr_setdetachstate │ │ ├── pthread_attr_setinheritsched │ │ ├── pthread_attr_setschedparam │ │ ├── pthread_attr_setschedpolicy │ │ ├── pthread_attr_setscope │ │ ├── pthread_attr_setstack │ │ ├── pthread_attr_setstacksize │ │ ├── pthread_barrierattr_destroy │ │ ├── pthread_barrierattr_getpshared │ │ ├── pthread_barrierattr_init │ │ ├── pthread_barrierattr_setpshared │ │ ├── pthread_barrier_destroy │ │ ├── pthread_barrier_init │ │ ├── pthread_barrier_wait │ │ ├── pthread_cancel │ │ ├── pthread_cleanup_pop │ │ ├── pthread_cleanup_push │ │ ├── pthread_condattr_destroy │ │ ├── pthread_condattr_getclock │ │ ├── pthread_condattr_getpshared │ │ ├── pthread_condattr_init │ │ ├── pthread_condattr_setclock │ │ ├── pthread_condattr_setpshared │ │ ├── pthread_cond_broadcast │ │ ├── pthread_cond_destroy │ │ ├── pthread_cond_init │ │ ├── pthread_cond_signal │ │ ├── pthread_cond_timedwait │ │ ├── pthread_cond_wait │ │ ├── pthread_create │ │ ├── pthread_detach │ │ ├── pthread_equal │ │ ├── pthread_exit │ │ ├── pthread_getcpuclockid │ │ ├── pthread_getschedparam │ │ ├── pthread_getspecific │ │ ├── pthread_join │ │ ├── pthread_key_create │ │ ├── pthread_key_delete │ │ ├── pthread_kill │ │ ├── pthread_mutexattr_destroy │ │ ├── pthread_mutexattr_getprioceiling │ │ ├── pthread_mutexattr_getprotocol │ │ ├── pthread_mutexattr_getpshared │ │ ├── pthread_mutexattr_gettype │ │ ├── pthread_mutexattr_init │ │ ├── pthread_mutexattr_setprioceiling │ │ ├── pthread_mutexattr_setprotocol │ │ ├── pthread_mutexattr_setpshared │ │ ├── pthread_mutexattr_settype │ │ ├── pthread_mutex_destroy │ │ ├── pthread_mutex_getprioceiling │ │ ├── pthread_mutex_init │ │ ├── pthread_mutex_lock │ │ ├── pthread_mutex_setprioceiling │ │ ├── pthread_mutex_timedlock │ │ ├── pthread_mutex_trylock │ │ ├── pthread_mutex_unlock │ │ ├── pthread_once │ │ ├── pthread_rwlockattr_destroy │ │ ├── pthread_rwlockattr_getpshared │ │ ├── pthread_rwlockattr_init │ │ ├── pthread_rwlockattr_setpshared │ │ ├── pthread_rwlock_destroy │ │ ├── pthread_rwlock_init │ │ ├── pthread_rwlock_rdlock │ │ ├── pthread_rwlock_timedrdlock │ │ ├── pthread_rwlock_timedwrlock │ │ ├── pthread_rwlock_tryrdlock │ │ ├── pthread_rwlock_trywrlock │ │ ├── pthread_rwlock_unlock │ │ ├── pthread_rwlock_wrlock │ │ ├── pthread_self │ │ ├── pthread_setcancelstate │ │ ├── pthread_setcanceltype │ │ ├── pthread_setschedparam │ │ ├── pthread_setschedprio │ │ ├── pthread_setspecific │ │ ├── pthread_sigmask │ │ ├── pthread_spin_destroy │ │ ├── pthread_spin_init │ │ ├── pthread_spin_lock │ │ ├── pthread_spin_trylock │ │ ├── pthread_spin_unlock │ │ ├── pthread_testcancel │ │ ├── raise │ │ ├── sched_getparam │ │ ├── sched_get_priority_max │ │ ├── sched_get_priority_min │ │ ├── sched_getscheduler │ │ ├── sched_rr_get_interval │ │ ├── sched_setparam │ │ ├── sched_setscheduler │ │ ├── sched_yield │ │ ├── sem_close │ │ ├── sem_destroy │ │ ├── sem_getvalue │ │ ├── sem_init │ │ ├── sem_open │ │ ├── sem_post │ │ ├── sem_timedwait │ │ ├── sem_unlink │ │ ├── sem_wait │ │ ├── shm_open │ │ ├── shm_unlink │ │ ├── sigaction │ │ ├── sigaddset │ │ ├── sigaltstack │ │ ├── sigdelset │ │ ├── sigemptyset │ │ ├── sigfillset │ │ ├── sighold │ │ ├── sigignore │ │ ├── sigismember │ │ ├── signal │ │ ├── sigpause │ │ ├── sigpending │ │ ├── sigprocmask │ │ ├── sigqueue │ │ ├── sigrelse │ │ ├── sigset │ │ ├── sigsuspend │ │ ├── sigtimedwait │ │ ├── sigwait │ │ ├── sigwaitinfo │ │ ├── strchr │ │ ├── strcpy │ │ ├── strftime │ │ ├── strlen │ │ ├── strncpy │ │ ├── testfrmw │ │ ├── time │ │ ├── timer_create │ │ ├── timer_delete │ │ ├── timer_getoverrun │ │ ├── timer_gettime │ │ └── timer_settime │ └── Makefile ├── Documentation ├── functional--功能性测试,包括MessageQueue、Semaphore、Thread、Timer,参考《HOWTO_FunctionalStressTest》。 │ ├── Makefile │ ├── mqueues │ │ ├── assertions.xml │ │ ├── coverage.txt │ │ ├── LDLIBS │ │ ├── plan.txt │ │ ├── send_rev_1.c │ │ └── send_rev_2.c │ ├── semaphores │ │ ├── assertions.xml │ │ ├── coverage.txt │ │ ├── LDLIBS │ │ ├── plan.txt │ │ ├── sem_conpro.c │ │ ├── sem_lock.c │ │ ├── sem_philosopher.c │ │ ├── sem_readerwriter.c │ │ └── sem_sleepingbarber.c │ ├── threads │ │ ├── condvar │ │ ├── Makefile │ │ ├── README │ │ └── schedule │ └── timers │ ├── assertions.xml │ ├── clocks │ ├── coverage.txt │ ├── Makefile │ ├── plan.txt │ └── timers ├── include ├── Makefile ├── NEWS ├── QUICK-START ├── README ├── scripts ├── stress--压力测试,针对模块包括MessageQueue、Semaphore、Signal、Thread、Timer。 │ ├── Makefile │ ├── mqueues │ │ ├── assertions.xml │ │ ├── coverage.txt │ │ ├── LDLIBS │ │ ├── mqueues_multi_send_rev_1.args │ │ ├── mqueues_multi_send_rev_2.args │ │ ├── multi_send_rev_1.c │ │ ├── multi_send_rev_2.c │ │ └── plan.txt │ ├── semaphores │ │ ├── assertions.xml │ │ ├── coverage.txt │ │ ├── LDLIBS │ │ ├── multi_con_pro.c │ │ └── plan.txt │ ├── signals │ │ └── sigismember_stress_1.c │ ├── threads │ │ ├── assertions.xml │ │ ├── fork │ │ ├── helper.c │ │ ├── LDLIBS │ │ ├── pthread_cancel │ │ ├── pthread_cond_init │ │ ├── pthread_cond_timedwait │ │ ├── pthread_cond_wait │ │ ├── pthread_create │ │ ├── pthread_exit │ │ ├── pthread_getschedparam │ │ ├── pthread_kill │ │ ├── pthread_mutex_init │ │ ├── pthread_mutex_lock │ │ ├── pthread_mutex_trylock │ │ ├── pthread_once │ │ ├── pthread_self │ │ ├── sem_getvalue │ │ ├── sem_init │ │ └── sem_open │ └── timers │ ├── keytests.sh │ └── plan.txt └── tools
联系方式:arnoldlu@qq.com