82536: catch null blocks from qbread
[akaros.git] / Documentation / channels.txt
1 Channels
2 This summarizes brainstorming ideas around different types of channels, and 
3 will eventually contain the design of different types of channels. 
4
5 Protection and semantics of the message
6 - Immutability of messages after sending
7         - writes allowed (full trust)
8         - read only
9         - hand-off (enforce through PL or pagetable?)
10 - Support for a twoway channel
11         - just two one-way channels
12
13 - variability of the size in the channel
14         - Request and Response size are different, so maybe we should handle them differently?
15         Constant size: embed in the ring buffer? 
16         Variable size: Splitting request and data (fixed size ring buffer with pointers into a data page)
17 - size of the msg
18         - large -> remapping
19         - small -> in buffer/ copy semantics
20
21 - Ack required for one way channel?
22
23 - Kernel one of the end point? syscall/sysevent
24         - diff trust model etc
25
26 - Access control and Naming
27         - related but distinct
28         - Xenstore like/ hierarchical namespace
29         - single entity knowing all channels? or managed by individual partitions?
30         - create a channel to a service, what is the interface for that?
31
32         Access control: 
33         - check at load time
34         - Singularity style manifests for diff. applications
35
36 - Multi-producer / Multi-consumer
37         - Trust between the producers and trust between consumers
38         - typically no trust between address spaces/ partitions, and full trust within?
39
40         - per core channel vs. per address space channel
41
42 - blocking semantics (block, fail, retry)
43 - what to do when the queue is full? admission policy for channels?
44
45
46