作業系統相關知識的總結

2021-04-30 14:52:00 字數 2875 閱讀 8345

dll

的本質就是暴露一些函式供給程序呼叫,內部也可以維護全域性資料

每個程序在

os的幫助下會

copy

乙份全域性的資料給自己使用,這樣就保證了程序之間共享同乙個

dll沒有相互的干擾。

顯式載入,隱式載入

顯式解除安裝,隱式解除安裝

通過引入庫的方式都是隱式的。

已經存在於

os中就不需要載入了

1.

os

層面上的對

dll的引用計數

第乙個程序使用時,載入

dll進入

os,當所有的程序都退出了,

dll也會被解除安裝出os

2.

程序對

dll顯式引用計數,即使程序還在也可以解除安裝掉

dll

com dll

就是這樣的,通過

com api

可以尋找並載入

dll,通過程式設計師對於

com介面使用的

addref

,release

呼叫,可以記載該程序是否還在使用這個

dll,當所有程序都不使用了,這個

dll也就可以解除安裝了。

我們可以建立一種檔案裡面包含了很多函式和變數的目標**,鏈結的時候只要把這個檔案指示給鏈結程式就自動地從檔案中查詢符合要求的函式和變數進行鏈結,整個查詢過程根本不需要我們操心。

這個檔案叫做「庫(

libary)」

,平時我們把編譯好的目標**儲存到「庫

」裡面,要用的時候鏈結程式幫我們從庫裡面找出來。

靜態鏈結庫

在早期庫的組織形式相對簡單,裡面的目標**只能夠進行靜態鏈結,所以我們稱為

「靜態庫

」,靜態庫的結構比較簡單,其實就是把原來的目標**放在一起,鏈結程式根據每乙份目標**的符號表查詢相應的符號(函式和變數的名字),找到的話就把該函式裡面需要定位的進行定位,然後將整塊函式**放進可執行檔案裡,若是找不到需要的函式就報錯退出。

靜態庫的兩個特點:

#1鏈結後產生的可執行檔案包含了所有需要呼叫的函式的**,因此占用磁碟空間較大。

#2如果有多個(呼叫相同庫函式的)程序在記憶體中同時執行,記憶體中就存有多份相同的庫函式**,因此占用記憶體空間較多。

動態鏈結庫:

動態鏈結庫就是為了解決這些問題而誕生的技術,顧名思義,動態鏈結的意思就是在程式裝載記憶體的時候才真正的把庫函式**鏈結進行確定它們的位址,並且就算有幾個程式同時執行,記憶體也只存在乙份函式**。

動態庫的**必須滿足這樣一種條件:能夠被載入到不同程序的不同位址,所以**要經過特別的編譯處理,我們把這種經過特別處理的**叫做

「位置無關**(

position independed code .pic)」.

根據引導程式何時確定動態**的邏輯位址,可以把動態裝載分為兩類。

#1 靜態繫結

(static binding)

使用靜態繫結的程式一開始載入記憶體的時候,引導程式就會把程式所有呼叫到的動態**的位址算出確定下來,這種方式使程式剛執行的初始化時間較長,不過旦完成動態裝載,程式的執行速度就很快。

#2動態繫結(

dynamic binding

)使用這種方式的程式並不在一開始就完成動態鏈結,而是直到真正呼叫動態庫**時,引導程式才計算(被呼叫的那部分)動態**的邏輯位址,然後等到某個時候,程式又需要呼叫另外某塊動態**時,引導程式又去計算這部分**的邏輯位址,所以,這種方式使程式初始化時間較短,但執行期間的效能比不上靜態繫結的程式。

平時預設進行鏈結的標準

c/c++

函式就是動態庫。

note

記憶體中的動態**只有乙份副本,但動態庫的資料仍然可能有多份副本,因為每乙個鏈結到動態的程序都可能會修改庫的資料,每當出現這種情況的時候,作業系統就複製出乙份資料副本,然後修改程序的位址空間對映,使它指向新的資料副本,於是程序最後修改的只是屬於自己的那份資料。

乙個應用級程序必須通過中斷陷入獲得核心級許可權,此時執行的是中斷例程。

核心的ipc

呼叫cpu

分時排程

都必須依賴中斷陷入技術

push「param」

call「address」

push%ebp%

mov%ebp%, %esp%

……

mov%esp%, %ebp%

pop%ebp%

ret

pop「param」

立即數,暫存器,記憶體位址

在c/c++

語言中所有變數(自動變數,全域性變數,靜態變數)表達的均是記憶體位址

陣列名,代表連續的空間的開始位址

指標變數,代表乙個記憶體位址的

32位值是乙個位址值

注意變數作為左值和右值得差異

完全相同的資料空間和形式,加法計算也不區分,只在邏輯判斷語句上不同

負數:補碼表示

作業系統相關知識1

gcc編譯器將乙個.c的程式檔案翻譯成乙個可執行的.o檔案分為4部分組成 1 預處理階段 預處理器將根據字元 開頭的命令,修改原始的c程式。比如 include 命令就是告訴預編譯器讀取 include 的內容,並將其插入到程式文字中。得到了另乙個以.i為結尾的副檔名 2 編譯階段 編譯器將.i檔案...

作業系統相關

程序 乙個執行的程式就是乙個程序。是系統資源分配的最小單位,擁有自己獨立的記憶體空間。既不共享堆也不共享棧 由作業系統排程 執行緒 排程執行的最小單位,不能獨立存在,共享記憶體。共享堆不共享棧 由作業系統排程 協程 是一種使用者態的輕量級執行緒,排程完全由使用者控制。和執行緒一樣,共享堆不共享棧 由...

作業系統相關

seo search engine optimization 漢譯為搜尋引擎優化。是一種方式 利用搜尋引擎的規則提高 在有關搜尋引擎內的自然排名。目的是讓其在行業內佔據領先地位,獲得品牌收益。很大程度上是 經營者的一種商業行為,將自己或自己公司的排名前移。作業系統 operating system,...