系統程式設計 LINUX系統結構 GDB除錯

2021-09-27 08:08:06 字數 2620 閱讀 7554

linux體系結構大致可以分為兩塊:

(1)使用者空間:使用者空間中又包含了,使用者的應用程式,c庫

linux 核心由如下幾部分組成:記憶體管理、程序管理、裝置驅動程式、虛擬檔案系統和網路介面等

1、記憶體管理 

記憶體管理主要完成的是如何合理有效地管理整個系統的物理記憶體,同時快速響應核心各個子系統對記憶體分配的請求。linux記憶體管理支援虛擬記憶體,而多餘出的這部分記憶體就是通過磁碟申請得到的,平時系統只把當前執行的程式塊保留在記憶體中,其他程式塊則保留在磁碟中。在記憶體緊缺時,記憶體管理負責在磁碟和記憶體間交換程式塊。

2、程序管理 

程序管理主要控制系統程序對cpu的訪問。當需要某個程序執行時,由程序排程器根據基於優先順序的排程演算法啟動新的程序。:linux支援多工執行,那麼如何在乙個單cpu上支援多工呢?這個工作就是由程序排程管理來實現的。在系統執行時,每個程序都會分得一定的時間片,然後程序排程器根據時間片的不同,選擇每個程序依次執行,例如當某個程序的時間片用完後,排程器會選擇乙個新的程序繼續執行。由於切換的時間和頻率都非常的快,由此使用者感覺是多個程式在同時執行,而實際上,cpu在同一時間內只有乙個程序在執行,這一切都是程序排程管理的結果。

3. 裝置驅動程式 

裝置驅動程式是 linux  核心的主要部分。和作業系統的其它部分類似,裝置驅動程式執行在高特權級的處理器環境中,從而可以直接對硬體進行操作,但正因為如此,任何乙個裝置驅動程式的錯誤都可能導致作業系統的崩潰。裝置驅動程式實際控制作業系統和硬體裝置之間的互動。裝置驅動程式提供一組作業系統可理解的抽象介面完成和作業系統之間的互動,而與硬體相關的具體操作細節由裝置驅動程式完成。一般而言,裝置驅動程式和裝置

的控制晶元有關,例如,如果計算機硬碟是 scsi  硬碟,則需要使用 scsi  驅動程式,而不是 ide 驅動程式。 

4、虛擬檔案系統 (vfs)

linux核心中的虛擬檔案系統用乙個通用的檔案模型表示了各種不同的檔案系統,這個檔案模型遮蔽了很多具體檔案系統的差異,使linux核心支援很多不同的檔案系統,這個檔案系統可以分為邏輯檔案系統和裝置驅動程式:邏輯檔案系統指linux所支援的檔案系統,例如ext2、ext3和fat等;裝置驅動程式指為每一種硬體控制器所編寫的裝置驅動程式模組。

5、網路介面 (net)

網路介面提供了對各種網路標準的實現和各種網路硬體的支援。網路介面一般分為網路協議和網路驅動程式。網路協議部分負責實現每一種可能的網路傳輸協議。網路裝置驅動程式則主要負責與硬體裝置進行通訊,每一種可能的網路硬體裝置都有相應的裝置驅動程式。

簡介:

gdb(gnu debugger)是gcc的除錯工具,主要有以下面四個方面的功能: 

1.啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。 

2.可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示式) 

3.當程式被停住時,可以檢查此時你的程式中所發生的事。 

4.動態的改變你程式的執行環境。

除錯流程:

生成gdb除錯資訊:gcc ***.c -o *** -g

進入gdb除錯:gdb ***

設定斷點: b 15 //在程式執行後會停在15行,15行不執行

刪除斷點: d 15 //刪除15行的斷點

程式開始執行:r//不設定斷點會直接一直順著程式執行下去

單步執行:n

執行時碰到函式時直接跳過整個函式:s

列印變數的值:print 變數

列印型別的定義:ptype 型別

退出gdb除錯:quit

引數列表:

命令

命令縮寫

命令說明

list

l顯示多行源**

break

b設定斷點,程式執行到斷點的位置會停下來

info

i描述程式的狀態

runr

開始執行程式

display

disp

跟蹤檢視某個變數,每次停下來都顯示它的值

step

s執行下一條語句,如果該語句為函式呼叫,則進入函式執行其中的第一條語句

next

n執行下一條語句,如果該語句為函式呼叫,不會進入函式內部執行(即不會一步步地除錯函式內部語句)

print

p列印內部變數值

continue

c繼續程式的執行,直到遇到下乙個斷點

set var name=v

設定變數的值

start

st開始執行程式,在main函式的第一條語句前面停下來

file

裝入需要除錯的程式

kill

k終止正在除錯的程式

watch

監視變數值的變化

backtrace

bt檢視函式呼叫資訊(堆疊)

frame

f檢視棧幀  f n 切換到編號為n的棧

quit

q退出gdb環境

[1][2]

[3][4]

Linux 系統程式設計

1 i o操作 2 檔案和目錄管理 3 記憶體管理 1 建立匿名記憶體對映 2 對映 dev zero檔案 類unix 作業系統中,dev zero是乙個特殊的檔案,當你讀它的時候,它會提供無限的空字元 null,ascii nul,0x00 其中的乙個典型用法是用它提供的字元流來覆蓋資訊,另乙個常...

Linux系統程式設計

1.linux程序 守護程序 脫離終端的後台程序 2.linux程序 殭屍程序 3.linux 下程序通訊 其中setsockopt server sockfd,sol socket,so reuseaddr,on,sizeof on 因為每乙個連線都由本地位址和遠端位址的組合唯一確定,所以只要遠端...

Linux系統程式設計 系統呼叫

系統呼叫,顧名思義,說的是作業系統提供給使用者程式呼叫的一組 特殊 介面。使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的呼叫請求系統開啟檔案 關閉檔案或讀寫檔案,可以通過時鐘相關的系統呼叫獲得系統時間或設定定時器等。從邏輯上來說,系統呼叫可被看成是乙...