作業系統 使用者程式設計介面(概念)

2021-07-12 05:06:08 字數 2123 閱讀 7990

對於計算機系統而言,作業系統充當著基石的作用,它是連線計算機底層硬體與上層應用軟體的橋梁,控制其他程式的執行,並且管理系統相關資源,同時提供配套的系統軟體支援。對於專業的程式設計師而言,掌握一定的作業系統知識比不可少,因為不管面對的是底層嵌入式開發,還是上層的雲計算開發,都需要使用到一定的作業系統相關知識。

庫函式呼叫是語言或應用程式額一部分,它是高層的,完全執行在使用者空間,為程式設計師提供呼叫真正的在幕後完成實際事務的系統呼叫介面,屬於系統的一部分。函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。

庫函式呼叫通常比行內展開的**慢,因為它需要付出函式呼叫的開銷。但系統呼叫比庫函式呼叫還要慢很多,因為它需要把上下文環境切換到核心模式。。

靜態鏈結是指把呼叫的函式或者過程直接鏈結到可執行檔案中,稱為可執行檔案的一部分。換句話說,函式和過程的**就在程式的exe檔案中,該檔案包含了執行時所需的全部**。靜態鏈結的缺點是當多個程式都呼叫相同函式時,記憶體中就會存在這個函式的多個拷貝,這樣就浪費了記憶體資源。

動態鏈結是相對於靜態鏈結而言的,動態鏈結所呼叫的函式**並沒有被拷貝到應用程式的可執行檔案中去,而是僅僅在其中加入了所呼叫函式的描述資訊(往往是一些重定位資訊)。僅當應用程式被裝入記憶體開始執行時,在作業系統的管理下,才在應用程式與響應的動態鏈結庫(dynamic link library,dll)之間建立鏈結關係。當要執行所呼叫dll中的函式時,根據鏈結產生的重定位資訊,作業系統才轉去執行dll中相應的函式**。

靜態鏈結的執行程式能夠在其他同類作業系統的機器上直接執行。例如,乙個exe檔案是在windows2000系統上靜態鏈結的,那麼將該檔案直接拷貝到另一台windows2000的機器上,是可以執行額。而動態鏈結的執行程式則不可以,除非把該exe檔案所需的dll檔案都一併拷貝過去,或者對方機器上也有所需的相同版本的dll檔案,否則是不能保證正常執行的。。。

靜態鏈結庫就是使用的.lib檔案,庫中的**最後需要鏈結到可執行檔案中去,所以靜態鏈結的可執行檔案一般比較大一些。

動態鏈結庫是乙個包含可由多個程式同時使用的**和資料的庫,它包含函式的資料的模組集合。程式檔案(如.exe檔案或.dll檔案)在執行時載入這些木塊(也即所需的模組對映到呼叫程序的位址空間)。

靜態鏈結庫和動態鏈結庫的相同點是它們都實現了**的共享。不同點是靜態鏈結庫lib中的**被包含在呼叫的exe檔案中,該lib中不能再包含其他動態鏈結庫或者靜態鏈結庫了。而動態鏈結庫dll可以被呼叫的exe動態地「引用」和「解除安裝」,該dll中可以包含其他動態鏈結庫或者靜態鏈結庫。

核心態與使用者態是作業系統的兩種執行級別,它用於區分不同程式的不同權利。核心態就是擁有資源多的狀態,或者說訪問資源多的狀態,也稱之為特權態。相對來說,使用者態就是非特權態,在此中狀態下訪問的資源將受到限制。如果乙個程式執行在特權態,則該程式就可以訪問計算機的任何資源,即它的資源訪問許可權不受限制。如果乙個程式執行在使用者態,則其資源需求將受到各種限制。例如,如果要訪問作業系統的核心資料結構,如程序表,則需要在特權態下才能辦到。如果要訪問使用者程式裡的資料,則在使用者態下就可以了。。

核心在建立程序的時候,在建立task_struct的同時,會為程序建立相應的堆疊。每個程序會有兩個棧,乙個使用者棧,存在於使用者空間;乙個核心棧,存在於核心空間。當程序在使用者空間執行時,cpu堆疊指標暫存器裡面的內容是使用者堆疊位址,使用使用者棧;當程序在核心空間時,cpu堆疊指標暫存器裡面的內容是核心棧空間位址,使用核心棧。

當程序因為中斷或者系統呼叫而陷入核心態時,程序所使用的堆疊也要從使用者棧轉到核心棧。程序陷入核心態後,先把使用者態堆疊的位址儲存在核心棧中,然後設定堆疊指標暫存器的內容為核心棧的位址,這樣就完成了使用者棧向核心棧的轉換;當程序從核心態恢復到使用者態之後時,在核心態之後的最後將儲存在核心棧裡面的使用者棧額位址恢復到堆疊指標暫存器即可。這樣就實現了核心棧和使用者棧的互轉。

那麼,知道從核心轉到使用者態時使用者棧的位址是陷入核心的時候儲存在核心棧裡面的,但是在陷入核心的時候,如何知道核心棧的位址?關鍵在程序從使用者態轉到核心態的時候,程序的核心棧總是空的。這是因為當程序在使用者態執行時,使用的是使用者棧,當程序陷入到核心態時,核心棧儲存程序在核心態執行的相關資訊,但是一旦程序返回到使用者態後,核心棧中儲存的資訊無效,會全部恢復,因此每次程序從使用者態陷入核心的時候得到的核心棧都是空的,所以在程序陷入核心的時候,直接把核心棧的棧頂位址給堆疊指標暫存器就可以了。

作業系統 1 4 作業系統使用者介面

單選題 共4題 1.作業系統提供了多種介面供使用者使用,其中 是專門 用程式使用的一種介面。a.終端命令 b.圖形使用者介面 c.系統呼叫 d.作業控制語言 c 2.若程式正在試圖讀取某個磁碟的第200個邏輯塊,使用作業系統提供的 介面。a.系統呼叫 b.圖形使用者介面 c.原語 d.鍵盤命令 a ...

程式設計基礎概念 作業系統

上面我們探索到了一台理論上的計算機是什麼樣子的。為了讓大家能使用計算機,這麼一台裸機肯定是不行的,不能讓大家自己去管理cpu,管理記憶體,管理輸入輸出裝置,管理程式裝載。這些底層的工作是統一的,不需要每乙個使用計算機的人自己動手去做。這就誕生了作業系統,把計算機的這些組成部件的管理給包起來,然後使用...

作業系統 作業系統介面

介面表現為函式呼叫,由作業系統提供,連線作業系統和應用軟體。出於安全性考慮,應用程式不能直接在記憶體中任意訪問 將核心程式和使用者程式隔離 通過比較訪問資料段cpl和rpl的特權級和當前段dpl的特權級之間的關係 應用程式呼叫庫函式printf printf呼叫庫中的write函式 write將函式...