Linux 用戶態(tài)和內(nèi)核態(tài)由于 CPU 權(quán)限的限制,通信并不像想象中的使用進程間通信方式那么簡單,今天這篇文章就來看看 Linux 用戶態(tài)和內(nèi)核態(tài)究竟有哪些通信方式。 我們平常在寫代碼時,一般是在用戶空間,通過系統(tǒng)調(diào)用函數(shù)來訪問內(nèi)核空間,這是最常用的一種用戶態(tài)和內(nèi)核態(tài)通信的方式。(關(guān)于 Linux 用戶態(tài)和內(nèi)核態(tài)可以參考 xx) 除此之外,還有以下四種方式:
procfs(/proc) procfs是 進程文件系統(tǒng) 的縮寫,它本質(zhì)上是一個偽文件系統(tǒng),為什么說是 偽 文件系統(tǒng)呢?因為它不占用外部存儲空間,只是占用少量的內(nèi)存,通常是掛載在 /proc目錄下。 我們在該目錄下看到的一個文件,實際上是一個內(nèi)核變量。內(nèi)核就是通過這個目錄,以文件的形式展現(xiàn)自己的內(nèi)部信息,相當(dāng)于/proc目錄為用戶態(tài)和內(nèi)核態(tài)之間的交互搭建了一個橋梁,用戶態(tài)讀寫/proc下的文件,就是讀寫內(nèi)核相關(guān)的配置參數(shù)。 比如常見的/proc/cpuinfo、/proc/meminfo和/proc/net就分別提供了 CPU、內(nèi)存、網(wǎng)絡(luò)的相關(guān)參數(shù)。除此之外,還有很多的參數(shù),如下所示: root@ubuntu:~# ls /proc/ 1 1143 1345 1447 2 2292 29 331 393 44 63 70 76 acpi diskstats irq locks sched_debug sysvipc zoneinfo 10 1145 1357 148 20 23 290 332 396 442 64 7019 77 asound dma kallsyms mdstat schedstat thread-self 1042 1149 1361 149 2084 2425 291 34 398 45 65 7029 8 buddyinfo driver kcore meminfo scsi timer_list 1044 1150 1363 15 2087 25 3 3455 413 46 66 7079 83 bus execdomains keys misc self timer_stats 1046 1151 1371 16 2090 256 30 35 418 47 6600 7080 884 cgroups fb key-users modules slabinfo tty 1048 1153 1372 17 21 26 302 36 419 5 67 71 9 cmdline filesystems kmsg mounts softirqs uptime 11 1190 1390 18 22 27 31 37 420 518 6749 72 96 consoles fs kpagecgroup mtrr stat version 1126 12 143 182 2214 28 32 373 421 524 68 73 97 cpuinfo interrupts kpagecount net swaps version_signature 1137 1252 1434 184 2215 280 327 38 422 525 69 74 98 crypto iomem kpageflags pagetypeinfo sys vmallocinfo 1141 13 144 190 2262 281 33 39 425 5940 7 75 985 devices ioports loadavg partitions sysrq-trigger vmstat 可以看到,這里面有很多的數(shù)字表示的文件,這些其實是當(dāng)前系統(tǒng)運行的進程文件,數(shù)字表示進程號(PID),每個文件包含該進程所有的配置信息,包括進程狀態(tài)、文件描述符、內(nèi)存映射等等,我們可以看下: root@ubuntu:~# ls /proc/1/ attr/ cmdline environ io mem ns/ pagemap schedstat stat timers autogroup comm exe limits mountinfo numa_maps personality sessionid statm uid_map auxv coredump_filter fd/ loginuid mounts oom_adj projid_map setgroups status wchan cgroup cpuset fdinfo/ map_files/ mountstats oom_score root/ smaps syscall clear_refs cwd/ gid_map maps net/ oom_score_adj sched stack task/ 綜上,內(nèi)核通過一個個的文件來暴露自己的系統(tǒng)配置信息,這些文件,有些是只讀的,有些是可寫的,有些是動態(tài)變化的,比如進程文件,當(dāng)應(yīng)用程序讀取某個 /proc/文件時,內(nèi)核才會去注冊這個文件,然后再調(diào)用一組內(nèi)核函數(shù)來處理,將相應(yīng)的內(nèi)核參數(shù)拷貝到用戶態(tài)空間,這樣用戶讀這個文件就可以獲取到內(nèi)核的信息。一個大概的圖示如下所示: sysctl 我們熟悉的 sysctl 是一個 Linux 命令,man sysctl可以看到它的功能和用法。它主要是被用來修改內(nèi)核的運行時參數(shù),換句話說,它可以在內(nèi)核運行過程中,動態(tài)修改內(nèi)核參數(shù)。 它本質(zhì)上還是用到了文件的讀寫操作,來完成用戶態(tài)和內(nèi)核態(tài)的通信。它使用的是/proc的一個子目錄/proc/sys。和 procfs 的區(qū)別在于: procfs 主要是輸出只讀數(shù)據(jù),而 sysctl 輸出的大部分信息是可寫的。 例如,我們比較常見的是通過cat /proc/sys/net/ipv4/ip_forward 來獲取內(nèi)核網(wǎng)絡(luò)層是否允許轉(zhuǎn)發(fā) IP 數(shù)據(jù)包,通過echo 1 > /proc/sys/net/ipv4/ip_forward或者 sysctl -w net.ipv4.ip_forward=1來設(shè)置內(nèi)核網(wǎng)絡(luò)層允許轉(zhuǎn)發(fā) IP 數(shù)據(jù)包。 同樣的操作,Linux 也提供了文件/etc/sysctl.conf[來讓你進行批量修改。 sysfs sysfs 是 Linux 2.6 才引入的一種虛擬文件系統(tǒng),它的做法也是通過文件/sys來完成用戶態(tài)和內(nèi)核的通信。和 procfs 不同的是,sysfs 是將一些原本在 procfs 中的,關(guān)于設(shè)備和驅(qū)動的部分,獨立出來,以 “設(shè)備樹” 的形式呈現(xiàn)給用戶。 sysfs 不僅可以從內(nèi)核空間讀取設(shè)備和驅(qū)動程序的信息,也可以對設(shè)備和驅(qū)動進行配置。 我們看下/sys下有什么: # ls /sys block bus class dev devices firmware fs hypervisor kernel module power 可以看到這些文件基本上都跟計算機的設(shè)備和驅(qū)動等息息相關(guān)的。更多關(guān)于這些文件的解釋大家可以自行了解,這里就不過多展開了。 netlink netlink 是 Linux 用戶態(tài)與內(nèi)核態(tài)通信最常用的一種方式。Linux kernel 2.6.14 版本才開始支持。它本質(zhì)上是一種 socket,常規(guī) socket 使用的標(biāo)準(zhǔn) API,在它身上同樣適用。比如創(chuàng)建一個 netlink socket,可以調(diào)用如下的 socket 函數(shù): #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h> netlink_socket = socket(AF_NETLINK, socket_type, netlink_family); netlink 這種靈活的方式,使得它可以用于內(nèi)核與多種用戶進程之間的消息傳遞系統(tǒng),比如路由子系統(tǒng),防火墻(Netfilter),ipsec 安全策略等等。 引申: net-tools 工具通過 procfs(/proc) 和 ioctl 系統(tǒng)調(diào)用去訪問和改變內(nèi)核網(wǎng)絡(luò)參數(shù)配置,而 iproute2 則通過 netlink 套接字接口與內(nèi)核通信,前者已經(jīng)被淘汰了,后者逐步成為標(biāo)準(zhǔn)。 總結(jié) Linux 用戶態(tài)和內(nèi)核態(tài)通信主要的四種方式,其中 netlink 和 procfs 是最常見的方式。 |
免責(zé)聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請勿用于商業(yè)用途,如果損害了您的權(quán)利,請聯(lián)系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉(zhuǎn)型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營銷服務(wù),與站長一起進步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨!
掃一掃,關(guān)注站長網(wǎng)微信
當(dāng)我們在共享網(wǎng)絡(luò)訪問的時候,可能會遇到提示指定的網(wǎng)絡(luò)名不再可用的問題,這可能是由于我們的共享網(wǎng)絡(luò)出現(xiàn)了錯誤,也可能是被共享的對象所拒絕了。指定的網(wǎng)絡(luò)名 ......
文/曹楊 原標(biāo)題:誰還看電視? 爸爸戴一副老花鏡,媽媽戴一副近視鏡,一人坐在沙發(fā),一人躺在床上,各自刷著自己關(guān)注的博主更新的短視頻。電視也許開著,但只是背景。 這樣的畫面,幾乎成了洛奇家的常 ...
1、首先進入到“百度”軟件中, 2、然后在其中輸入“百度識圖”, 3、之后點擊圖中的“開始使用”按鈕, 4、緊接著點擊右下角的“相冊”功能, 5、在相冊下 ......
圖片來源于簡書 文/郭開森 楊帆 陸玖財經(jīng)準(zhǔn)備開新欄目了,每周一創(chuàng)始人郭開森和楊帆合體郭德帆,對行業(yè)進行一些觀察和評論,第一篇我們?nèi)允谴蛩銓懮鐓^(qū)團購,這是當(dāng)下最火的話題。 來過陸玖財經(jīng)做客的朋友們...
一、軟件沖突1、首先確認(rèn)是否是應(yīng)用程序沖突導(dǎo)致的。2、查看是否只有特定幾個游戲或應(yīng)用會導(dǎo)致該問題。3、如果是應(yīng)用沖突,那么只要卸載這些app就可以解決了。二 ......
電腦端:1、大家可以點擊右邊鏈接進入網(wǎng)頁版的百度網(wǎng)盤,進入之后點擊“去登錄”。https://pan.baidu.com/2、之后正確的輸入賬號密碼進行登錄就好啦。手機端:1 ......
一、N100對比intel i3 1、N100的跑分達到了147210分,這個數(shù)據(jù)可以達到i3的七代級別。 2、在跑分上也是超越了大部分的I3七代CPU,不過比I3八代要弱勢一些。 3 ......
8月15日消息 上周,有媒體報道前身為百度圖片的“榴蓮”APP含有大量不雅視頻內(nèi)容被用戶舉報。對此,百度圖片官方進行了回應(yīng),百度圖片表示已經(jīng)對報道中所涉及的“生吃旋風(fēng)哥”等爭議內(nèi)容進行了下線處理。 此外,百度...
在填寫一些項目申請書中,總是免不了要選擇一些數(shù)字,但是在方框中如何插入數(shù)字,該怎么辦呢?那么下面就由學(xué)習(xí)啦小編給大家分享下word在方框里輸入數(shù)字的技巧, ......
WPS Office手機版怎么加橫線?很多用戶還不知道WPS Office手機版怎么加橫線,WPS Office手機版怎么加橫線,WPS Office手機版怎么打橫線,WPS Office手機版怎么弄 ......
迅雷前綴是什么 答:迅雷前綴是(magnet:?xt=urn:btih:)括號里的就是了。 我們只要在這段文字之后輸入后續(xù)的內(nèi)容,就可以創(chuàng)建下載鏈接了。 1、磁力鏈接不基于文 ......
一、內(nèi)容特權(quán)。 1、半價點播。 許多站內(nèi)視頻都需要付費觀看,而大會員用戶可以直接半價享受; 購買成功后的48h內(nèi)無限次觀看。有部分的內(nèi)容是只限在中國大陸內(nèi)觀 ......
1、首先打開小米運動的“實驗室功能”。 2、接著點擊“門卡模擬”。 3、然后點擊“我知道了”。 4、最后貼近就可以刷卡成功了。...
1、打開手機輕顏相機app,點擊“我的”,點擊“設(shè)置”,2、點擊“幫助與反饋”,3、點擊右下角“在線咨詢”即可聯(lián)系客服,詢問自己的問題啦!...
答:華為P系列: 華為p40,華為p40plus,華為p50,華為p50e,華為p60 華為mate系列: 華為mate40,華為mate50,華為mate50e,華為mate60 華為nova系列: 華為n ......
近期有用戶反映,電腦在更新Windows 11 Insider Preview 25252.1000后,出現(xiàn)了應(yīng)用和已壓縮的文件點擊毫無反應(yīng),拖拽都不行,只能從開始菜單打開的情況,這是怎 ......
可見單元格就是不包括隱藏或者篩選篩選后隱藏起來的單元格區(qū)域。方法:篩選或隱藏數(shù)據(jù),復(fù)制需要粘貼的值,在目標(biāo)單元格區(qū)域左上角的第一個單元格處右擊,選擇【 ......
答:驍龍8+更好。 驍龍7+gen2實際上就是驍龍8+的低配版本。 在一些其他的核心架構(gòu)方面都是保持一致的,比如說CPU的架構(gòu)、GPU的架構(gòu)等等。 驍龍7+和驍龍8+具體 ......
文/黎明 一場針對中國互聯(lián)網(wǎng)巨頭的反壟斷風(fēng)暴正在醞釀,而且這次動真格了。 11月10日,國家市場監(jiān)管總局發(fā)布《關(guān)于平臺經(jīng)濟領(lǐng)域的反壟斷指南(征求意見稿)》,要加大對互聯(lián)網(wǎng)巨頭涉嫌壟斷的調(diào)查和監(jiān)管。 ...
win11系統(tǒng)如何釋放掉系統(tǒng)默認(rèn)保留的存儲空間?一般情況下,Windows會保留一些存儲空間,以便設(shè)備獲得良好性能和成功更新。但是當(dāng)出現(xiàn)系統(tǒng)盤儲存空間不足時,我們會將幾個G的保留空間釋放出來,以解燃眉之急。本期教...
文件被win10系統(tǒng)誤報病毒自動刪除了如何進行恢復(fù)?有用戶下載了某些破解軟件卻被Win10系統(tǒng)誤認(rèn)為是病毒文件而自動刪除,當(dāng)然系統(tǒng)自帶殺毒軟件其實挺不錯的,就是有時候會誤報,大家遇到這種情況的時候就希望把誤刪的...
1、先打開機頂盒進入主界面,并且使用遙控器打開設(shè)置。 2、然后選擇“賬號與安全”,并且進入。 3、最后往下面翻就可以看到“ADB調(diào)試”的選項,直接開啟就行了 ......
羅技g304dpi燈顏色代表什么:1、藍色:這種情況是正常工作的顯示,如果說是常亮或者閃爍,那都沒有問題這是在正常工作呢。2、紅色:如果說是紅燈閃爍的話那就是 ......
答:在3DMark壓力測試當(dāng)中,顯卡需要超高97%才能夠算合格,證明顯卡的穩(wěn)定性是過關(guān)的。 1、一般的默認(rèn)情況下在2500~3000分就算很正常的了。 2、分?jǐn)?shù)越高說明顯卡 ......
win11系統(tǒng)快速跳過聯(lián)網(wǎng)創(chuàng)建本地管理賬戶3種方法?現(xiàn)在市面上銷售的品牌筆記本和臺式機基本上都預(yù)裝Windows11家庭中文版正版操作系統(tǒng),聯(lián)網(wǎng)后系統(tǒng)會自動激活。當(dāng)用戶拿到新機器后還需要按照cortana(小娜)的提示一步...
我們經(jīng)常用WPS的時候,如果需要輸入波浪號~,會發(fā)現(xiàn)鍵盤上的波浪號輸入之后在最上面,但是為了美觀,我們希望波浪號顯示在中間。這里總結(jié)了三個方法分享給大家 ......
答:中高端水平 i513500hx在處理器當(dāng)中是處于一個中高端的水平。 i513500hx是第十一代酷睿處理器系列的一員,基礎(chǔ)頻率為2.4GHz,表現(xiàn)十分的不錯。 i513500hx介 ......
相信有非常多使用過筆記本的用戶都聽說過獨顯直連這個詞,但很多用戶并不了解獨顯直連是什么,又有什么用處,那么下面就和小編一起來看看什么是獨顯直連和開啟這 ......
win11系統(tǒng)開機總是自動登錄OneDrive如何關(guān)閉?win11系統(tǒng)開機的時候,會自動啟動OneDrive,不想要啟動,該怎么操作呢?下面我們就來看看詳細的教程。 在OneDrive界面點小齒輪按鈕,下拉菜單中點【設(shè)置】。 單擊【...
打開軟件,直接填寫就可以。 1、下載安裝easyconnect軟件, 2、打開easyconnect應(yīng)用,在如圖所示的“服務(wù)器地址”一欄輸入如圖所示網(wǎng)址,點擊“連接”, 3、等 ......