Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification...
Transcript of Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification...
![Page 1: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/1.jpg)
Developing aMultiserver Operating System
Jakub JermářFebruary 3, 2010
UINX.CZ
![Page 2: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/2.jpg)
What is a Multiserver OS?
![Page 3: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/3.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...
![Page 4: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/4.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...● ...multiserver
![Page 5: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/5.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...● ...multiserver
– composed of multiple server tasks
![Page 6: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/6.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...● ...multiserver
– composed of multiple server tasks
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
![Page 7: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/7.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...● ...multiserver
– composed of multiple server tasks
● not every microkernel-based OS is multiserver
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
![Page 8: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/8.jpg)
What is a Multiserver OS?● microkernel-based OS,
which is...● ...multiserver
– composed of multiple server tasks
● not every microkernel-based OS is multiserver
● not every OS is microkernel-based
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
![Page 9: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/9.jpg)
OS Classification by Architecture
![Page 10: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/10.jpg)
OS Classification by Architecture
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
![Page 11: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/11.jpg)
OS Classification by Architecture
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
![Page 12: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/12.jpg)
OS Classification by Architecture
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
kernel
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 13: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/13.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
kernel
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 14: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/14.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
kernel
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 15: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/15.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 16: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/16.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
systemtask
apptask
apptask
apptask
apptask
apptask
apptask
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 17: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/17.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 18: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/18.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
apptask
microkernel
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 19: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/19.jpg)
The Multiserver Advantage
microkernel
servertask
servertask
servertask
servertask
apptask
apptask
apptask
apptask
apptask
microkernel
multiserver-microkernel
microkernel with single system task
monolithic kernel
![Page 20: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/20.jpg)
Pros and Cons Overview
![Page 21: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/21.jpg)
Pros and Cons OverviewPros● Improved robustness
and fault isolation● Clean interface
between servers● Simpler components● Flexibility in
connecting components
![Page 22: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/22.jpg)
Pros and Cons OverviewPros● Improved robustness
and fault isolation● Clean interface
between servers● Simpler components● Flexibility in
connecting components
Cons● Worse performance● No cross-layer
optimizations
![Page 23: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/23.jpg)
Multiserver-Microkernel Examples
![Page 24: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/24.jpg)
Multiserver-Microkernel Examples
Hurdhttp://hurd.gnu.org
![Page 25: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/25.jpg)
Multiserver-Microkernel Examples
Hurdhttp://hurd.gnu.org
MINIX 3http://minix3.org
![Page 26: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/26.jpg)
Multiserver-Microkernel Examples
Hurdhttp://hurd.gnu.org
MINIX 3http://minix3.org
HelenOShttp://helenos.org
![Page 27: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/27.jpg)
Simplified HelenOS Architecture
![Page 28: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/28.jpg)
Simplified HelenOS Architecture
microkernelSPARTAN
![Page 29: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/29.jpg)
Simplified HelenOS Architecture
microkernelSPARTANNaming service
Device mapper
RAM diskdriver
VFS
FATDEVFS
ATA diskdriver
MBR partitiondriver
Task monitor
i8042 driverChar mouse
driver
Framebufferservice
KeyboardService
Console server
Clipboardservice
GUID partitiondriver
file backedblock device
GUID partitiondriver
TMPFS
![Page 30: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/30.jpg)
Simplified HelenOS Architecture
microkernelSPARTANNaming service
Device mapper
RAM diskdriver
VFS
FAT
Network packetserver
DEVFS
ATA diskdriver
MBR partitiondriver
Task monitor
i8042 driverChar mouse
driver
Framebufferservice
KeyboardService
Console server
Clipboardservice
GUID partitiondriver
file backedblock device
GUID partitiondriver
TMPFS
IPICMP ARP
TCP UDP
loopbackdriver
dp8390driver
nildummyEthernet
![Page 31: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/31.jpg)
Simplified HelenOS Architecture
microkernelSPARTANNaming service
Device mapper
RAM diskdriver
VFS
FAT
Network packetserver
DEVFS
ATA diskdriver
MBR partitiondriver
Task monitor
i8042 driverChar mouse
driver
Framebufferservice
KeyboardService
Console server
Clipboardservice
GUID partitiondriver
file backedblock device
GUID partitiondriver
TMPFS
IPICMP ARP
TCP UDP
loopbackdriver
dp8390driver
nildummyEthernet Application
![Page 32: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/32.jpg)
Making it all hold together
![Page 33: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/33.jpg)
Making it all hold together
● The previous slide shows 28 independent server tasks running at one time
![Page 34: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/34.jpg)
Making it all hold together
● The previous slide shows 28 independent server tasks running at one time
● Some servers may even run in multiple instances
![Page 35: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/35.jpg)
Making it all hold together
● The previous slide shows 28 independent server tasks running at one time
● Some servers may even run in multiple instances
● All servers provide some services to other server tasks or applications; most servers require services from other servers
![Page 36: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/36.jpg)
Making it all hold together
● The previous slide shows 28 independent server tasks running at one time
● Some servers may even run in multiple instances
● All servers provide some services to other server tasks or applications; most servers require services from other servers
● Together these server tasks provide the services of the operating system
![Page 37: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/37.jpg)
Making it all hold together (II)
● So how do these tasks communicate?
![Page 38: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/38.jpg)
Making it all hold together (II)
● So how do these tasks communicate?● Both the monolithic OS and the single
system task microkernel OS deal only with one address space
![Page 39: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/39.jpg)
Making it all hold together (II)
● So how do these tasks communicate?● Both the monolithic OS and the single
system task microkernel OS deal only with one address space
● In a multiserver OS, the servers are in separate address spaces
![Page 40: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/40.jpg)
Making it all hold together (II)
● So how do these tasks communicate?● Both the monolithic OS and the single
system task microkernel OS deal only with one address space
● In a multiserver OS, the servers are in separate address spaces
● Message passing provided by the kernel– IPC
![Page 41: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/41.jpg)
HelenOS IPC
![Page 42: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/42.jpg)
HelenOS IPC
● Message passing
![Page 43: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/43.jpg)
HelenOS IPC
● Message passing– unusual metaphor of making phone calls
and leaving a message in the answerbox
![Page 44: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/44.jpg)
HelenOS IPC
● Message passing– unusual metaphor of making phone calls
and leaving a message in the answerbox● Asynchronous
![Page 45: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/45.jpg)
HelenOS IPC
● Message passing– unusual metaphor of making phone calls
and leaving a message in the answerbox● Asynchronous
● Number of communicating tasks can be 1, 2 or N
![Page 46: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/46.jpg)
HelenOS IPC
● Message passing– unusual metaphor of making phone calls
and leaving a message in the answerbox● Asynchronous
● Number of communicating tasks can be 1, 2 or N
– communicating with self
– communicating with a peer
– peer forwards the call to third party
![Page 47: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/47.jpg)
HelenOS IPC (II)
● Message ~ Phone call– simple calls
– combo calls
![Page 48: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/48.jpg)
HelenOS IPC (II)
● Message ~ Phone call– simple calls
– combo calls
● Simple calls– Six 32-bit / 64-bit words of payload
![Page 49: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/49.jpg)
HelenOS IPC (II)
● Message ~ Phone call– simple calls
– combo calls
● Simple calls– Six 32-bit / 64-bit words of payload
● Combo calls– memory sharing
– large data block copying
– tasks negotiate, kernel arbitrates
![Page 50: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/50.jpg)
Life with IPC
![Page 51: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/51.jpg)
Life with IPC
● Restricting interactions between logical components to IPC has some advantages
![Page 52: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/52.jpg)
Life with IPC
● Restricting interactions between logical components to IPC has some advantages
– the components understand a protocol
– the protocol can be verified
– the protocol can have many implementations
![Page 53: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/53.jpg)
Life with IPC
● Restricting interactions between logical components to IPC has some advantages
– the components understand a protocol
– the protocol can be verified
– the protocol can have many implementations
● object oriented design
![Page 54: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/54.jpg)
Life with IPC (II)
● It also brings some problems
![Page 55: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/55.jpg)
Life with IPC (II)
● It also brings some problems– writing IPC by hand is tedious compared to
mere function calls in monolithic designs
![Page 56: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/56.jpg)
Life with IPC (II)
● It also brings some problems– writing IPC by hand is tedious compared to
mere function calls in monolithic designs● could be generated from some high level
architecture description● all HelenOS IPC written by hand so far
![Page 57: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/57.jpg)
Life with IPC (II)
● It also brings some problems– writing IPC by hand is tedious compared to
mere function calls in monolithic designs● could be generated from some high level
architecture description● all HelenOS IPC written by hand so far
– it is difficult to implement non-trivial protocols using asynchronous IPC
![Page 58: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/58.jpg)
Life with IPC (II)
● It also brings some problems– writing IPC by hand is tedious compared to
mere function calls in monolithic designs● could be generated from some high level
architecture description● all HelenOS IPC written by hand so far
– it is difficult to implement non-trivial protocols using asynchronous IPC
● callbacks and event loops● HelenOS has a framework for it
![Page 59: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/59.jpg)
Asynchronous framework
![Page 60: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/60.jpg)
Asynchronous framework
● Makes the asynchronous communication a pleasant experience
– no event loops
– no callbacks
![Page 61: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/61.jpg)
Asynchronous framework
● Makes the asynchronous communication a pleasant experience
– no event loops
– no callbacks
● Introduces fibrils (userspace threads) to already multithreaded tasks
– client's connection handled by a fibril in server
– fibril can send asynchronous messages and wait for them later
![Page 62: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/62.jpg)
Asynchronous framework (II)
thread
task
thread
thread~
~
~
~ ~ ~ ~ ~fibrils
task
thread~
~ ~fibrils
![Page 63: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/63.jpg)
Asynchronous framework (II)
thread
task
thread
thread~
~
~
~ ~ ~ ~ ~fibrils
task
thread~
~ ~fibrils
![Page 64: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/64.jpg)
Using async framework
![Page 65: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/65.jpg)
Using async framework
● Waiting for a request– callid = async_get_call(&call)
![Page 66: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/66.jpg)
Using async framework
● Waiting for a request– callid = async_get_call(&call)
● Answer a request with n return values– ipc_answer_n(callid, retval, ...)
![Page 67: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/67.jpg)
Using async framework
● Waiting for a request– callid = async_get_call(&call)
● Answer a request with n return values– ipc_answer_n(callid, retval, ...)
● Send one message with n arguments– msgid = async_send_n(phone, method, ...,
&answer)
![Page 68: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/68.jpg)
Using async framework
● Waiting for a request– callid = async_get_call(&call)
● Answer a request with n return values– ipc_answer_n(callid, retval, ...)
● Send one message with n arguments– msgid = async_send_n(phone, method, ...,
&answer)
● Wait for an answer to a sent message– async_wait_for(msgid, &retval0)
![Page 69: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/69.jpg)
● Send of n arguments and receive of m return values combined
– retval0 = async_req_n_m(phone, method, ..., …)
Using async framework (II)
![Page 70: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/70.jpg)
● Send of n arguments and receive of m return values combined
– retval0 = async_req_n_m(phone, method, ..., …)
● Sharing memory– async_share_in/out_start(phone, ...)
– async_share_in/out_receive(&callid, ...)
– async_share_in/out_finalize(callid, ...)
Using async framework (II)
![Page 71: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/71.jpg)
● Copying data– async_data_read/write_start(phone, ...)
– async_data_read/write_receive(&callid, ...)
– async_data_read/write_finalize(callid, …)
Using async framework (III)
![Page 72: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/72.jpg)
● Copying data– async_data_read/write_start(phone, ...)
– async_data_read/write_receive(&callid, ...)
– async_data_read/write_finalize(callid, …)
● Fibrils often need to be synchronized– Fibril synchronization primitives
● Mutexes● Readers-Write locks● Condition variables
Using async framework (III)
![Page 73: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/73.jpg)
Code examplereq = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL);rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size);if (rc != EOK) { ...}rc = async_data_write_start(vfs_phone, (void *) opts, str_size(opts));if (rc != EOK) { ...}rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name));if (rc != EOK) { ...}/* Ask VFS whether it likes fs_name. */rc = async_req_0_0(vfs_phone, IPC_M_PING);if (rc != EOK) { ...}async_wait_for(req, &rc);
![Page 74: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/74.jpg)
Code example (II)if (read) res = async_data_read_receive(&callid, NULL);else res = async_data_write_receive(&callid, NULL);if (read) fibril_rwlock_read_lock(&file->node->contents_rwlock);else fibril_rwlock_write_lock(&file->node->contents_rwlock);msg = async_send_3(fs_phone, read ? VFS_OUT_READ : VFS_OUT_WRITE, file->node->dev_handle, file->node->index, file->pos, &answer);ipc_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);async_wait_for(msg, &rc);if (read) fibril_rwlock_read_unlock(&file->node->contents_rwlock);else fibril_rwlock_write_unlock(&file->node->contents_rwlock);ipc_answer_1(rid, rc, bytes);
![Page 75: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/75.jpg)
Code example (II)if (read) res = async_data_read_receive(&callid, NULL);else res = async_data_write_receive(&callid, NULL);if (read) fibril_rwlock_read_lock(&file->node->contents_rwlock);else fibril_rwlock_write_lock(&file->node->contents_rwlock);msg = async_send_3(fs_phone, read ? VFS_OUT_READ : VFS_OUT_WRITE, file->node->dev_handle, file->node->index, file->pos, &answer);ipc_forward_fast(callid, fs_phone, 0, 0, 0, IPC_FF_ROUTE_FROM_ME);async_wait_for(msg, &rc);if (read) fibril_rwlock_read_unlock(&file->node->contents_rwlock);else fibril_rwlock_write_unlock(&file->node->contents_rwlock);ipc_answer_1(rid, rc, bytes);
![Page 76: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/76.jpg)
Code example (II)
libc
VFS
TMPFS
![Page 77: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/77.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
![Page 78: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/78.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
![Page 79: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/79.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
3. VFS_OUT_READ
![Page 80: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/80.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
3. VFS_OUT_READ
4. ipc_forward()
![Page 81: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/81.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
3. VFS_OUT_READ
4. ipc_forward()
5. ipc_answer(EOK)
![Page 82: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/82.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
3. VFS_OUT_READ
4. ipc_forward()
5. ipc_answer(EOK)
6. ipc_answer(EOK)
![Page 83: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/83.jpg)
Code example (II)
libc
VFS
TMPFS
1. VFS_IN_READ
2. IPC_M_DATA_READ
3. VFS_OUT_READ
4. ipc_forward()
5. ipc_answer(EOK)
6. ipc_answer(EOK)7. ipc_answer(EOK)
![Page 84: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/84.jpg)
Demo
![Page 85: Developing a Multiserver Operating System - helenos.org is a Multiserver OS? ... OS Classification by Architecture microkernel server task server task ... – async_share_in/out_start(phone,](https://reader034.fdocuments.net/reader034/viewer/2022051406/5aa480e17f8b9a1d728bf749/html5/thumbnails/85.jpg)
Questions?