Linux数据报文接收发送总结2
1. 準備工作
此處重點介紹基礎概念,為后面介紹數據包收發打下基礎。本次代碼層面基于Linux 4.4 Kernel。
?
1.1 系統調用
Linux的系統運行分為用戶態和內核態,內核態控制著系統資源。通過定時器進行調度,把cpu分配給用戶進程使用;通過中斷來響應外設請求;并有一定的框架來管理內存、文件、網絡等。
系統調用流程如下:
?
1.2 中斷
內核和網絡設備驅動是通過中斷的方式來處理的。當設備上有數據到達的時候,會給CPU的相關引腳上觸發一個電壓變化,以通知CPU來處理數據。對于網絡模塊來說,由于處理過程比較復雜和耗時,如果在中斷函數中完成所有的處理,將會導致中斷處理函數(優先級過高)將過度占據CPU,將導致CPU無法響應其它設備,例如鼠標和鍵盤的消息。因此Linux中斷處理函數是分上半部和下半部的。上半部是只進行最簡單的工作,快速處理然后釋放CPU,接著CPU就可以允許其它中斷進來。剩下將絕大部分的工作都放到下半部中,可以慢慢從容處理。2.4以后的內核版本采用的下半部實現方式是軟中斷,由ksoftirqd內核線程全權處理。和硬中斷不同的是,硬中斷是通過給CPU物理引腳施加電壓變化,而軟中斷是通過給內存中的一個變量的二進制值以通知軟中斷處理程序。
?
操作系統對于中斷處理流程一般為:
關中斷:CPU關閉中段響應,即不再接受其它外部中斷請求
保存斷點:將發生中斷處的指令地址壓入堆棧,以使中斷處理完后能正確地返回。
識別中斷源:CPU識別中斷的來源,確定中斷類型號,從而找到相應的中斷服務程序的入口地址。
保護現場所:將發生中斷處理有關寄存器(中斷服務程序中要使用的寄存器)以及標志寄存器的內存壓入堆棧。
執行中斷服務程序:轉到中斷服務程序入口開始執行,可在適當時刻重新開放中斷,以便允許響應較高優先級的外部中斷。
恢復現場并返回:把“保護現場”時壓入堆棧的信息彈回原寄存器,然后執行中斷返回指令(IRET),從而返回主程序繼續運行。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Linux数据报文接收发送总结2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0.项目运行环境和项目经理
- 下一篇: Linux数据报文接收发送总结3