2014-03-01 37 views
-1

在學習操作系統的主題時,Critical Section是我遇到的主題。爲了解決這個問題,像信號量,某些軟件解決方案等等提供了某些方法。但是我有一個問題,那就是實現這些解決方案的代碼來自哪裏?程序員從來沒有發現爲他們的程序編寫這樣的代碼。假設我編寫了一個簡單的程序,以'C'執行printf,我從來沒有爲關鍵部分問題編寫任何代碼。代碼被轉換爲低級指令,並由OS執行,它就像我們順從的僕人一樣。那麼,處理關鍵部分的代碼在哪裏起源和適應呢?讓像幀緩衝區這樣的資源成爲關鍵部分。從哪裏開始處理關鍵部分的代碼?

回答

0

OS內核提供了這樣的線程間通信同步機制,互斥鎖,信號量,事件,臨界區,條件變量等等。它必須因爲內核需要阻塞無法繼續的線程。許多語言爲這種調用提供了方便的包裝。

您的應用程序通過系統調用直接或間接訪問它們,即進入內核狀態並請求此類服務的中介。

在某些情況下,短期用戶空間螺旋鎖可能會被抹在頂部,但如果微調器不能很快得到滿足,此類代碼應該依照系統調用。如果使用C printf,相關庫(通常爲stdio)將調用鎖定/解鎖I/O流(假設您已鏈接到該庫的多線程版本中)。