這星期講了關於Linux內核的編譯和Linux的內核模塊,淺顯易懂,所以寫出來和大家一起分享學習成果。首先說明,這只是簡單的編譯,和手動添加模塊,而這篇主要介紹linux的內核分類,和linux內核相關的兩個文件夾/proc /sys 這是實現內核編譯和添加內核模塊的理論基礎。
內核的分類:
1. 微內核:盡可能的保證內核的精簡,所有的設備都需要安裝驅動程序(不知道這樣說准確否) 例如windows,你所有的設備的驅動城區都是你後來裝的。
2. 單內核:設備直接融入到內核中去。
linux屬於單內核,但是由於它巧妙的設計(可以這樣想,內核外表有很多“洞”用於連接模塊),它可以將很多設備做成模塊,當需要時自動加入內核,由於是在內核中工 作,所以效率非常高。
從理論上來講,微內核是更先進的設計,但是到目前為止,它的優勢都沒有發揮出來,linux由於單內核的設計,所以造成了驅動程序難安裝,難研發。
Linux內核的分類
1.kernel 內核本身
還記得initrd嗎?它其實是生成的,從過/sbin/mkinitrd這個腳本,在你安裝操作系統後,自動生成,用於輔助內核。
2.kernel object 內核對象(內核模塊)
它們是以.ko結尾的文件,所有的,ko文件只能在內核加載。他們位於/lib/modules目錄 大小50M左右,內核將文件系統和各種外圍驅動都做成模塊放在這裡面,而且每一個 不同版本的內核都對應一個和內核版本名字相同的文件夾存放對應的內核模塊文件###必須嚴格對應,否則會出錯
內核編譯時選擇的選項不同,功能也不同
RedHat提供了3個32位核心版本,2個64位核心版本
32位
kernel 最多支持32位cpu,最多支持4G內存
kernel:1G 啟動時kernel要占去1G內存,留給進程的只有3G
process:3G
kernel-PAE 最多支持32顆對稱多處理器,支持16G內存
單個進程只能最多3G內存,對
kernel-xen 支持基於xen半虛擬化 ,現在不支持,轉向KVM
64位:
kernel : 64個cpu, 512G
kernel-xen:126顆cpu,512G內存
以目前的技術可以支持到1T的內存
內核參數:
內核可以接受很多參數,例如grub.conf在啟動時傳遞給內核啟動等級。而在系統運行的時候也可以傳遞內核參數,內核工作在內核空間,但是用戶程序工作在用戶空間所以需要通過用戶空間傳遞一些參數給內核,讓內核按我們的需要來工作。
那麼向內核傳遞參數,這就是今天這兩個文件夾的作用。
他們的作用:
/porc 正在運行的內核信息映射
主要輸出:進程信息
內存資源信息
磁盤分區信息等等
/sys
硬件設備的驅動程序信息
它們都是偽文件系統,如果了解這些文件的參數,並向裡面傳遞特殊數值,完全可以實現實時調整內核工作特征和硬件工作特征。
那麼我們打開/proc目錄來查看裡面的內容,具體命令我就不寫了,這裡我只根據目錄樹來介紹我學到的各個目錄的作用(通過顏色識別),如果您有興趣可以看下~
/proc/
1/cmdline 啟動進程的命令行命令及其參數是什麼
1/proc/cmdline gurb向內核傳遞的參數文件,以後可以通過腳本讀取它的參數,來判定啟動時向內核傳遞什麼信息
1/maps 內存使用信息的映射
1/mem 內存信息
1/io 讀寫
1/stat 進程信息
1/status
acpi 高級隊員管理子系統相關信息
asoud 聲音信息
budyinfo 伙伴系統信息,實現內存回收的子系統,防止內存碎片
bus 系統硬件總線信息
cpuinfo
crypto 加密
devices 當前系統上所有的字符設備和塊設備
diskstat 磁盤狀態信息 (很難懂)
iostat 通過這個文件可以查看它的信息
dma 直接內存訪問,實現內存與對應的磁盤設備,直接映射以後,訪問將數據脫離cpu管理時,仍然可以從磁盤讀取到內存的一種
系統優化設備
fb (frame buffer) 幀緩存,對一些特殊的顯卡顯示設備提供驅動。
filesystems 當前系統中啟用的所有文件系統
/cpuset cpu分組,可以實現進程和cpu綁定,可以將它掛載來查看那捆綁信息,它也是一個偽目錄
ide
fs
interruptes 中斷(硬終端,軟中斷)
ioports 硬件IO端口信息
loadavg 平均負載,uptime命令查看這個文件
locks 文件鎖,文件進程不允許兩個進程同時寫文件
molues 當前系統上正在時候的模塊
mdstat RAID
meminfo 內存信息
partitions 內核識別的分區信息
schedstat 進程調度信息
slabinfo 內存子系統信息和budyinfo一樣
swaps 交換分區信息
uptime uptime命令顯示的文件
version `uname -r`
vmstat
zoneinfo 內存的分區信息,Normal段 DMA段 BIOS段
/proc/sys 凡是輸出在sys目錄裡的信息,都是可以通過調整他們的參數來管理內核
crypto
debug
dev
ls
fs
kernel
net
/ipv4 裡面都是可以調整的網絡模塊
/ icmp_echo_ignore_all 改為1別人就ping不同
ip_forward 用於定義如果主機上有兩塊網卡,或者一個網卡有兩個地址,並且在不同網絡段,
它能啟用在兩個網絡之間實現數據包路由(直連路由)轉發功能。它可以決定你的
主機是否可以作為路由器或網關使用。默認為0
max_orphans 最大孤兒鏈接數
tcp_fin_timeout tcp fin數據包等待超時時間
tcp_max_syn_backets 網絡調優其實就是調這些參數
tcp_mem 緩沖大小
tcp_rmen 讀緩沖大小
tcp_ wmen 寫緩沖大小
tcp_reuse tcp的鏈接數是否可重用,多次時間重用
sunrpc
vm
/dorp_caches 用於釋放內存裡緩存
區別哪些文件可以傳遞參數:凡是有w權限的都是可以傳遞參數的