ChorusOS 5.0 Features and Architecture Overview

POSIX Features

The ChorusOS operating system implements the following POSIX APIs:

POSIX Signals (POSIX-SIGNALS)

The ChorusOS operating system supports POSIX basic signal management system calls. The POSIX signals API is only available to user-mode processes.

POSIX signals API

The POSIX signals API is summarized in the following table:

Function 

Description 

kill()

Send a signal to a process 

sigemptyset()

Set a set of signals to NULL

sigfillset()

Set all signals in a set 

sigaddset()

Add an individual signal to a set 

sigdelset()

Delete an individual signal from a set 

sigismember()

Test whether a signal is member of a set 

sigaction()

Set/Examine action for a given signal. 

pthread_sigmask()

Set/Examine signal mask for a pthread 

sigprocmask()

Set/Examine signal mask for a process 

sigpending()

Examine pending signals 

sigsuspend()

Wait for a signal 

sigwait()

Accept a signal 

pthread_kill()

Send a signal to a given thread 

alarm()

Schedule delivery of an alarm signal 

pause()

Suspend process execution 

sleep()

Delay process execution 

POSIX Real-Time Signals (POSIX_REALTIME_SIGNALS)

The real-time extension of POSIX signals (POSIX_REALTIME_SIGNALS) provides functions to send and receive queued signals. In the basic POSIX signals implementation, a particular signal is only received once by a process. Multiple occurrences of a pending signal are ignored. The real-time signals API allows multiple occurences of a signal to remain pending. POSIX real-time signals include a value that is allocated to the receiver of the signal upon reception by sigwaitinfo() or sigtimedwait(). Signals are then handled according to the value allocated to the receiver. As a consequence, the number of signals sent always corresponds to the number of signals received. This behavior is reserved for specific signals included in a special range.

POSIX Real-Time Signals API

The POSIX real-time signals API is summarized in the following table:

Function 

Description 

sigqueue()

Queue a signal to a process 

sigwaitinfo()

Accept a signal and get info 

sigtimedwait()

Accept a signal, wait for bounded time 

POSIX Threads (POSIX-THREADS)

The POSIX-THREADS API is a compatible implementation of the POSIX 1003.1 pthread API.

POSIX threads API

The POSIX threads API is summarized in the following table:

Function 

Description 

pthread_attr_init()

Initialize a thread attribute object 

pthread_attr_destroy()

Destroy a thread attribute object 

pthread_attr_setstacksize()

Set the stacksize attribute

pthread_attr_getstacksize()

Get the stacksize attribute

pthread_attr_setstackaddr()

Set the stackaddr attribute

pthread_attr_getstackaddr()

Get the stackaddr attribute

pthread_attr_setdetachstate()

Set the detachstate attribute

pthread_attr_getdetachstate()

Get the detachstate attribute

pthread_attr_setscope()

Set the contention scope attribute 

pthread_attr_getscope()

Get the contention scope attribute 

pthread_attr_setinheritsched()

Set the scheduling inheritance attribute 

pthread_attr_getinheritsched()

Get the scheduling inheritance attribute 

pthread_attr_setschedpolicy()

Set the scheduling policy attribute 

pthread_attr_getschedpolicy()

Get the scheduling policy attribute 

pthread_attr_setschedparam()

Set the scheduling parameter attribute 

pthread_attr_getschedparam()

Get the scheduling parameter attribute 

pthread_cancel()

Cancel execution of a thread 

pthread_cleanup_pop()

Pop a thread cancellation clean-up handler 

pthread_cleanup_push()

Push a thread cancellation clean-up handler 

pthread_cond_init()

Initialize a condition variable 

pthread_cond_destroy()

Destroy a condition variable 

pthread_cond_signal()

Signal a condition variable 

pthread_cond_broadcast()

Broadcast a condition variable 

pthread_cond_wait()

Wait on a condition variable 

pthread_cond_timedwait()

Wait with timeout on a condition variable 

pthread_condattr_init()

Initialize a condition variable attribute object 

pthread_condattr_destroy()

Destroy a condition variable attribute object 

pthread_create()

Create a thread 

pthread_equal()

Compare thread identifiers 

pthread_exit()

Terminate the calling thread 

pthread_join()

Wait for thread termination 

pthread_key_create()

Create a thread-specific data key 

pthread_key_delete()

Delete a thread-specific data key 

pthread_kill()

Send a signal to a thread 

pthread_mutex_init()

Initialize a mutex 

pthread_mutex_destroy()

Delete a mutex 

pthread_mutex_lock()

Lock a mutex 

pthread_mutex_trylock()

Attempt to lock a mutex without waiting 

pthread_mutex_unlock()

Unlock a mutex 

pthread_mutexattr_init()

Initialize a mutex attribute object 

pthread_mutexattr_destroy()

Destroy a mutex attribute object 

pthread_once()

Initialize a library dynamically 

pthread_self()

Get the identifier of the calling thread 

pthread_setcancelstate()

Enable or disable cancellation 

pthread_setschedparam()

Set the current scheduling policy and parameters of a thread 

pthread_getschedparam()

Get the current scheduling policy and parameters of a thread 

pthread_setspecific()

Associate a thread-specific value with a key 

pthread_testcancel()

Create cancellation point in the caller 

pthread_getspecific()

Retrieve the thread-specific value associated with a key 

pthread_yield, sched_yield()

Yield the processor to another thread 

sched_get_priority_max()

Get maximum priority for policy 

sched_get_priority_min()

Get minimum priority for policy 

sched_rr_get_interval()

Get time quantum for SCHED_RR policy

sysconf()

Get configurable system variables 

POSIX Timers (POSIX-TIMERS)

The POSIX-TIMERS API is a compatible implementation of the POSIX 1003.1 real-time clock/timer API. This feature is simply a library that might or might not be linked with an application. It is not a feature that can be turned on or off when configuring a system.

POSIX Timers API

The POSIX timers API is summarized in the following table:

Function 

Description 

clock_settime()

Set clock to a specified value 

clock_gettime()

Get value of clock 

clock_getres()

Get resolution of clock 

nanosleep()

Delay the current thread with high resolution 

timer_create()

Create a timer 

timer_delete()

Delete a timer 

timer_settime()

Set and arm or disarm a timer 

timer_gettime()

Get remaining interval for an active timer 

timer_getoverrun()

Get current overrun count for a timer 

POSIX Message Queues (POSIX_MQ)

The POSIX_MQ feature is a compatible implementation of the POSIX 1003.1 real-time message queue API. POSIX message queues can be shared between user and supervisor processes.

POSIX Message Queue API

The POSIX message queues API is summarized in the following table:

Function 

Description 

fpathconf()

Return value of configurable limit (same as for regular files) 

mq_close()

Close a message queue 

mq_getattr()

Retrieve message queue attributes 

mq_open()

Open a message queue 

mq_receive()

Receive a message from a message queue 

mq_send()

Send a message to a message queue 

mq_setattr()

Set message queue attributes 

mq_unlink()

Unlink a message queue 

POSIX Semaphores (POSIX-SEM)

The POSIX-SEM API is a compatible implementation of the POSIX 1003.1 semaphores API. For general information on this feature, see the POSIX standard (IEEE Std 1003.1 - 1993). This feature is simply a library that might or might not be linked to an application. It is not a feature that can be turned on or off when configuring a system.

POSIX Semaphores API

The POSIX semaphores API is summarized in the following table. Some of the calls listed are also included in other features:

Function 

Comment 

sem_open()

Open/initialize a semaphore 

sem_close()

Close a semaphore 

sem_init()

Initialize a semaphore 

sem_destroy()

Delete a semaphore 

sem_wait()

Wait on a semaphore 

sem_trywait()

Attempt to lock a semaphore 

sem_post()

Signal a semaphore 

sem_getvalue()

Get semaphore counter value 

sem_unlink()

Remove a named semaphore 

POSIX Shared Memory (POSIX_SHM)

The POSIX_SHM feature is a compatible implementation of the POSIX 1003.1 real-time shared memory objects API. For general information on this feature, see the POSIX standard (IEEE Std 1003.1b-1993).

POSIX Shared Memory API

The POSIX shared memory API is summarized in the following table. Some of the calls listed are also included in other features:

Function 

Description 

close()

Close a file descriptor 

dup()

Duplicate an open file descriptor 

dup2()

Duplicate an open file descriptor 

fchmod()

Change mode of file 

fchown()

Change owner and group of a file 

fcntl()

File control 

fpathconf()

Get configurable pathname variables 

fstat()

Get file status 

ftruncate()

Set size of a shared memory object 

mmap()

Map actor addresses to memory object. 

munmap()

Unmap previously mapped addresses 

shm_open()

Open a shared memory object 

shm_unlink()

Unlink a shared memory object 

POSIX Sockets (POSIX_SOCKETS)

The POSIX_SOCKETS feature provides POSIX-compatible socket system calls. For general information on this feature, see the POSIX draft standard P1003.1g. The POSIX_SOCKETS provides support for the AF_LOCAL, AF_INET, AF_INET6, and AF_ROUTE domains. The AF_UNIX domain is only supported when the AF_LOCAL feature is present. The AF_INET6 domain is only supported when the IPv6 feature is present.

POSIX Sockets API

The POSIX_SOCKETS feature API is summarized in the following table. Some of the calls listed are also included in other features:

Function 

Description 

accept()

Accept a connection on a socket 

bind()

Bind a name to a socket 

close()

Close a file descriptor 

connect()

Initiate a connection on a socket 

dup()

Duplicate an open file descriptor 

dup2()

Duplicate an open file descriptor 

fcntl()

File control 

getpeername()

Get name of connected peer 

getsockname()

Get socket name 

setsockopt()

Set options on sockets 

getsockopt()

Get options on sockets 

ioctl()

Device control 

listen()

Listen for connections on a socket 

read()

Read from a socket 

recv()

Receive a message from a socket 

recvfrom()

Receive a message from a socket 

recvmsg()

Receive a message from a socket 

select()

Synchronous I/O multiplexing 

send()

Send a message from a socket 

sendto()

Send a message from a socket. 

sendmsg()

Send a message from a socket 

shutdown()

Shut down part of a full-duplex connection 

socket()

Create an endpoint for communication 

socketpair()

Create a pair of connected sockets 

write()

Write on a socket