天天看點

seL4微核心學習之四:系統調用

seL4系統調用主要有以下八個:

  1. seL4 Send():

    通過已被命名的cap傳遞消息,然後允許程式繼續,如果調用這個cap的是endpoint,且沒有receiver接收消息,sender将會被阻塞到有receiver接收。Reciver和核心對象不會傳回錯誤。

  2. seL4 NBSend():

    不會阻塞的send,在沒有receiver時,将消息丢棄,Reciver和核心對象不會傳回錯誤。

  3. seL4 Call():

    和seL4_Send()一樣,但是會在消息上附加回複sender的cap,該cap将存在receiver的TCB中一個特殊的slot中。通過cap調用核心服務時,使用seL4_Send()使核心服務可以傳回錯誤代碼或者其他相應。

  4. seL4 Wait() :

    用來通過endpoint接收消息,如果沒有消息可接收,則該線程被阻塞,直到有消息可接收。該系統調用隻能通過endpoint的cap調用,否則會導緻錯誤。

  5. seL4 Reply():

    用來響應seL4_Call(),将消息回複給sender,并将其喚醒。因TCB中僅有一個槽存儲回複cap,是以seL4_Reply()隻能給最近的一個seL4_Call()回複。

  6. seL4 ReplyWait():

    是seL4_Reply()+seL4_Wait()。能用一次核心系統調用同時回複消息,并等待下一條消息。

  7. seL4 Poll():

    将會無阻塞地通過endpoint發送消息。該系統調用隻能被擁有asynchronous endpoint cap的程序調用,負責産生錯誤。

  8. seL4 Yield():

    唯一不需要 Capability的系統調用。會将調用者剩餘的時間片交給同等優先度的可運作線程。如果沒有這樣的線程,則會重新換新調用的線程,即該系統調用無任何作用。

小小的總結:前7個系統調用都是和IPC有關的,而最後一個和排程有關,具體的函數還會在之後的博文中發出來。

繼續閱讀