作業系統 微核心通訊

2021-10-22 12:06:48 字數 1739 閱讀 9639

在微核心架構下,乙個應用程式獲取系統服務通常需要通過程序間通訊的方式。

mach通過兩種基本的抽象—埠和訊息,設計和實現一種間接通訊ipc。

埠設計:

mach將埠分為傳送者埠和接受者埠,mach的通訊不是指定的,而是傳送者從傳送埠傳送訊息,然後接收者可以從接受埠去拿訊息,傳送埠可以有多個,但接受埠只能有乙個。

訊息設計:

mach傳遞訊息支援傳遞埠,比如程序a與程序b通訊,程序a也與程序c通訊,那麼程序a可以傳送給程序b,程序c的埠,這樣就建立了b與c的連線。

mach有三個藉口,msg_send,msg_receive,msg_rpc,單向通訊一般用msg_send,雙向通訊一般用msg_rpc。

l4訊息傳遞:前面介紹的mach訊息傳遞埠的方式,在sel4中以訊息傳遞capability的方式傳遞下來。l4將訊息分為長訊息和短訊息,後期還有中等訊息,這樣設計的目的是減少資料拷貝。

短訊息:短訊息通過暫存器來傳遞,這樣實現了零拷貝。

具體流程:

1.呼叫者將訊息寫在全域性暫存器中

2.控制流轉移,陷入核心,從呼叫者上下文切換到被呼叫者的上下文。

3.被呼叫者從暫存器取資料

長訊息:長訊息通常需要兩次拷貝:從傳送者使用者態拷貝到核心緩衝區,以及從核心緩衝區拷貝到接收者使用者態。有一種優化可以讓拷貝次數只有一次,就是將傳送者臨時緩衝區的虛擬位址對映到接收者實體地址。

l4控制流轉移

l4通訊連線:以前l4是直接通訊,知道乙個執行緒號就可以與他一對一通訊,由於一些安全問題,轉變為像mach一樣的間接通訊了。

l4許可權檢查:capability機制,capability簡單看來是對核心物件的乙個引用,以及對該核心物件的乙個許可權。以ipc為例,微核心會在每個通訊連線維護乙個ipc核心物件,這個核心物件包含接受者,傳送者,緩衝區等通訊相關資訊,當傳送者要發起通訊時,需要告知核心乙個特定的capability來發起通訊,核心檢查capability,然後找到capability對應的核心物件以及與之對應的接受者,從而開啟通訊。

所以在開啟通訊前,兩個程序要先通過命名服務等方式獲取到對應的capability。

遷移執行緒就是把服務端的**拉取到客戶端來處理資料。這樣就避免了控制流切換和資料傳輸。

遷移執行緒的基本原則:

簡化控制流切換,讓客戶端執行緒執行「服務端的**」。

簡化資料傳輸,共享引數棧和暫存器

簡化介面,減少序列化等開銷

優化併發,避免共享的全域性資料結構。

通訊連線的建立:當客戶端申請和乙個服務端建立連線時,核心會分配引數棧和連線記錄(用來返回的),並返回給客戶端乙個繫結物件,之後客戶端可以通過繫結物件發起通訊。

通訊過程

核心驗證繫結物件的正確性,並找到正確的服務描述符

核心驗證引數棧和連線記錄的正確性

核心檢查是否有併發呼叫(可能導致引數棧異常)

核心將呼叫者的返回位址和棧指標放到連線記錄中

核心將連線記錄放到執行緒控制結構體中的棧上

核心切換到被呼叫者程序位址空間

核心找到被呼叫者程序的執行棧(執行**所用的棧)

核心將呼叫者執行緒的棧指標設定為被呼叫者執行緒的執行棧位址

核心將**指標指向被呼叫者位址空間中的處理函式

作業系統特性與微核心

1.什麼是作業系統,有哪些基本型別?作業系統是用於使用者和計算機硬體互動的最底層的軟體,提供各種介面,方便使用者控制使用計算機,分配和管理計算機資源,實現資源抽象 單道作業系統,多道批處理作業系統,單使用者系統,多使用者系統。2.簡述作業系統的目的 作用和主要功能。有效性,開放性,方便性,可擴充性。...

作業系統單體核心和微核心的區別

單體核心 大核心,將 os的全部功能都做進核心中,包括排程 檔案系統 網路 裝置驅動器 儲存管理。比如裝置驅動管理 資源分配 程序間通訊 程序間切換管理 檔案系統 儲存管理 網路等。單體核心 是指在一大塊 中實際包含了所有作業系統功能,並作為乙個單一程序執行,具有唯一位址空間。大部分 unix 包括...

linux使用者與核心通訊方式

共享記憶體 ioctl sysfs procfs 訊息佇列 socket copy from user copy to user 以上同步通訊方式,由使用者態主動發起向核心態的通訊,核心無法主動發起通訊 netlink 非同步全雙工的通訊方式,它支援由核心態主動發起通訊,核心為netlink通訊提供...