此處重點介紹基礎概念,為後面介紹資料報收發打下基礎。本次**層面基於linux 4.4 kernel。
linux的系統執行分為使用者態和核心態,核心態控制著系統資源。通過定時器進行排程,把cpu分配給使用者程序使用;通過中斷來響應外設請求;並有一定的框架來管理記憶體、檔案、網路等。
系統呼叫流程如下:
核心和網路裝置驅動是通過中斷的方式來處理的。當裝置上有資料到達的時候,會給cpu的相關引腳上觸發乙個電壓變化,以通知cpu來處理資料。對於網路模組來說,由於處理過程比較複雜和耗時,如果在中斷函式中完成所有的處理,將會導致中斷處理函式(優先順序過高)將過度佔據cpu,將導致cpu無法響應其它裝置,例如滑鼠和鍵盤的訊息。因此linux中斷處理函式是分上半部和下半部的。上半部是只進行最簡單的工作,快速處理然後釋放cpu,接著cpu就可以允許其它中斷進來。剩下將絕大部分的工作都放到下半部中,可以慢慢從容處理。2.4以後的核心版本採用的下半部實現方式是軟中斷,由ksoftirqd核心執行緒全權處理。和硬中斷不同的是,硬中斷是通過給cpu物理引腳施加電壓變化,而軟中斷是通過給記憶體中的乙個變數的二進位制值以通知軟中斷處理程式。
作業系統對於中斷處理流程一般為:
關中斷:cpu關閉中段響應,即不再接受其它外部中斷請求
保護現場所:將發生中斷處理有關暫存器(中斷服務程式中要使用的暫存器)以及標誌暫存器的記憶體壓入堆疊。
執行中斷服務程式:轉到中斷服務程式入口開始執行,可在適當時刻重新開放中斷,以便允許響應較高優先順序的外部中斷。
恢復現場並返回:把「保護現場」時壓入堆疊的資訊彈回原暫存器,然後執行中斷返回指令(iret),從而返回主程式繼續執行。
Linux資料報文接收傳送總結1
如下簡單的一段在 我們在linux上執行 同時再執行一服務端的回顯 include include include include include int main void int addr len 0 int ret 0 sk socket af inet,sock dgram,0 if 0 s...
網絡卡傳送與接收資料報
網絡卡如何傳送資料報 ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的。主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的緩衝...
網絡卡如何傳送和接收資料報
網絡卡如何傳送資料報 文章出處 http blog.21ic.org user1 1066 archives 2007 40803.html ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程...