seL4系統調用

seL4 系統調用

seL4微內核爲線程間通信提供了一個消息傳遞服務。這個服務也被使用於內核提供的服務的通信中。這是一個標準的消息格式,每個消息包含了數據字以及有可能有一些能力。這些消息的結構體和編碼被詳細的在第四部分記載。

線程通過調用他們能力空間中的能力來發送消息。當用這種方式調用一個終端節點的時候,消息需要經過內核傳遞到其他線程中。當內核對象的能力被調用時,這消息將會被解釋成想一個關於內核對象類型特定的方式的方法調用。例如,調用一個線程控制塊(TCB)能力用一個正確格式化的消息將會暫停目標線程。

seL4內核提供瞭如下系統調用:

seL4_Send() 通過已被命名的能力來傳遞消息,然後允許應用程序繼續。如果這個調用的能力是一個終端節點而且沒有收件者馬上接受這個消息。這個發送的線程將會阻塞直到這個消息能夠被傳遞。無錯的代碼和響應將會被接受的線程和內核對象返回。

seL4_NBSend() 執行一個無阻塞的消息發送,它和seL4_Send() 差不多除了當消息不能夠被馬上接受的時候不大一樣,這個貨默認會把消息扔掉,其他的差不多,對的代碼和響應也是由接受的線程或內核對象返回。

seL4_Call() 是一個阻塞發送線程直到回覆消息被接收的seL4_Send(),當發送的消息被髮送給其他線程(通過一個終端節點),一個附加的回覆能力被添加到消息中,被交給收件者去給他權力回覆發送者。這個回覆的能力存儲在收件者的TCB的一個特定目標槽中。當內核服務調用能力,使用seL4_Call()能夠允許內核返回一個錯誤代碼或者其他響應在回覆消息中。

seL4_Reply() 被使用響應一個seL4_Call(),使用的能力一般來自於seL4_Call()的系統調用和回覆線程的TCB(線程控制單元),它傳遞消息給這個調用的線程,在進程中喚醒它。

這是一個每個線程的TCB僅有一個回覆能力的空間,所以seL4_Reply系統調用僅能夠被拿來回復大部分最近的調用者。seL4_Cnode_SaveCaller()方法能夠描述晚一點的能被拿來存儲能力進常規能力空間,它能夠和seL4_Send() 配合使用。

seL4_ReplyWait()是方法seL4_Reply()和seL4_Wait()的結合,它的存在是因爲要求高效:
回覆請求和等待下一個的相似環節能被單個內核系統調用執行,代替他們兩個。

seL4_Yield() 是唯一一個不請求能力的系統調用,它將導致被調用的線程放棄佔用的時間片讓給其他運行在同一優先級的線程,如果沒有運行態是同一級的線程,這個系統調用就沒有影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章