系統呼叫及損耗

2022-07-01 15:03:14 字數 733 閱讀 6713

系統呼叫的根本目的是保護作業系統所維護的共享資源;

程式執行的時候,本身是沒有許可權訪問多少系統資源的。系統資源有限,如果作業系統不進行控制,那麼各個程式難免會產生衝突。執行緒作業系統都將可能產生衝突的系統資源保護起來,阻止程式直接訪問。比如檔案、網路、io、各種裝置等。

比如無論在windows還是linux中,程式設計師都不能直接去訪問硬碟的某扇區上的資料,必須通過檔案系統,也不能擅自修改任意檔案。所有這些操作必須經過作業系統規定的方式進行。比如用fopen開啟沒有許可權的檔案就會失敗。

(1) 核心空間中存放的是核心**和資料,而程序的使用者空間中存放的是使用者程式的**和資料。不管是核心空間還是使用者空間,它們都處於虛擬空間中。 

(2) linux使用兩級保護機制:0級供核心使用,3級供使用者程式使用。

參考:《understanding unix/linux programming: a guide to theory and practice》之2.7

使用者程序位於使用者空間,核心程序位於系統空間,磁碟只能被核心直接訪問。

在執行核心**時,cpu工作在管理員模式,這對應於一些特殊的堆疊和記憶體環境,必須在系統呼叫時切換到這個環境中。系統呼叫結束後,cpu要切換到使用者模式,又要將堆疊和記憶體環境恢復到使用者模式的狀態,這種記憶體環境的切換要耗費很多時間。

因此,系統呼叫所耗費的時間主要在兩次環境切換上,如果使用者程式中普通**和系統呼叫交替出現,那麼將產生很大的環境切換的開銷。

原文: 

Linux系統呼叫及示例

學習linux系統呼叫時先明確乙個概念 一般情況下,應用程式通過應用程式設計介面api而不是直接通過系統呼叫來程式設計 應用程式設計介面api與系統呼叫的關係如下 應用程式程式設計介面實際上並不需要和核心提供的系統呼叫對應 1 乙個api可以實現成乙個系統呼叫 2 乙個api可以通過呼叫多個系統呼叫...

系統性的損耗 鞋裡的沙

煤可以用來發電,但用煤發電時,一噸煤中有大部分的能量是不能到達電燈的,都耗費在機械和電力運輸的損耗上,而真正發出光來的能量不過總能量的很小部分。其中存在的巨大耗費,實足驚人,這也正是近代科學家急欲設法補救的乙個大問題。乙個年輕人在剛剛跨入社會的時候 以為自己有著取之不盡 用之不竭的能源。他們相信能利...

Linux 系統呼叫及核心除錯

編號後三位 411,參考孟寧老師 wget tar xzvf linux 5.0.3.tar.gz sudo apt install flex bison libssl devmake i386 defconfig make make j8 include intmain gcc o init in...