網路子系統初始化 系統啟動時初始化

2021-05-23 14:07:09 字數 1561 閱讀 9128

網路啟動初始化函式入口為net/socket.c:2200:socket_init()

sock_init()函式結構很簡單,實現的功能也非常簡單,下面逐個進行解析:

1.sk_init()

該函式初始化了兩個極值:sysctl_wmem_max和sysctl_rmem_max。這兩個值就是來控制我們執行setsockopt系統呼叫時對sndbuf和rcvbuf設定的最大值。和該函式被呼叫時所說的「initialize sock slab cache.」的描述有些不符。

2.skb_init()。該函式只是申請了兩個struct sk_buff的slab,sk_buff是linux網路實現中最重要的結構體之一,在網路協議的各層都被使用到,用來儲存資料。

3.init_inodecache()。為將來要建立的所有的socket申請乙個slab。

4.register_filesystem(),kern_mount()。

註冊了乙個socket的pseudo檔案系統,並進行掛載,該檔案系統不能在使用者空間mount。那該檔案系統的作用何在呢?我們知道在linux系統上一切皆檔案,那socket當然也不能例外。既然是檔案,就要有inode;既然有inode,就要有super_block;既然有super_block,就要有file_system_type,就要註冊檔案系統。

在這裡註冊的是乙個偽檔案系統[net/socket.c:304:sock_fs_type],這個file_system_type主要提供了乙個sockfs_get_sb()函式,獲取sock_fs的super_block。

sockfs的super_block主要提供了乙個sock_alloc_inode(),這個函式是用來獲取sockfs的inode。因為乙個socket和乙個inode相對應,為了簡化實現和提高訪問速度,核心裡的實現是將socket和inode分配在同一片連續的記憶體區,通過巨集socket_i()[include/net/sock.h:783]和sock_inode()[include/net/sock.h:788]來在這兩個結構體間進行切換,通過sock_alloc()[net/socket.c:481]來申請乙個socket

至此,socket系統初始化階段完成。

下面說一些題外話,關於socket初始化時所用到的這兩個檔案系統的介面。

register_filesystem(),該函式主要維護了系統中的乙個單鏈表:file_systems[fs/filesystems.c:32]。新來的檔案系統不停的加到前乙個檔案系統的->next上。每乙個檔案系統型別在系統中只註冊一次,這是乙個檔案系統的總入口,該介面主要提供了乙個介面:get_sb(),用來在檔案系統被mount時獲取super_block和vfsmount。

另外,這個這個函式還有乙個特點就是沒有被顯示的呼叫,那它是在什麼時候執行的呢?經觀察發現,返回值型別宣告後跟有乙個__init,另外在函式的下方還有這樣乙個宣告:

這另我們想起了module_init(),實際上他們的實現類似,他們的作用都是將初始化函式的位址放到系統的某一塊記憶體中,在啟動的時候逐個呼叫,那麼到底是誰呼叫的呢?這就要使用強大的除錯工具gdb來給我們解釋了,在此處設定斷點,執行bt可以發現

將來研究系統啟動過程啟動的時候可以跟蹤一下。

網路子系統初始化 ipv4模組載入時初始化

下面分四部分對其進行解讀。1.首先是三個proto register 分別註冊了tcp prot,udp prot,raw prot三個協議 struct proto include net sock.h 594 這三個物件在後面的初始化過程中還會涉及到,可以比較一下出現這兩次的目的何在 跟到pro...

Spring Boot 專案啟動時初始化資源

在我們實際工作中,總會遇到這樣需求,在專案啟動的時候需要做一些初始化的操作,比如初始化執行緒池,提前載入好加密證書等。今天就給大家介紹乙個 spring boot 神器,專門幫助大家解決專案啟動初始化資源操作。接下來我們就運用案例測試它如何使用,在測試之前在啟動類加兩行列印提示,方便我們識別comm...

專案啟動時初始化資料 動態載入

1 在專案啟動時,載入mysql表中的mq配置資料,並將其繫結到mq佇列。以便在後面傳送mq訊息時直接使用繫結好的交換器 路由與佇列。2 在專案啟動後,後續每一次增加了mq配置,都希望將其繫結到mq佇列,保證所有配置都是被繫結過的。component initmqlistener public cl...