RTMINIX3

Last updated: 14 November 2009

RTMINIX3 is a project attempting to create a soft real-time Minix 3 distribution.
It has the following features:

Documents

RTMINIX3 - A more real-time Minix 3 (report)
Installation of RTMINIX3

Downloads

RTMINIX3

File File type Size MD5 checksum
RTMINIX3 source tar.bz2 4.71 MB BD21C42F1844502980A5684275294261
RTMINIX3 Installation CD rar 7.84 MB MD5 checksum inside rar
RTMINIX3 Patch (use GNU patch utility) patch 411 KB 846E50F1E0DBFDFA1A2FA41CE521230C
Pre-installed VMware image zip 27.29 MB 0F60DF4F699D677F7B909982C575833E

Utilities

File File type Size
GNU Patch 2.5.4 (binary) tar.bz2 51 KB
GNU Patch 2.5.4 (source) tar.bz2 150 KB
Schedule tracer zip 17 KB

Contact

Bianco Zandbergen
E-mail:

Modified and added source files

Action File Source Description
Include files
modified /usr/src/include/lib.h src (html) Added SS macro which contains the endpoint of the semaphore server.
modified /usr/src/include/minix/callnr.h src (html) Added system call numbers.
modified /usr/src/include/com.h src (html) Added kernel call numbers. Increased number of kernel calls (NR_SYS_CALLS macro). Added SS_PROC_NR macro which contains the endpoint of the semaphore server.).
created /usr/src/include/minix/klog.h src (html) Macro’s and library (libklog) function prototypes for kernel logging.
created /usr/src/include/minix/rt.h src (html) Macro’s and library (librt) function prototypes for real-time functionality.
created /usr/src/include/minix/sem.h src (html) Macro’s and library (libsem) function prototypes for semaphores.
modified /usr/src/include/minix/syslib.h src (html) Added function prototypes for the added system library functions.
Kernel
modified /usr/src/kernel/clock.c src (html) Modified clock_handler() function and do_clocktick() function for accounting of real-time processes.
modified /usr/src/kernel/config.h src (html) Added macro’s to exclude added kernel calls. Added EDF_PRINT_MD macro to enable printing to the console if a process scheduled by EDF missed the deadline. Added DEBUG_IPC macro to enable printing debug information related to prioritized IPC.
modified /usr/src/kernel/proc.h src (html) Added global kernel variables for scheduling and kernel logging. Added fields to the declaration of struct proc for real-time scheduling and statistics gathering. Added is_rtp() macro for checking if a process is real-time. Added RT_Q macro to hold the real-time queue number. Modified USER_Q macro to make place for the real-time queue. Added NEXTPERIOD macro that holds the flag to indicate that a process scheduled by EDF is blocked waiting for the next period.
modified /usr/src/kernel/proc.c src (html) Added inclusion of <minix/rt.h> header. Modified enqueue() funcion to support RM and EDF. Added edf_sched() function that picks the next runnable EDF process. Added show_rt_data() function that prints RT scheduler debug information to the console. Modified mini_send() to support EDF and implement prioritized IPC. Modified mini_receive() function to support EDF. Modified sched() and balance_queues() functions to implement the scheduling bridge. Modified pick_proc() function to be able to log the next running process on every context switch.
modified /usr/src/kernel/proto.h src (html) Added function prototypes for edf_sched() and show_rt_data() functions.
modified /usr/src/kernel/table.c src (html) Added semaphore server to struct boot_image image[] array. Added SS_C macro which holds the allowed kernel calls for the semaphore server. Modified USR_M macro, which holds the processes to whom user processes may send messages, to allow sending messages to the semaphore server.
Kernel (kernel calls)
modified /usr/src/kernel/system.c src (html) Modified initialize() function to map added kernel calls.
modified /usr/src/kernel/system.h src (html) Added function prototypes for added kernel calls.
modified /usr/src/kernel/system/do_exit.c src (html) Added inclusion of <minix/rt.h> header. Added additional cleanup for exited real-time processes.
created /usr/src/kernel/system/do_klog_copy.c src (html) Implementation of the SYS_KLOG_COPY kernel call.
created /usr/src/kernel/system/do_klog_set.c src (html) Implementation of the SYS_KLOG_SET kernel call.
modified /usr/src/kernel/system/do_nice.c src (html) Modified SYS_NICE kernel call to avoid non real-time processes getting the priority reserved for real-time processes.
created /usr/src/kernel/system/do_rt_nextperiod.c src (html) Implementation of the SYS_RT_NEXTPERIOD kernel call.
created /usr/src/kernel/system/do_rt_set.c src (html) Implementation of the SYS_RT_SET kernel call.
created /usr/src/kernel/system/do_rt_set_sched.c src (html) Implementation of the SYS_RT_SET_SCHED kernel call.
created /usr/src/kernel/system/do_rt_set_sched_bridge.c src (html) Implementation of the SYS_RT_SCHED_BRIDGE kernel call.
created /usr/src/kernel/system/do_rt_show_data.c src (html) Implementation of the SYS_RT_SHOW_DATA kernel call.
Process Manager
modified /usr/src/servers/pm/forkexit.c src (html) Modified pm_exit() function to inform the semaphore server when a process exits.
created /usr/src/servers/pm/klog.c src (html) System call implementations for kernel logging.
modified /usr/src/servers/pm/proto.h src (html) Added function prototypes for added system calls.
created /usr/src/servers/pm/rt.c src (html) System call implementations for real-time functionality.
modified /usr/src/servers/pm/table.c src (html) Map the added system calls in the call_vec[] array.
Information Server
modified /usr/src/servers/is/dmp.c src (html) Increased NHOOKS macro for the added key binding. Modified struct hook_entry to map shift + F9 to the rt_sched_dmp() function.
modified /usr/src/servers/is/dmp_kernel.c src (html) Added implementation of rt_sched_dmp() function.
modified /usr/src/servers/is/main.c src (html) Modified init_server() function to hook also key shift + F9.
modified /usr/src/servers/is/proto.h src (html) Added function prototype for rt_sched_dmp() function.
Semaphore Server
created /usr/src/servers/ss/proto.h src (html) Function prototypes for the semaphore server.
created /usr/src/servers/ss/ss.h src (html) Main header file of the semaphore server.
created /usr/src/servers/ss/ss.c src (html) Implementation of the semaphore server.
Real-time library
created /usr/src/lib/rtminix3/rt_nextperiod.c src (html) Implementation of the rt_nextperiod() library function.
created /usr/src/lib/rtminix3/rt_set_edf.c src (html) Implementation of the rt_set_edf() library function.
created /usr/src/lib/rtminix3/rt_set_rm.c src (html) Implementation of the rt_set_rm() library function.
created /usr/src/lib/rtminix3/rt_set_sched_bridge.c src (html) Implementation of the rt_set_sched_bridge() library function.
created /usr/src/lib/rtminix3/rt_set_sched_edf.c src (html) Implementation of the rt_set_sched_edf() library function.
created /usr/src/lib/rtminix3/rt_set_sched_rm.c src (html) Implementation of the rt_set_sched_rm() library function.
Kernel logger library
created /usr/src/lib/klog/klog_copy.c src (html) Implementation of the klog_copy() library function
created /usr/src/lib/klog/klog_set.c src (html) Implementation of the klog_set() library function
Semaphore library
created /usr/src/lib/sem/sem_b_create.c src (html) Implementation of the sem_b_create() library function.
created /usr/src/lib/sem/sem_c_create.c src (html) Implementation of the sem_c_create() library function.
created /usr/src/lib/sem/sem_m_create.c src (html) Implementation of the sem_m_create() library function.
created /usr/src/lib/sem/sem_delete.c src (html) Implementation of the sem_delete() library function.
created /usr/src/lib/sem/sem_flush.c src (html) Implementation of the sem_flush() library function.
created /usr/src/lib/sem/sem_give.c src (html) Implementation of the sem_give() library function.
created /usr/src/lib/sem/sem_take.c src (html) Implementation of the sem_take() library function.
created /usr/src/lib/sem/sem_value.c src (html) Implementation of the sem_value() library function.
System library
created /usr/src/lib/syslib/sys_klog_copy.c src (html) Implementation of the sys_klog_copy() library function.
created /usr/src/lib/syslib/sys_klog_set.c src (html) Implementation of the sys_klog_set() library function.
created /usr/src/lib/syslib/sys_rt_nextperiod.c src (html) Implementation of the sys_rt_nextperiod() library function.
created /usr/src/lib/syslib/sys_rt_set.c src (html) Implementation of the sys_rt_set() library function.
created /usr/src/lib/syslib/sys_rt_set_sched.c src (html) Implementation of the sys_rt_set_sched() library function.
created /usr/src/lib/syslib/sys_rt_sched_bridge.c src (html) Implementation of the sys_rt_sched_bridge() library function.
created /usr/src/lib/syslib/sys_rt_show_data.c src (html) Implementation of the sys_rt_show_data() library function.
Commands
modified /usr/src/commands/reboot/halt.c src (html) Added call to RT_SET_SCHED_BRIDGE system call to enable scheduling bridge.
created /usr/src/commands/simple/edftop.c src (html) Implementation of edftop program which monitors processes scheduled by EDF.
created /usr/src/commands/simple/klog_copy.c src (html) Implementation of klog_copy program to copy the kernel log.
created /usr/src/commands/simple/klog_set_ci.c src (html) Implementation of klog_set_ci program which enables kernel logging and logs every running process when a clock interrupt happens.
created /usr/src/commands/simple/klog_set_cs.c src (html) Implementation of klog_set_cs program which enables kernel logging and logs every next running process on a context switch.
created /usr/src/commands/simple/rt_set_sched_edf.c src (html) Implementation of rt_set_sched_edf program which sets the real-time scheduler to EDF.
created /usr/src/commands/simple/rt_set_sched_rm_pnu.c src (html) Implementation of rt_set_sched_rm_pnu program which sets the real-time scheduler to RM and does not enforce unique priorities.
created /usr/src/commands/simple/rt_set_sched_rm_pu.c src (html) Implementation of rt_set_sched_rm_pu program which sets the real-time scheduler to RM and enforces unique priorities.