校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解Linux用戶態與內核態通信的幾種方式

詳解Linux用戶態與內核態通信的幾種方式

熱門標簽:長沙開福怎么申請400電話 江蘇電銷外呼防封系統是什么 廣州電銷機器人系統圖 高德地圖標注無營業執照 百度地圖標注要不要錢 東莞人工智能電銷機器人供應商 賀州市地圖標注app 金融行業外呼線路 智能電話機器人線路

Linux 用戶態和內核態由于 CPU 權限的限制,通信并不像想象中的使用進程間通信方式那么簡單,今天這篇文章就來看看 Linux 用戶態和內核態究竟有哪些通信方式。

我們平常在寫代碼時,一般是在用戶空間,通過系統調用函數來訪問內核空間,這是最常用的一種用戶態和內核態通信的方式。(關于 Linux 用戶態和內核態可以參考 xx)

除此之外,還有以下四種方式:

  • procfs(/proc)
  • sysctl(/proc/sys)
  • sysfs(/sys)
  • netlink 套接口

procfs(/proc)

procfs 是 進程文件系統 的縮寫,它本質上是一個偽文件系統,為什么說是 偽 文件系統呢?因為它不占用外部存儲空間,只是占用少量的內存,通常是掛載在 /proc 目錄下。

我們在該目錄下看到的一個文件,實際上是一個內核變量。內核就是通過這個目錄,以文件的形式展現自己的內部信息,相當于 /proc 目錄為用戶態和內核態之間的交互搭建了一個橋梁,用戶態讀寫 /proc 下的文件,就是讀寫內核相關的配置參數。

比如常見的 /proc/cpuinfo/proc/meminfo/proc/net 就分別提供了 CPU、內存、網絡的相關參數。除此之外,還有很多的參數,如下所示:

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

可以看到,這里面有很多的數字表示的文件,這些其實是當前系統運行的進程文件,數字表示進程號(PID),每個文件包含該進程所有的配置信息,包括進程狀態、文件描述符、內存映射等等,我們可以看下:

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/

綜上,內核通過一個個的文件來暴露自己的系統配置信息,這些文件,有些是只讀的,有些是可寫的,有些是動態變化的,比如進程文件,當應用程序讀取某個 /proc/ 文件時,內核才會去注冊這個文件,然后再調用一組內核函數來處理,將相應的內核參數拷貝到用戶態空間,這樣用戶讀這個文件就可以獲取到內核的信息。一個大概的圖示如下所示:

sysctl

我們熟悉的 sysctl 是一個 Linux 命令,man sysctl 可以看到它的功能和用法。它主要是被用來修改內核的運行時參數,換句話說,它可以在內核運行過程中,動態修改內核參數。

它本質上還是用到了文件的讀寫操作,來完成用戶態和內核態的通信。它使用的是 /proc 的一個子目錄 /proc/sys。和 procfs 的區別在于:

procfs 主要是輸出只讀數據,而 sysctl 輸出的大部分信息是可寫的。

例如,我們比較常見的是通過 cat /proc/sys/net/ipv4/ip_forward 來獲取內核網絡層是否允許轉發 IP 數據包,通過 echo 1 > /proc/sys/net/ipv4/ip_forward 或者 sysctl -w net.ipv4.ip_forward=1 來設置內核網絡層允許轉發 IP 數據包。

同樣的操作,Linux 也提供了文件 /etc/sysctl.conf 來讓你進行批量修改。

sysfs

sysfs 是 Linux 2.6 才引入的一種虛擬文件系統,它的做法也是通過文件 /sys 來完成用戶態和內核的通信。和 procfs 不同的是,sysfs 是將一些原本在 procfs 中的,關于設備和驅動的部分,獨立出來,以 “設備樹” 的形式呈現給用戶。

sysfs 不僅可以從內核空間讀取設備和驅動程序的信息,也可以對設備和驅動進行配置。

我們看下 /sys 下有什么:

# ls /sys
block bus class dev devices firmware fs hypervisor kernel module power

可以看到這些文件基本上都跟計算機的設備和驅動等息息相關的。更多關于這些文件的解釋大家可以自行了解,這里就不過多展開了。

netlink

netlink 是 Linux 用戶態與內核態通信最常用的一種方式。Linux kernel 2.6.14 版本才開始支持。它本質上是一種 socket,常規 socket 使用的標準 API,在它身上同樣適用。比如創建一個 netlink socket,可以調用如下的 socket 函數:

#include <asm/types.h>
#include <sys/socket.h>
#include <linux/netlink.h>

netlink_socket = socket(AF_NETLINK, socket_type, netlink_family);

netlink 這種靈活的方式,使得它可以用于內核與多種用戶進程之間的消息傳遞系統,比如路由子系統,防火墻(Netfilter),ipsec 安全策略等等。

引申:

net-tools 工具通過 procfs(/proc) 和 ioctl 系統調用去訪問和改變內核網絡參數配置,而 iproute2 則通過 netlink 套接字接口與內核通信,前者已經被淘汰了,后者逐步成為標準。

總結

Linux 用戶態和內核態通信主要的四種方式,其中 netlink 和 procfs 是最常見的方式。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:永州 松原 廊坊 滄州 玉樹 北京 洛陽 張家界

巨人網絡通訊聲明:本文標題《詳解Linux用戶態與內核態通信的幾種方式》,本文關鍵詞  詳解,Linux,用戶,態,與,內核,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Linux用戶態與內核態通信的幾種方式》相關的同類信息!
  • 本頁收集關于詳解Linux用戶態與內核態通信的幾種方式的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产欧美日韩激情| 中文字幕亚洲不卡| 久久久精品免费免费| 亚洲少妇30p| 日韩二区在线观看| 成人网在线免费视频| 欧美色图天堂网| 国产亚洲一本大道中文在线| 一区二区三区四区中文字幕| 久久99精品国产.久久久久| 国产一区二区按摩在线观看| 欧美日韩美少妇| 国产精品美女久久久久久久网站| 亚洲h动漫在线| 国产美女娇喘av呻吟久久| 欧美日韩一区小说| 国产调教视频一区| 日韩av在线播放中文字幕| 国产福利精品一区二区| 正在播放亚洲一区| 亚洲精品菠萝久久久久久久| 国产精品原创巨作av| 51精品国自产在线| 亚洲综合成人在线| 成a人片国产精品| 亚洲精品一区二区三区香蕉| 玉足女爽爽91| 93久久精品日日躁夜夜躁欧美| 欧美日韩一区二区三区高清 | 亚洲精品日韩专区silk| 国产精品996| 国产日韩精品一区| 国产很黄免费观看久久| 亚洲国产精品二十页| 成人免费看片app下载| 中文字幕在线免费不卡| 一本色道综合亚洲| 一区二区三区中文免费| 精品婷婷伊人一区三区三| 亚洲成人在线网站| 精品国产一区二区三区久久久蜜月 | 欧美成人a视频| 久久精品国产精品青草| 国产欧美日韩亚州综合| 色综合中文字幕国产 | 精品动漫一区二区三区在线观看| 激情成人午夜视频| 国产精品每日更新在线播放网址| 一本大道av伊人久久综合| 亚洲国产视频在线| 日韩视频一区二区在线观看| 韩国中文字幕2020精品| 6080日韩午夜伦伦午夜伦| 国产一区二区中文字幕| 欧美韩日一区二区三区四区| 91麻豆蜜桃一区二区三区| 亚洲欧美成人一区二区三区| 88在线观看91蜜桃国自产| 韩国v欧美v亚洲v日本v| 最新不卡av在线| 欧美一区日韩一区| bt7086福利一区国产| 免费精品99久久国产综合精品| 国产日产欧美精品一区二区三区| 色噜噜狠狠成人网p站| 久久精品国产色蜜蜜麻豆| 日韩毛片视频在线看| 91精品国产综合久久精品麻豆 | 色嗨嗨av一区二区三区| 日本欧美在线观看| 国产精品久久久久7777按摩| 欧美三级一区二区| 成人在线综合网站| 蜜桃视频一区二区三区在线观看| 国产精品国产自产拍高清av| 欧美一级免费大片| 色婷婷激情综合| 国产美女视频一区| 日韩中文字幕不卡| 亚洲视频中文字幕| 久久久精品中文字幕麻豆发布| 欧美性一级生活| 成人国产精品免费网站| 久久国产欧美日韩精品| 亚洲一区二区在线播放相泽| 国产精品资源在线| 欧美丰满美乳xxx高潮www| 成av人片一区二区| 国产精品麻豆一区二区| 成人黄色在线看| 国产精品久线观看视频| 成人黄色在线网站| 国产精品久久久久桃色tv| 成人久久18免费网站麻豆| 国产精品私人影院| 高清成人免费视频| 色av成人天堂桃色av| 国产精品久久久久影院| 久久亚洲精精品中文字幕早川悠里| 欧美另类高清zo欧美| 91久久一区二区| 成人精品国产福利| 国产乱码一区二区三区| 精品无人码麻豆乱码1区2区 | 国产色产综合产在线视频| 日韩视频一区二区| 日韩限制级电影在线观看| 91精品国产色综合久久不卡电影| 欧美性受xxxx黑人xyx性爽| 色婷婷综合久色| 色综合天天综合色综合av | 欧美mv日韩mv国产网站app| 在线综合+亚洲+欧美中文字幕| 欧洲国内综合视频| 欧美亚洲国产怡红院影院| 色久综合一二码| 欧美性受xxxx黑人xyx| 欧美体内she精高潮| 欧美日韩精品二区第二页| 欧美色爱综合网| 欧美理论在线播放| 欧美一区二区三区小说| 2017欧美狠狠色| 久久精品一区八戒影视| 国产精品电影一区二区三区| 有码一区二区三区| 肉色丝袜一区二区| 久久成人久久爱| 成人毛片在线观看| 欧美中文字幕不卡| 日韩亚洲欧美一区| 国产三级精品三级在线专区| 亚洲国产高清在线| 一区av在线播放| 精品一区二区三区的国产在线播放| 国产真实乱子伦精品视频| 丁香网亚洲国际| 欧美中文字幕亚洲一区二区va在线| 欧美高清精品3d| 久久久久88色偷偷免费| 亚洲免费在线电影| 天天影视色香欲综合网老头| 久久电影网站中文字幕| 播五月开心婷婷综合| 欧美二区三区91| 国产日本一区二区| 亚洲高清免费在线| 国产一区二区三区日韩| 色94色欧美sute亚洲线路一久| 欧美一区二区三区免费观看视频 | 粗大黑人巨茎大战欧美成人| 91丨porny丨中文| 日韩欧美一区二区免费| 亚洲免费色视频| 国产在线播放一区二区三区| 91成人看片片| 国产日产精品一区| 奇米一区二区三区| 色呦呦日韩精品| 久久精品免费在线观看| 亚洲一区二区三区爽爽爽爽爽 | 精品一区二区日韩| 欧美最猛性xxxxx直播| 久久精品一二三| 日韩黄色片在线观看| 9l国产精品久久久久麻豆| 日韩免费观看高清完整版| 亚洲一区二区三区四区在线观看 | 顶级嫩模精品视频在线看| 欧美一区二区三区小说| 亚洲精品高清视频在线观看| 国产不卡视频在线观看| 日韩精品中文字幕在线一区| 一区二区三区成人| 99精品久久99久久久久| 国产日韩欧美精品电影三级在线| 五月婷婷久久丁香| 欧美三级电影一区| 一区2区3区在线看| 91免费观看在线| 中文字幕第一区| 国产精品一区不卡| 26uuu精品一区二区在线观看| 男女视频一区二区| 欧美日韩国产影片| 亚洲一二三区在线观看| 色婷婷av一区| 亚洲欧美偷拍三级| 99久久精品国产导航| 国产精品护士白丝一区av| 成人h版在线观看| 国产欧美日韩在线观看| 国产69精品久久久久777| 久久久久国产一区二区三区四区| 韩国精品久久久| 欧美国产日韩精品免费观看| 成人av资源在线| 欧美激情一区在线| 成人午夜看片网址| 亚洲人成网站在线|