IPC option Capabilities

Note this is quite different from KeyOS as we  treat memory as the primary citizen and disk as an option. This better matches solid state devices. Hence low level things like blocks the OS and apps do not know about only Directories and Files.

The problem is how to do messaging and capability Invoke ?

1) Capabilities will be sealed objects with internal constructors ( or private and a static internal generate method) 

2) Methods on the Capability are used instead of invoking it ..

3) These methods will do what is required and in most cases will send messages to the appropriate service via a syscall. 

4) In most cases these methods are the API and are Synch

So the problem that remains is we send a Message whats stops it being  used ? 

Does it matter ? 

The invoke on the Capability presents a measure of security , being able to bypass it is not great.  It requires a check for a valid capability . If calls can be restricted to a capability this would not be possible. 

Message as a subclass... ? 

Confused seperate assembly  ?

Capability as only public  constructor of message

This will work. And has some benefits since the message can be sent remotely.

Capability types 

Some are Resource access eg Processor

Null Capability 
Range Capability
Process Capability
SysCtl Capability   	Start, stop system, enter sleep states.
AddressSpace Capability
MemoryPage Capability
EndPoint Capability
Processor Capability
Thread Capability
SharedMemoryRegion Capability
CapabilityRights Capability
Syslog Capability
IO Port Capability
Directory Capability
File Capability
URI Capability         Everything is a URI , file systems etc 

-----------------------------------------------------------------
1 	Window 	

A local mapping window (Chapter 4).
	RO,NX,WK
2 	Background 	

A background mapping window (Chapter 4).
	RO,NX,WK
3 	KeyBits 	

Discloses the bit representation of capabilities.
4 	Discrim 	

Classifies capabilities.
5 	Range 	

Fabricates object capabilities.
6 	Sleep 	

Interface to the kernel interval timer.
7 	IRQ Control 	

Interrupt request line control interface.
8 	Schedule Control 	

Interface to the kernel master scheduling table.
9 	Checkpoint 	

Control capability for the kernel checkpoint mechanism.
10 	ObStore 	

Interface between kernel and object store manager.
11 	Pin Control 	

Permission to pin objects in memory.
12 	Schedule 	

Permission to execute under a particular schedule.
13 	SysCtl 	

Start, stop system, enter sleep states.
14 	KernLog 	

Append text to kernel log.
15 	IOPriv 	

Authority to read/write IO ports.
16 	IrqWait 	

Authority to wait for an arriving interrupt.
17-31 	Reserved 	

Encodings reserved for future use.
32 	Endpoint 	

Control capability for an endpoint.
33 	Page 	

Data page. In general, the size of a page is determined by the underlying hardware page size. Device pages may be any power of two larger than this.
	RO,NX,WK
34 	CapPage 	

Capability page. The size of a capability page is determined by the page size of the underlying hardware page size.
	RO,NX,WK
35 	GPT 	

Guarded Page Table. Used to compose larger address spaces from pages.
	RO,NX,WK,OP
36 	Process 	

Capability that manipulates the kernel process abstraction.
37 	AppNotice 	

Capability that permits posting of non-blocking, application-defined software notices.
38-62 	Reserved 	

Encodings reserved for future use.
63 	Entry 	

Authority to send to the process designated by an Endpoint.