王道操作系统考研笔记——1.1.6 系统调用
如果這篇博客對您有用的話,可以給我點個贊嗎,這對我很重要,謝謝!??
文章目錄
- 1.1.6 系統調用
- 1.1.6.1 系統調用和作用
- 1.1.6.2 系統調用和庫函數
- 1.1.6.3 系統調用背后的過程
- 1.1.6.4 小結
1.1.6 系統調用
知識總覽
1.1.6.1 系統調用和作用
前面我們在1.1.1.3那里講過操作系統作為用戶和計算機硬件之間的接口,它需要向上提供一些簡單易用的服務。主要包括命令接口和程序接口。那時候我們說過程序接口主要是允許用戶間接調用。實際上,程序接口由一組系統調用組成。
系統調用是操作系統提供給應用程序(程序員/編程人員)使用的接口,可以理解為一種可供應用程序調用的特殊函數,應用程序可以發出系統調用請求來獲得操作系統的服務。
那為什么應用程序要給操作系統發出請求呢,為什么操作系統需要提供給“系統調用”功能呢?
讓我們想象一個場景,如果我們去打印店打印論文,當我按下了“打印”之后,打印機開始工作。結果我的論文打印到一半的時候,另外一位同學也按下“打印”,開始打印它自己的論文。最終,你的論文和該同學的論文頁面并沒有混雜在一起,都是按順序依次打印的。
那為什么是按順序依次打印呢?為什么不會亂呢?
體現到我們的操作系統來的話,操作系統就是作為調控的那一部分。在某個時刻多個進程同時向操作系統提出系統調用的請求的時候,操作系統就會對各個請求進行協調管理。
應用程序通過系統調用請求操作系統的服務。系統中的各種共享資源都由操作系統統一掌管,因此在用戶程序中,凡是與資源有關的操作,都必須通過系統調用的方式向操作系統提出服務請求,由操作系統代為完成。這樣可以保證系統的穩定性和安全性,防止用戶進行非法操作。
系統調用可以分為五大類,這里只需要簡單的了解,在后面我們會詳細地介紹他們。
需要注意的是,系統調用相關處理涉及到對系統資源的管理、對進程的控制,這些功能需要執行一些特權指令才能完成,因此系統調用的相關處理需要在核心態下完成。
1.1.6.2 系統調用和庫函數
在上圖中,有些庫函數涉及系統調用,例如“創建一個新文件”;有些庫函數則不涉及系統調用,例如“取絕對值”。
1.1.6.3 系統調用背后的過程
在我們用高級語言編寫的代碼中,若有關于系統調用的函數,我們假設為write()。那么在高級語言編譯后會變成匯編語言,如下圖:
也就是說,實際上高級語言中的庫函數里面有些庫函數擁有系統調用的功能,此刻它們雖然看起來很簡單,實際上背后蘊含了很多關于系統調用的細節,而高級語言庫函數的好用之處在于,它屏蔽了關于底層的細節,給了我們一種系統調用最簡單的方式。
這個過程實際上是以下的步驟:
這里有幾個需要注意的點是:
- 陷入指令是在用戶態執行的,執行陷入指令之后會立即引發一個內中斷,從而CPU進入核心態。
- 發出系統調用請求是在核心態,而對系統調用的相應處理在核心態下進行。
- 陷入指令是唯一一個只能在用戶態執行,而不可在核心態執行的指令。
1.1.6.4 小結
- 陷入指令也叫做trap指令/訪管指令。
總結
以上是生活随笔為你收集整理的王道操作系统考研笔记——1.1.6 系统调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网吧也用VDI?
- 下一篇: NLB+Cluster(一)