seL4 0.0.1-rt-dev
The development branch of the for the seL4 realtime extensions. This branch is not verified and is under active development.
Highlights
-
Maximum priorities
- Previously seL4 would not allow threads to set any other thread’s priority to higher than its own. This has been extracted into a separate field for the RT kernel, a maximum priority, which limits what thread cans set their own or other threads priorities to.
-
Scheduling contexts
- This branch adds scheduling contexts to seL4, which represent CPU time. Scheduling contexts are separate to threads (although threads required one to run) and can be passed around over IPC.
- Scheduling contexts allow developers to create periodic threads, temporally isolation threads and have variable timeslices for round robin threads.
For more details, please see the manual. Most of the updates are in the threads chapter.
API Changes
seL4_TCB_Configure
arguments changed (domain removed, scheduling context cap and max priority added).
API Additions
seL4_CapSchedControl
- initial cap for control of CPU timeseL4_SchedContextObject
- new object for that allows threads access to CPU timeseL4_SchedContextBits
- size in bits of a scheduling context objectseL4_NBSendRecv
- new system call which allows once kernel invocation to perform a non-blocking send on one capability, and wait on another.seL4_NBSendRecvWithMRs
- uses above new system call without touching the IPC buffer, passing only data in registersseL4_Time
- type for specifying temporal units to the kernelseL4_TCB_SetMaxPriority
- set the max priority for a tcb, threads can only start / set priorities threads up to and including their max priorityseL4_Prio_t
- type for priority and max priority, used inTCB_Configure
seL4_CNode_SaveTCBCaller
- save the reply cap of the target tcb. This allows another thread to reply on behalf of the owner of the reply cap.seL4_SchedControl_Configure
- invokes the scheduling control cap to populate a scheduling context with parametersseL4_SchedContext_Yield
- end the timeslice of the thread bound to the sched context invoked.seL4_SchedContext_BindTCB
- bind a tcb to a scheduling context, if the TCB is runnable and scheduling context has budget, this will start the tcb runningseL4_SchedContext_UnbindTCB
- remove binding of a scheduling context from a tcb, tcb will no longer run but state will be preservedseL4_CapInitThreadSC
- capability to the initial threads scheduling contextseL4_CapSchedControl
- scheduling control capability, which is given to the root threadseL4_SchedContext_BindNotification
- Bind a notification to a scheduling context. Passive threads waiting on this notification will borrow the scheduling context.seL4_SchedContext_UnbindNotification
- unbind the notification.
API deletions
seL4_Yield
(replaced byseL4_SchedContext_Yield
)seL4_DomainSet
- Domain scheduler removed.
Library & test compatability
The ‘rt’ branch of seL4_libs
has been adapted to the rt branch of seL4,
and the rt branch of sel4test has been ported to the seL4_rt-dev-0.0.1
kernel, along with many more tests written suited to the rt kernel. To
run it, checkout the default.xml
manifest on the rt branch of
sel4test-manifest.
The rt branch is in no way compatible with the master branch of seL4.
More details See the 0.0.1-rt-dev
manual included in the release.