LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

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日为当前标准。

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

 

posted on 2024-03-22 23:59  ArnoldLu  阅读(433)  评论(0编辑  收藏  举报

导航