28.08.2015 Views

The Design and Implementation of the Anykernel and Rump Kernels

1F3KDce

1F3KDce

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

170<br />

Host syscall<br />

rump syscall<br />

1. open("/dev/null", O_RDWR) 1. rump_sys_open("/dev/null",<br />

O_RDWR) is called<br />

2. libc executes <strong>the</strong> syscall trap. 2. librumpclient marshalls <strong>the</strong> arguments<br />

<strong>and</strong> sends a“syscall”request<br />

over <strong>the</strong> communication socket.<br />

<strong>the</strong> calling thread is suspended until<br />

<strong>the</strong> system call returns.<br />

3. syscall trap h<strong>and</strong>ler calls<br />

sys_open()<br />

3. rump kernel receives syscall request<br />

<strong>and</strong> uses a thread associated<br />

with <strong>the</strong> process to h<strong>and</strong>le request<br />

4. thread is scheduled, determines<br />

that sys_open() needs to be<br />

called, <strong>and</strong> proceeds to call it.<br />

4. pathname lookup routine calls<br />

copyinstr()<br />

5. pathname lookup routine needs<br />

<strong>the</strong> path string <strong>and</strong> calls<br />

copyinstr() which sends a<br />

copyinstr request to <strong>the</strong> client<br />

6. client receives copyinstr request<br />

<strong>and</strong> responds with string datum<br />

7. kernel server receives a response to<br />

its copyinstr request <strong>and</strong> copies <strong>the</strong><br />

string datum to a local buffer<br />

Table 3.7:<br />

part 1/2.<br />

Step-by-step comparison <strong>of</strong> host <strong>and</strong> rump kernel syscalls,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!