L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource...
Transcript of L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource...
![Page 1: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/1.jpg)
L4 Programming Introduction
![Page 2: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/2.jpg)
2COMP9242 07s2
Fundamental Concepts
• Address Spaces– Unit of protection, resource
management.
• Threads– Execution abstraction and
provide unique identifiers.
• Time– Actual abstraction varies
between API versions of L4.
• Communication: IPC
– Synchronous
– Identification: thread ids
• AS construction: mapping
– Flexpages
• Architecture independent
page abstraction
![Page 3: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/3.jpg)
3COMP9242 07s2
L4 System Calls
• KernelInterface
• ThreadControl
• ExchangeRegisters
• IPC
• ThreadSwitch
• Schedule
• MapControl
• SpaceControl
• ProcessorControl
• CacheControl
• 10 System Calls
– N2 API – other API version
vary
• 6-8 Kernel defined
protocols
![Page 4: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/4.jpg)
4COMP9242 07s2
Root Task
• First task started at boot time
• Can perform privileged system calls
• Controls access to resources managed by
privileged systems calls
– ThreadControl, SpaceControl, ProcessorControl, MemoryControl
– Thread allocation, memory attributes, processor
modes, etc.
![Page 5: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/5.jpg)
5COMP9242 07s2
Kernel Information Page
• Kernel memory object located in the address
space of a task.
– Placed on address space creation
• Location is dictated by SpaceControl system call
• Contains information about kernel and hardware
– Page sizes supported
– API version
– Physical memory layout.
– Syscall Addresses
![Page 6: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/6.jpg)
6COMP9242 07s2
![Page 7: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/7.jpg)
7COMP9242 07s2
KernelInterface()
• System call provided to locate the kernel
information page
• In ‘C’ apivoid * L4_KernelInterface (L4_Word_t *ApiVersion,
L4_Word_t *ApiFlags,
L4_Word_t *KernelId)
![Page 8: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/8.jpg)
8COMP9242 07s2
Traditional Thread
• Abstraction and unit of
execution
• Consists of
– Registers
• Current variables
• Status
– Instruction Pointer
• Next instruction to execute
– Stack
• Execution history of yet
unreturned procedures
• One stack frame per
procedure invocation
Code
Data
Thread
Execution
Path
Stack
![Page 9: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/9.jpg)
9COMP9242 07s2
L4 thread = trad. thread +
• A set of virtual register
• A priority and a timeslice
• A unique thread identifier
• An address space
• L4 provides a fixed overall number of threads in the system– Root task responsible for
creating/deleting threads and assigning them to address spaces.
– System, User and “Hardware” threads
Code
Data
Thread
Execution
Path
Stack
![Page 10: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/10.jpg)
10COMP9242 07s2
Virtual Registers
• Per-thread “registers” defined by the microkernel
• Are realised via real machine registers or via memory locations– Realisation depended on architecture and ABI
• Two basic types (was three)– Thread Control Registers (TCRs)
• Used to share information about threads between the kernel and user level
– Message Registers (MRs)
• Used to send messages between threads. Contains the message (or description of it, e.g. region of memory)
– Buffer Registers (BRs)
• Used to specify where messages (other than MRs themselves) are received
![Page 11: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/11.jpg)
11COMP9242 07s2
Thread Control Blocks (TCBs)
• State of a thread is stored in it’s TCB
• Some sensitive state can only be modified via a controlled interface (system calls)
– e.g. address space associated with the thread
– e.g. kernel stack pointer
– sensitive state stored in Kernel TCB (KTCB)
• Some state can be freely visible and modifiable by user-level applications without compromising the system
– kept in user-level TCB (UTCB)
– Include virtual registers not bound to real register
– must only be modified via the provided library function!
• No consistency guarantees otherwise
• Library function scope limited to current thread
– Many fields only modified as a side effect of some operations (IPC)
![Page 12: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/12.jpg)
12COMP9242 07s2
KTCBs and UTCBs
Code
Data
Stack
Code
Data
Stack
Traditional
TCB
Kernel
TCB
User-level
TCB
Efficient and secure
access to state
traditionally kept in an
in-kernel TCB
![Page 13: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/13.jpg)
13COMP9242 07s2
User-Level TCB (ARM)
![Page 14: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/14.jpg)
14COMP9242 07s2
UTCB Programming
• Only modified via provided programming
interface
– Don’t access it directly
• You can mostly ignore its contents
– Most stuff is set/read in the context of other
actions (e.g. IPC)
– Not needed for project
• E.g. processor number
![Page 15: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/15.jpg)
15COMP9242 07s2
Thread Identifiers• Global Identifiers
– Identify a thread uniquely within the system
– Defined by the root task at thread creation• according to some policy
• Note: version[5..0] != 0
• Local Identifiers– Identify a thread within an
address space• Only unique and useable within an address space
• Used for some optimisations
• Typically the address of the thread’s UTCB.
• Note: V4 local thread IDs removed
Thread No (18) Version (14
Interrupt No (32) 1 (32)
Global Thread Id
Global Interrupt Id
Local Id/64 (58) 000000
Local Thread Id
![Page 16: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/16.jpg)
16COMP9242 07s2
ThreadControl()• Create, destroy, and modify threads
• Determines thread attributes:– Global thread identifier
– address space
– The thread permitted to control scheduling parameters• This in known as target threads “scheduler”
• Note: the “scheduler” does not perform CPU scheduling
– The page fault handler “pager”
– Location of the UTCB within the address spaces allotted UTCB area (See SpaceControl later)• Note: ARM, the UTCB address is defined by the kernel, not ThreadControl()
![Page 17: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/17.jpg)
17COMP9242 07s2
ThreadControl()
• Threads can be created active or inactive.– Thread is active iff it has a pager
– Create of inactive threads is used to• Create and manipulate new address spaces
• Allocate new threads to an existing address spaces
– Inactive threads can be activated in one of two ways• by privileged thread using ThreadControl()• By a local thread (same address space) using ExchangeRegisters()
L4_Word_t L4_ThreadControl (L4_ThreadId_t dest,L4_ThreadId_t SpaceSpecifier,L4_ThreadId_t Scheduler,L4_ThreadId_t Pager,void * UtcbLocation)
ARM: utcb must be zero!
![Page 18: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/18.jpg)
18COMP9242 07s2
Task
• L4 does not define the concept of a “task”
• We use it informally to mean:– An address space
• UTCB area
• Kernel interface page
• Redirector
– Set of threads inside that address space
• Global thread ID
• UTCB location
• IP, SP
• Pager
• Scheduler
• Exception handler
– Code, data, stack(s) mapped into address space
![Page 19: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/19.jpg)
19COMP9242 07s2
Steps in Creating a New “Task”
1. Create an inactive thread in a new address space (AS)
• An AS is referred to via the ID of one of it’s threads
L4_ThreadControl (task, /* new tid */
task, /* new space identifier */
me, /* scheduler of new thread */ L4_nilthread, /* pager = nil, inactive,
(void *) -1); /* NOP Utcb location */
…creates a new thread in an otherwise empty address space
![Page 20: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/20.jpg)
20COMP9242 07s2
Steps in Creating a New “Task”
2. Define location of KIP and UTCB area in new
address space
L4_SpaceControl (task, /* new TID */
0, /* control */
kip_area, /* where KIP is mapped */
utcb_area, /* location of UTCB array *.
L4_anythread, /* no redirector */
&control); /* leave alone */
![Page 21: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/21.jpg)
21COMP9242 07s2
Steps in Creating a New “Task”
3. Specify the utcb location and assign a pager to
the new thread to activate it. L4_ThreadControl (task, task, me,
pager, /* new pager */
(void *) utcb_base); /* utcb location */
This results in the thread immediately waiting for an IPC containing the
IP and SP of the new thread.
![Page 22: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/22.jpg)
22COMP9242 07s2
Steps in Creating a New “Task”
4. Send an IPC to the new thread with the
IP and SP in the first two words of the
message.
This results in the thread starting at the received IP
with the SP set as received.
![Page 23: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/23.jpg)
23COMP9242 07s2
Adding Threads To a Task• Use ThreadControl() to assign new threads
to AS.L4_ThreadControl (newtid, /* new thread id */
ExistingId, /* address space identifier */
me, /* scheduler of new thread */
pager ,
(void *) utcb_base);
• Can also create new thread inactive
– Task can then manage new threads itself
– …using ExchangeRegisters()
![Page 24: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/24.jpg)
24COMP9242 07s2
Practical Considerations
• Above sequence for creating tasks and threads is cumbersome– Price paid for leaving policy out of kernel
– Any shortcuts imply policy
• A system built on top of L4 will inherently define policies– Can define and implement library interface for task and thread
creation
– Incorporate system policy
– See sos_task_new() for an example
• Actual apps would not use raw L4 system calls, but– Use libraries
– Use IDL compilers
![Page 25: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/25.jpg)
25COMP9242 07s2
Manipulating threads within an
Address Space• So far can
– Create a new address space with a single
thread
– Assign new threads to an existing address
space
• ExchangeRegisters
– Used to activate or modify an existing thread
within an address space.
![Page 26: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/26.jpg)
26COMP9242 07s2
ExchangeRegisters
Code
Data
Thread
Execution
Path
Stack
Thread ID
Instr. Ptr
Stack Ptr
Pager
UserHandle
Old Instr. Ptr
Old Stack Ptr
Old Pager
Old User Handle
![Page 27: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/27.jpg)
27COMP9242 07s2
ExchangeRegisters()
L4_ThreadId_t L4_ExchangeRegisters (L4_ThreadId_t dest,
L4_Word_t control,
L4_Word_t sp,
L4_Word_t ip,
L4_Word_t flags,
L4_Word_t UserDefHandle,
L4_ThreadId_t pager,
L4_Word_t *old_control,
L4_Word_t *old_sp,
L4_Word_t *old_ip,
L4_Word_t *old_flags,
L4_Word_t *old_UserDefHandle,
L4_ThreadId_t *old_pager)
![Page 28: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/28.jpg)
28COMP9242 07s2
ExchangeRegisters()
• CPSR bits affected by flags
– N = negative
– Z = zero
– C = carry
– V = overflow
![Page 29: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/29.jpg)
29COMP9242 07s2
Threads• Note the microkernel only
manages (preserves) the user-level IP and SP – (and registers if preempted)
• The following is managed by user-level applications (This means you)– User stack location,
allocation, size, deallocation
– Thread ID allocation, deallocation
– Entry point
– UTCB slot allocation
• KIP specifies UTCB requirements
Code
Data
Thread
Execution
Path
Stack
![Page 30: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/30.jpg)
30COMP9242 07s2
Be CAREFUL!!!!!
• Stack corruption is a
common problem
• Stack corruption is
very difficult to
– diagnose
– debug
Code
Data
Thread
Execution
Path
Stack
?????
![Page 31: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/31.jpg)
Communication
![Page 32: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/32.jpg)
32COMP9242 07s2
IPC Overview
• Single system call that implements synchronous unbuffered IPC– Has a send and receive component
– Either can be omitted
• Receive operation can– specify a specific thread from which to receive (“closed receive”)
– specify willingness to receive from any thread (“open wait”)• can be any thread in system or any local thread (same AS)
• Results in five different logical operations:• Send() send a message to a specified thread
• Receive() “closed” receive from a specific sender
• Wait() “open” receive from any sender
• Call() send and wait for reply– typical client RPC operation
• Reply_and_Wait() send to a specific thread and wait for any new message
– typical server operation
![Page 33: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/33.jpg)
33COMP9242 07s2
Thread Identifiers• Global Identifiers
– Thread IDs
– Interrupt IDs
– Special IDs
• Nil thread
• Any thread
Thread No (32) Version (32)
Interrupt No (32) 1 (32)
0(64)
-1(64)
![Page 34: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/34.jpg)
34COMP9242 07s2
In <l4/types.h>
#define L4_nilthread ((L4_ThreadId_t) { raw : 0UL})
#define L4_anythread ((L4_ThreadId_t) { raw : ~0UL})
#define L4_anylocalthread ((L4_ThreadId_t) { local : { X : {L4_SHUFFLE2(0, ~0UL)}}})
![Page 35: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/35.jpg)
35COMP9242 07s2
IPC Registers
• Message registers– virtual registers
• not necessarily hardware registers
• part of thread state
• on ARM: 6 physical registers, rest in UTCB
– actual number is system-configuration parameter• at least 8, no more than 64
– contents form message• first is message tag, defining message size (etc)
• rest untyped words, not (normally) interpreted by kernel
• kernel protocols define semantics in some cases
• Simple IPC just copies data from sender’s to receiver’s MRs!– this case is highly optimised in the kernel (“fast path”)
– Note: no page faults possible during transfer (registers don’t fault!)
![Page 36: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/36.jpg)
36COMP9242 07s2
Message Register IPC
MR13
M
MR63
MR12
MR9MR10MR11
MR8
MR5MR6MR7
MR4
MR1MR2MR3
MR0
MR13
M
MR63
MR12
MR9MR10MR11
MR8
MR5MR6MR7
MR4
MR1MR2MR3
MR0
Thread A Thread B
Message
transferred
from one
thread’s MRs
to the other
thread’s MRs
Guaranteed to
to not cause
page faults
![Page 37: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/37.jpg)
37COMP9242 07s2
Overview of IPC operations• L4_Ipc system call performs all IPC operations (both
sending and receiving)
• Helper functions for frequent operations (see <l4/ipc.h>)– L4_Send
• Send a message to a thread (blocking)
– L4_Receive
• Receive a message from a specified thread
– L4_Wait
• Receive a message from any sender
– L4_ReplyWait
• Send a response to a thread and wait for the next message
– L4_Call
• Send a message to a particular thread and wait for it to respond(usual RPC operation)
![Page 38: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/38.jpg)
38COMP9242 07s2
MR0
• Specifies message content
• u: number of words in message (excluding MR0)
• p: specifies propagation– allows sending a message on behalf of another thread
– specified by virtual sender in UTCB
– receiver gets from kernel virtual, rather than real sender ID
– restricted for security (essentially allowed for local threads)
• n: specifies asynchronous notification operation (later)
• r: blocking receive– if unset, fail immediately if no pending message
• s: blocking send– if unset, fail immediately if receiver not waiting
• label: user-defined (e.g., opcode)
label(48) srnp(4) t(6) u(6)
![Page 39: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/39.jpg)
39COMP9242 07s2
Example: Sending 4 untyped
words• Only 5 MRs tranferred
– Note: On ARM, 6 MRs are
transferred in CPU registers
• Fast
• The rest (if used) are copied from
and to memory
word 1
MR5
.
..
label 0 0 4
word 2
word 3
word 4Note: u, s, r set implicitly by
L4_MsgAppendWord()
Note: Ideally we would use an IDL
compiler instead of generating
message manually
![Page 40: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/40.jpg)
40COMP9242 07s2
Example IPC code
L4_Msg_t msg;
L4_MsgTag_t tag;
L4_MsgClear(&msg);
L4_MsgAppendWord(&msg, word1);
L4_MsgAppendWord(&msg, word2);
L4_MsgAppendWord(&msg, word3);
L4_MsgAppendWord(&msg, word4);
L4_MsgLoad(&msg);
tag = L4_Send(tid);
![Page 41: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/41.jpg)
41COMP9242 07s2
IPC result MR0
• MsgTag [MR0] • u untyped words received (u = 0, send only IPC)
• t typed words sent/received (t = 0, send only IPC)
– Flags EXrp– E: error occurred (send or receive), see ErrorCode TCR for details
– X: received cross processor IPC (ignore)
– r: received redirected IPC (later)
– p: received propagated IPC (check ActualSender in UTCB)
label(48) flags(4) t(6) u(6)
![Page 42: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/42.jpg)
42COMP9242 07s2
IPC
– to / from
– FromSpecifier
– MR0
![Page 43: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/43.jpg)
43COMP9242 07s2
IPC
– to / from
– FromSpecifier
– MR0
• Send
me
dest
dest
nilthread
![Page 44: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/44.jpg)
44COMP9242 07s2
IPC
• Receivefrom dest
me
dest
– to / from
– FromSpecifier
– Timeouts
– MR0
nilthread
dest
![Page 45: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/45.jpg)
45COMP9242 07s2
– to / from
– FromSpecifier
– MR0
nilthread
anythread
IPC
• WaitReceive from anyone
me
![Page 46: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/46.jpg)
46COMP9242 07s2
IPC
• Call
me
dest
– to / from
– FromSpecifier
– MR0
dest
dest
![Page 47: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/47.jpg)
47COMP9242 07s2
IPC
• ReplyWait
me
dest
next
– to / from
– FromSpecifier
– MR0
dest
anythread
![Page 48: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/48.jpg)
48COMP9242 07s2
Obsolete IPC features
• Currently, StringItems are not supported on the MIPS-64 and ARM version of L4Ka::Pistachio
• Alternatives – Break long messages into many short messages
– Share memory
• Map and Grant “typed” items in IPC not supported – used to send page mapping via IPC.
– use MapControl() system call instead
• Timeout on IPC– limit blocking time
– limited use in practice
– replace by send/receive block bits (s,r).
![Page 49: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/49.jpg)
49COMP9242 07s2
INTR
= ipc
Drivers at User Level
User
DriverDevice
• IO ports: part of the user address space
• interrupts: messages from “hardware”threads
• Acknowledge hardware interrupt via replying to interrupt message
![Page 50: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/50.jpg)
50COMP9242 07s2
INTR
= ipc
Interrupts
User
DriverDevice
• Interrupts: messages from “hardware” threads
• Acknowledge hardware interrupt via replying to interrupt message
The interrupt message
is sent to the hardware
thread’s pager
![Page 51: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/51.jpg)
51COMP9242 07s2
Interrupt Handlers
• Typical setup: interrupt handler is bottom-half device driver
• Interrupt handling:1. interrupt is triggered, hardware disables interrupt
and invokes kernel
2. kernel masks interrupt, enables interrupts and sends message to handler
3. handler receives message, identifies interrupt cause, replies to kernel
4. kernel acknowledges interrupt
5. handler queues request to top-half driver, sends notification to top half, waits for next interrupt
![Page 52: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/52.jpg)
52COMP9242 07s2
Interrupt Association
• Association is done via the privileged thread (root task) using ThreadControl.
• To associate a thread to an interrupt
– Set the pager of the hardware thread ID to the thread
ID of the interrupt handler
• To disassociate the thread from an interrupt
– Set the pager of the hardware thread ID to the
hardware thread ID itself
![Page 53: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/53.jpg)
THREADSWITCH()
• Forfeits the caller’s remaining time slice
COMP9442 06/S2 L4 PROGRAMMING 32
![Page 54: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/54.jpg)
THREADSWITCH()
• Forfeits the caller’s remaining time slice
– Can donate remaining time slice to specific thread➜ that tread will execute to the end of the time slice on the
donor’s priority
COMP9442 06/S2 L4 PROGRAMMING 32-A
![Page 55: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/55.jpg)
THREADSWITCH()
• Forfeits the caller’s remaining time slice
– Can donate remaining time slice to specific thread➜ that tread will execute to the end of the time slice on the
donor’s priority
2✗ Note: This is what the manual says.
In the present implementation, the donation is only valid to
the next timer tick (10ms on ARM)!
COMP9442 06/S2 L4 PROGRAMMING 32-B
![Page 56: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/56.jpg)
THREADSWITCH()
• Forfeits the caller’s remaining time slice
– Can donate remaining time slice to specific thread➜ that tread will execute to the end of the time slice on the
donor’s priority
2✗ Note: This is what the manual says.
In the present implementation, the donation is only valid to
the next timer tick (10ms on ARM)!
– If no recipient specified (or recipient is not runnable)➜ normal “yield” operation
➜ kernel invokes scheduler
➜ caller might receive a new time slice immediately
COMP9442 06/S2 L4 PROGRAMMING 32-C
![Page 57: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/57.jpg)
THREADSWITCH()
• Forfeits the caller’s remaining time slice
– Can donate remaining time slice to specific thread➜ that tread will execute to the end of the time slice on the
donor’s priority
2✗ Note: This is what the manual says.
In the present implementation, the donation is only valid to
the next timer tick (10ms on ARM)!
– If no recipient specified (or recipient is not runnable)➜ normal “yield” operation
➜ kernel invokes scheduler
➜ caller might receive a new time slice immediately
• Directed donation can be used for➜ explicit scheduling of threads
➜ implementing wait-free locks
➜ ...
COMP9442 06/S2 L4 PROGRAMMING 32-D
![Page 58: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/58.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
➜ Schedule
• MapControl
• SpaceControl
• ProcessorControl
• CacheControl
COMP9442 06/S2 L4 PROGRAMMING 33
![Page 59: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/59.jpg)
L4 SCHEDULING
• L4 uses 256 hard priorities [0–255]
• Within each priority schedules threads round-robin
COMP9442 06/S2 L4 PROGRAMMING 34
![Page 60: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/60.jpg)
L4 SCHEDULING
• L4 uses 256 hard priorities [0–255]
• Within each priority schedules threads round-robin
• Scheduler is invoked when➜ the current thread is preempted
➜ the current thread yields
COMP9442 06/S2 L4 PROGRAMMING 34-A
![Page 61: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/61.jpg)
L4 SCHEDULING
• L4 uses 256 hard priorities [0–255]
• Within each priority schedules threads round-robin
• Scheduler is invoked when➜ the current thread is preempted
➜ the current thread yields
• The scheduler is not normally invoked when a thread blocks:➜ if destination thread is runnable, the kernel will switch to it
➜ called direct process switch
COMP9442 06/S2 L4 PROGRAMMING 34-B
![Page 62: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/62.jpg)
L4 SCHEDULING
• L4 uses 256 hard priorities [0–255]
• Within each priority schedules threads round-robin
• Scheduler is invoked when➜ the current thread is preempted
➜ the current thread yields
• The scheduler is not normally invoked when a thread blocks:➜ if destination thread is runnable, the kernel will switch to it
➜ called direct process switch
➜ scheduler only invoked if destination is blocked too
➜ if both threads are runnable after IPC, the higher-prio one will run2✗ presently implementation doesn’t always observe prios correctly!
COMP9442 06/S2 L4 PROGRAMMING 34-C
![Page 63: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/63.jpg)
L4 SCHEDULING
• L4 uses 256 hard priorities [0–255]
• Within each priority schedules threads round-robin
• Scheduler is invoked when➜ the current thread is preempted
➜ the current thread yields
• The scheduler is not normally invoked when a thread blocks:➜ if destination thread is runnable, the kernel will switch to it
➜ called direct process switch
➜ scheduler only invoked if destination is blocked too
➜ if both threads are runnable after IPC, the higher-prio one will run2✗ presently implementation doesn’t always observe prios correctly!
• This makes (expensive) scheduler invocation infrequent
COMP9442 06/S2 L4 PROGRAMMING 34-D
![Page 64: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/64.jpg)
TOTAL QUANTUM AND PREEMPTION IPC
• Each thread has:➜ a priority, determines whether it is scheduled
➜ a time slice length, determines, once scheduled, when it will
be preempted.
➜ a total quantum
COMP9442 06/S2 L4 PROGRAMMING 35
![Page 65: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/65.jpg)
TOTAL QUANTUM AND PREEMPTION IPC
• Each thread has:➜ a priority, determines whether it is scheduled
➜ a time slice length, determines, once scheduled, when it will
be preempted.
➜ a total quantum
• When scheduled, the thread gets a new time slice➜ the time slice is subtracted from the thread’s total quantum
➜ when total quantum is exhausted, the thread’s scheduler is notified
COMP9442 06/S2 L4 PROGRAMMING 35-A
![Page 66: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/66.jpg)
TOTAL QUANTUM AND PREEMPTION IPC
• Each thread has:➜ a priority, determines whether it is scheduled
➜ a time slice length, determines, once scheduled, when it will
be preempted.
➜ a total quantum
• When scheduled, the thread gets a new time slice➜ the time slice is subtracted from the thread’s total quantum
➜ when total quantum is exhausted, the thread’s scheduler is notified
• When the time slice is exhausted, the thread is preempted➜ preemption-control flags in the UTCB can defer preemption
➜ unless there is a runnable thread of higher than the
sensitive priority
➜ for up to a specified maximum delay➜ exceeding this causes an IPC to the exception handler
➜ can be used to implement lock-free synchronisation
COMP9442 06/S2 L4 PROGRAMMING 35-B
![Page 67: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/67.jpg)
SCHEDULE()
• The S hedule() syscall does not invoke a scheduler!
• Nor does it actually schedule any threads.
S hedule() ThreadControl()
COMP9442 06/S2 L4 PROGRAMMING 36
![Page 68: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/68.jpg)
SCHEDULE()
• The S hedule() syscall does not invoke a scheduler!
• Nor does it actually schedule any threads.
• S hedule() manipulates a thread’s scheduling parameters:
– The caller must be registered as the destination’s scheduler➜ set via ThreadControl()
COMP9442 06/S2 L4 PROGRAMMING 36-A
![Page 69: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/69.jpg)
SCHEDULE()
• The S hedule() syscall does not invoke a scheduler!
• Nor does it actually schedule any threads.
• S hedule() manipulates a thread’s scheduling parameters:
– The caller must be registered as the destination’s scheduler➜ set via ThreadControl()
– can change➜ priority
➜ time slice length
➜ total quantum
➜ sensitive priority
➜ processor number➜ only relevant for SMP
➜ kernel will not transparently migrate threads between CPUs
COMP9442 06/S2 L4 PROGRAMMING 36-B
![Page 70: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/70.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
✔ Schedule
➜ MapControl
• SpaceControl
• ProcessorControl
• CacheControl
COMP9442 06/S2 L4 PROGRAMMING 37
![Page 71: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/71.jpg)
ADDRESS SPACES
• Address spaces are created empty
• Need to be explicitly populated with page mappings➜ kernel does not map pages automatically (except KIP, UTCB)
COMP9442 06/S2 L4 PROGRAMMING 38
![Page 72: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/72.jpg)
ADDRESS SPACES
• Address spaces are created empty
• Need to be explicitly populated with page mappings➜ kernel does not map pages automatically (except KIP, UTCB)
• Normally AS populated by pager on demand➜ thread runs, faults on unmapped pages, pager creates mapping
• Can also be done pro-actively➜ Eg OS server can pre-map contents of executable
COMP9442 06/S2 L4 PROGRAMMING 38-A
![Page 73: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/73.jpg)
ADDRESS SPACES
• Address spaces are created empty
• Need to be explicitly populated with page mappings➜ kernel does not map pages automatically (except KIP, UTCB)
• Normally AS populated by pager on demand➜ thread runs, faults on unmapped pages, pager creates mapping
• Can also be done pro-actively➜ Eg OS server can pre-map contents of executable
• Address space is a second-class abstraction➜ there are no unique identifiers for address spaces
➜ an AS is identified via one of its threads (syscall TID argument)
COMP9442 06/S2 L4 PROGRAMMING 38-B
![Page 74: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/74.jpg)
MAPCONTROL()
• Creates (maps) or destroys (unmaps) page mappings
• Privileged system call (only available to root task)
L4_Word_t L4_MapControl (L4_ThreadId_t dest,L4_Word_t ontrol)
COMP9442 06/S2 L4 PROGRAMMING 39
![Page 75: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/75.jpg)
MAPCONTROL()
• Creates (maps) or destroys (unmaps) page mappings
• Privileged system call (only available to root task)L4_Word_t L4_MapControl (L4_ThreadId_t dest,L4_Word_t ontrol)dest: denominates target address space
control: determines operation of syscall
m r 0 (24) n (6)
r: read operation — returns (pre-syscall) mapping info➜ eg reference bits where hardware-maintained (x86)
m: modify operation — changes mappings
n: number of map items used to describe mappings➜ map items are contained in message registers MR0 · · ·MR2n−1
COMP9442 06/S2 L4 PROGRAMMING 39-A
![Page 76: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/76.jpg)
SPECIFYING MAPPINGS: FPAGES
• A flexpage or fpage is used to specify mapping objects
– generalisation of a hardware page
– similar properties:➜ size is power-of-two multiple of base hardware page size
➜ aligned to its size
– fpage of size 2s is specified as
base/1024 s (6) ∼ (4)
– special fpages:
0 0x3f ∼ (4)
full AS
0 0 (6) 0 (4)
nil page
– On ARM, s ≥ 12
COMP9442 06/S2 L4 PROGRAMMING 40
![Page 77: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/77.jpg)
MAP ITEM
• Specifies a mapping to be created in destination AS
fpage (28) 0rwx
phys adr/1024 (26) attr (6)
➜ fpage: specifies where mapping is to occur in destination AS
➜ phys adr : base of physical frame(s) to be mapped
➜ attr : memory attributes (eg cached/uncached)
➜ rxw: permissions
COMP9442 06/S2 L4 PROGRAMMING 41
![Page 78: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/78.jpg)
MAP ITEM
• Specifies a mapping to be created in destination AS
fpage (28) 0rwx
phys adr/1024 (26) attr (6)
➜ fpage: specifies where mapping is to occur in destination AS
➜ phys adr : base of physical frame(s) to be mapped➜ Note: shifted 4 bits to support 64MB of physical AS
➜ attr : memory attributes (eg cached/uncached)
➜ rxw: permissions
COMP9442 06/S2 L4 PROGRAMMING 41-A
![Page 79: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/79.jpg)
MAP ITEM
• Specifies a mapping to be created in destination AS
fpage (28) 0rwx
phys adr/1024 (26) attr (6)
➜ fpage: specifies where mapping is to occur in destination AS
➜ phys adr : base of physical frame(s) to be mapped➜ Note: shifted 4 bits to support 64MB of physical AS
➜ attr : memory attributes (eg cached/uncached)
➜ rxw: permissions➜ access rights in destination address space
➜ can be used to change (up/downgrade) rights
(only if mapping is replaced by an otherwise identical one)
➜ removing all rights removes the mapping (unmap operation)
COMP9442 06/S2 L4 PROGRAMMING 41-B
![Page 80: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/80.jpg)
PAGE FAULT HANDLING
• Address-spaces are populated in response to page faults
• Page faults are converted into IPC messages
MapControl()
COMP9442 06/S2 L4 PROGRAMMING 42
![Page 81: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/81.jpg)
PAGE FAULT HANDLING
• Address-spaces are populated in response to page faults
• Page faults are converted into IPC messages:➀ app triggers page fault
MapControl()
PagerApplication
COMP9442 06/S2 L4 PROGRAMMING 42-A
![Page 82: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/82.jpg)
PAGE FAULT HANDLING
• Address-spaces are populated in response to page faults
• Page faults are converted into IPC messages:➀ app triggers page fault
➁ kernel exception handler generates IPC from faulter to pager
MapControl()
PagerApplicationPF msg
COMP9442 06/S2 L4 PROGRAMMING 42-B
![Page 83: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/83.jpg)
PAGE FAULT HANDLING
• Address-spaces are populated in response to page faults
• Page faults are converted into IPC messages:➀ app triggers page fault
➁ kernel exception handler generates IPC from faulter to pager
➂ pager establishes mapping➜ calls MapControl() (if privileged) otherwise asks root task to do it
➃ pager replies to page-fault IPC
➄ kernel intercepts message, discards
➅ kernel restarts faulting thread
PagerApplicationPF msg
null msg
COMP9442 06/S2 L4 PROGRAMMING 42-C
![Page 84: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/84.jpg)
PAGE FAULT MESSAGE
• Format of kernel-generated page fault message
Fault IP MR2
Fault address MR1
-2 0rwx 0 (4) 0 (6) 2 MR0
COMP9442 06/S2 L4 PROGRAMMING 43
![Page 85: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/85.jpg)
PAGE FAULT MESSAGE
• Format of kernel-generated page fault message
Fault IP MR2
Fault address MR1
-2 0rwx 0 (4) 0 (6) 2 MR0
• Eg. page fault at address 0x2002: Kernel sends
Fault IP MR2
0x2002 MR1
-2 0rwx 0 (4) 0 2 MR0
COMP9442 06/S2 L4 PROGRAMMING 43-A
![Page 86: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/86.jpg)
PAGE FAULT MESSAGE
• Format of kernel-generated page fault message
Fault IP MR2
Fault address MR1
-2 0rwx 0 (4) 0 (6) 2 MR0
• Eg. page fault at address 0x2002: Kernel sends
Fault IP MR2
0x2002 MR1
-2 0rwx 0 (4) 0 2 MR0
• Obviously, application can manufacture same message➜ pager cannot tell the difference
➜ not a problem, as application could achieve the same by
forcing a fault
COMP9442 06/S2 L4 PROGRAMMING 43-B
![Page 87: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/87.jpg)
PAGER ACTION
• E.g., pager handles write page fault at 0x2002
– map item for map 4kB page at PA 0xc0000:
0x8 12 0
0x300 0
– note: phys adr must be aligned to fpage size
COMP9442 06/S2 L4 PROGRAMMING 44
![Page 88: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/88.jpg)
PAGER ACTION
• E.g., pager handles write page fault at 0x2002
– map item for map 4kB page at PA 0xc0000:
0x8 12 0
0x300 0
– note: phys adr must be aligned to fpage size
• After establishing mapping, pager replies to page-fault message➜ content of message completely ignored
➜ only servers for synchronisation: informing kernel that faulter
can be restarted
➜ if pager did not establish a suitable mapping, client will trigger
same fault again
COMP9442 06/S2 L4 PROGRAMMING 44-A
![Page 89: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/89.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
✔ Schedule
✔ MapControl
➜ SpaceControl
• ProcessorControl
• CacheControl
COMP9442 06/S2 L4 PROGRAMMING 45
![Page 90: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/90.jpg)
SPACECONTROL()
• Controls layout of new address spaces➜ KIP location (not on ARM)
➜ UTCB area location (not on ARM)
ontrol
COMP9442 06/S2 L4 PROGRAMMING 46
![Page 91: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/91.jpg)
SPACECONTROL()
• Controls layout of new address spaces➜ KIP location (not on ARM)
➜ UTCB area location (not on ARM)
• Controls setting of redirector
– used to limit communication➜ for information flow control
– if set to a valid thread, IPC from the AS can only be sent:➜ locally (within AS)
➜ to the redirector’s address space
– any other message is instead delivered to the redirector
– Note: not heavily tested in present version
ontrol
COMP9442 06/S2 L4 PROGRAMMING 46-A
![Page 92: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/92.jpg)
SPACECONTROL()
• Controls layout of new address spaces➜ KIP location (not on ARM)
➜ UTCB area location (not on ARM)
• Controls setting of redirector
– used to limit communication➜ for information flow control
– if set to a valid thread, IPC from the AS can only be sent:➜ locally (within AS)
➜ to the redirector’s address space
– any other message is instead delivered to the redirector
– Note: not heavily tested in present version➜ your chance to pick up bonus points
ontrol
COMP9442 06/S2 L4 PROGRAMMING 46-B
![Page 93: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/93.jpg)
SPACECONTROL()
• Controls layout of new address spaces➜ KIP location (not on ARM)
➜ UTCB area location (not on ARM)
• Controls setting of redirector
– used to limit communication➜ for information flow control
– if set to a valid thread, IPC from the AS can only be sent:➜ locally (within AS)
➜ to the redirector’s address space
– any other message is instead delivered to the redirector
– Note: not heavily tested in present version➜ your chance to pick up bonus points
• On ARM ontrol used to set PID register (later)
COMP9442 06/S2 L4 PROGRAMMING 46-C
![Page 94: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/94.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
✔ Schedule
• MapControl
• SpaceControl
➜ ProcessorControl
• CacheControl
COMP9442 06/S2 L4 PROGRAMMING 47
![Page 95: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/95.jpg)
PROCESSORCONTROL()
• Sets processor core voltage and frequency (where supported)➜ used for power management
• Privileged system call
COMP9442 06/S2 L4 PROGRAMMING 48
![Page 96: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/96.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
✔ Schedule
✔ MapControl
✔ SpaceControl
✔ ProcessorControl
➜ CacheControl
COMP9442 06/S2 L4 PROGRAMMING 49
![Page 97: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/97.jpg)
CACHECONTROL()
• Used to flush caches or lock cache lines as per arguments➜ target cache (I/D, L1/L2, ...)
➜ kind of operation (flush/lock/unlock)
➜ address range to flush from cache
• Privileged system call➜ sort-of... Some functions can be called from anywhere (Hack!)
COMP9442 06/S2 L4 PROGRAMMING 50
![Page 98: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/98.jpg)
SYSTEM CALLS
✔ KernelInterface
✔ ThreadControl
✔ ExchangeRegisters
✔ IPC
✔ ThreadSwitch
✔ Schedule
✔ MapControl
✔ SpaceControl
✔ ProcessorControl
✔ CacheControl
That’s it!
COMP9442 06/S2 L4 PROGRAMMING 51
![Page 99: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/99.jpg)
L4 PROTOCOLS
✔ Page fault➜ already covered
✔ Thread start➜ already covered
✔ Interrupt➜ already covered
➜ Preemption
• Exception
• Asynchronous notification
COMP9442 06/S2 L4 PROGRAMMING 52
![Page 100: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/100.jpg)
PREEMPTION PROTOCOL
• Each thread has three scheduling attributes:➜ priority
➜ time slice length
➜ total quantum
• Kernel schedules runnable threads according to their priority➜ round-robin between threads of equal prio
S hedule()
COMP9442 06/S2 L4 PROGRAMMING 53
![Page 101: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/101.jpg)
PREEMPTION PROTOCOL
• Each thread has three scheduling attributes:➜ priority
➜ time slice length
➜ total quantum
• Kernel schedules runnable threads according to their priority➜ round-robin between threads of equal prio
• When thread is scheduled➜ it is given fresh time slice
➜ the time slice is deducted from its total quantum
S hedule()
COMP9442 06/S2 L4 PROGRAMMING 53-A
![Page 102: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/102.jpg)
PREEMPTION PROTOCOL
• Each thread has three scheduling attributes:➜ priority
➜ time slice length
➜ total quantum
• Kernel schedules runnable threads according to their priority➜ round-robin between threads of equal prio
• When thread is scheduled➜ it is given fresh time slice
➜ the time slice is deducted from its total quantum
• When total quantum is exhausted, the kernel sends a message
on behalf of the preempted thread to its scheduler➜ scheduler can provide new quantum (using S hedule())
➜ not heavily tested
• Format of preemption message:
-3 0 0 0 0 MR0
COMP9442 06/S2 L4 PROGRAMMING 53-B
![Page 103: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/103.jpg)
L4 PROTOCOLS
✔ Page fault
✔ Thread start
✔ Interrupt
✔ Preemption
➜ Exception
• Asynchronous notification
COMP9442 06/S2 L4 PROGRAMMING 54
![Page 104: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/104.jpg)
EXCEPTION PROTOCOL
• Other exceptions (invalid instruction, division by zero...)
result in a kernel-generated IPC to thread’s exception handler
COMP9442 06/S2 L4 PROGRAMMING 55
![Page 105: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/105.jpg)
EXCEPTION PROTOCOL
• Other exceptions (invalid instruction, division by zero...)
result in a kernel-generated IPC to thread’s exception handler
• Exception IPC
– kernel sends (partial) thread state
exception wordk−1 MRk+1
......
exception word0 MR2
exception IP MR1
label 0 0 0 k MR0
– label:➜ -4: standard exceptions, architecture independent
➜ -5: architecture-specific exception
COMP9442 06/S2 L4 PROGRAMMING 55-A
![Page 106: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/106.jpg)
EXCEPTION PROTOCOL
• Other exceptions (invalid instruction, division by zero...)
result in a kernel-generated IPC to thread’s exception handler
• Exception IPC
– kernel sends (partial) thread state
exception wordk−1 MRk+1
......
exception word0 MR2
exception IP MR1
label 0 0 0 k MR0
– label:➜ -4: standard exceptions, architecture independent
➜ -5: architecture-specific exception
• Exception handler may reply with modified thread state
COMP9442 06/S2 L4 PROGRAMMING 55-B
![Page 107: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/107.jpg)
EXCEPTION HANDLING
• Possible responses of exception handler:
retry: reply with unchanged state➜ possibly after removing cause
➜ possibly changing other parts of state (registers)
continue: reply with IP+=4 (assuming 4-byte instructions)
emulation: compute desired result,
reply with appropriate register value and IP+=4
handler: reply with IP of local exception handler code
to be executed by the thread itself
ignore: will block the thread indefinitely
kill: use Ex hangeRegisters() (if local) or ThreadControl()
to restart or kill thread
COMP9442 06/S2 L4 PROGRAMMING 56
![Page 108: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/108.jpg)
L4 PROTOCOLS
✔ Page fault
✔ Thread start
✔ Interrupt
✔ Preemption
✔ Exception
➜ Asynchronous notification
COMP9442 06/S2 L4 PROGRAMMING 57
![Page 109: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/109.jpg)
ASYNCHRONOUS NOTIFICATION
• Very restricted form of asynchronous IPC:➜ delivered without blocking sender
➜ delivered immediately, directly to receiver’s AS
NotifyBits |=NotifyBits
COMP9442 06/S2 L4 PROGRAMMING 58
![Page 110: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/110.jpg)
ASYNCHRONOUS NOTIFICATION
• Very restricted form of asynchronous IPC:➜ delivered without blocking sender
➜ delivered immediately, directly to receiver’s AS
➜ message consists of a bit mask OR-ed to receiver’s bitfield
receiver.NotifyBits |= sender.MR1
NotifyBits
COMP9442 06/S2 L4 PROGRAMMING 58-A
![Page 111: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/111.jpg)
ASYNCHRONOUS NOTIFICATION
• Very restricted form of asynchronous IPC:➜ delivered without blocking sender
➜ delivered immediately, directly to receiver’s AS
➜ message consists of a bit mask OR-ed to receiver’s bitfield
receiver.NotifyBits |= sender.MR1
➜ no effect if receiver’s bits already set
➜ receiver can prevent asynchronous notification
by setting a flag in its UTCB
NotifyBits
COMP9442 06/S2 L4 PROGRAMMING 58-B
![Page 112: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/112.jpg)
ASYNCHRONOUS NOTIFICATION
• Very restricted form of asynchronous IPC:➜ delivered without blocking sender
➜ delivered immediately, directly to receiver’s AS
➜ message consists of a bit mask OR-ed to receiver’s bitfield
receiver.NotifyBits |= sender.MR1
➜ no effect if receiver’s bits already set
➜ receiver can prevent asynchronous notification
by setting a flag in its UTCB
• Two ways to receive asynchronous notifications:
syncronously by a form of blocking IPC wait➜ receiver specifies mask of notification bits to wait for
➜ on notification, kernel manufactures a message in a defined format
asynchronously by checking NotifyBits in UTCB➜ but remember it’s asynchronous and can change at any time!
COMP9442 06/S2 L4 PROGRAMMING 58-C
![Page 113: L4 Programming Introductioncs9242/07/lectures/02-l4.pdf · – Unit of protection, resource management. • Threads – Execution abstraction and provide unique identifiers. ... COMP9242](https://reader034.fdocuments.us/reader034/viewer/2022042406/5f2071303b969403f309897c/html5/thumbnails/113.jpg)
L4 PROTOCOLS
✔ Page fault
✔ Thread start
✔ Interrupt
✔ Preemption
✔ Exception
✔ Asynchronous notification
COMP9442 06/S2 L4 PROGRAMMING 59