HelenOS in the Year of the Pig HelenOS in the Year of the Pig
Jakub Jermář
j a k u b @ j e r m a r . e u
http://www.helenos.org http://www.helenos.org
HelenOS in the Year of the Pig HelenOS in the Year of the Pig - - PowerPoint PPT Presentation
HelenOS in the Year of the Pig HelenOS in the Year of the Pig http://www.helenos.org http://www.helenos.org Jakub Jerm j a k u b @ j e r m a r . e u HelenOS in a nutshell HelenOS in a nutshell Portable microkernel-based
j a k u b @ j e r m a r . e u
http://www.helenos.org http://www.helenos.org
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 2
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 3
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 4
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 5
Task Task Task Task Task Task
Answerbox Answerbox Answerbox Answerbox Phones Answerbox Answerbox Phones Phones ipc_call_async_fast(2, method, arg1, arg2, arg3, ...) ipc_wait_for_call_timeout ipc_wait_for_call_timeout ipc_answer_fast(callid, retval, arg1, arg2, arg3, arg4) ipc_forward_fast(callid, 5, method, arg1, arg2, ...) ipc_wait_for_call_timeout
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 6
Call
non-reusable, fixed-size, kernel allocated/managed
Phone
(unnecessary?) level of indirection between client and server
Answerbox
asynchronous, waitable (still) one-per task
Where should the answer go with >1 answerboxes? How does a server wait for multiple requests? How does a client wait for multiple answers?
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 7
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 8
b = buf_alloc(); ep = ep_create(); buf_send(b, ep); buf_receive(ep, tmp_b); buf_wait(b); buf_finish(tmp_b); buf_free(b); ep_destroy(ep);
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 9
bcl = caplist_create(); b1 = buf_alloc(); b2 = buf_alloc(); ecl = caplist_create(); ep1 = ep_create(ecl); ep2 = ep_create(ecl); buf_send(b1, ep1, bcl); buf_send(b2, ep2, bcl); buf_receive(ecl, tb); buf_wait(bcl); buf_wait(bcl); buf_finish(tb); buf_free(b1); buf_free(b2); caplist_destroy(bcl); ep_destroy(ep1); ep_destroy(ep2); caplist_destroy(ecl);
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 10
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 11
user space kernel space direct call syscall upcall
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 12
client kernel kernel IPC VFS server
user space kernel space direct call syscall upcall
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 13
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 14
Jakub Jermář, FOSDEM 2020, February 2nd HelenOS in the Year of the Pig 15