Linux 內核分析與應用 1 - 概覽
本系列是對 陳莉君 老師 Linux 內核分析與應用 [1] 的學習與記錄。講的非常之好,推薦觀看
留此記錄,蜻蜓點水, 可作拋磚引玉
- 概述
用到的幾個命令:
insmod
dmesg[2]lsmod[3]
章節測試:
部分可參考 [4]
<1>. Linux 得以流行,是因爲遵循了 GPL 協議,並不是因爲遵循 POSIX 標準 (錯)
linux 操作系統概述 [5]
linux 概述 [6]
<2>. 從 Linux 操作系統的整體結構來看,分兩大部分,用戶空間的應用程序和內核空間的 os 內核,二者之間是一種 c/s 結構,os 是服務者,應用程序是客戶,是一種請求和響應的關係。 (對)
Linux 用戶空間與內核空間 [7]
阮一峯 - User space 與 Kernel space[8]
<3>.Linux 內核提供機制而不是策略,系統調用是一種策略 (錯)
關於 Unix/Linux 的設計有一句通用的格言 “提供機制而不是策略”。換句話說,系統調用抽象出了用於完成某種確定目的的函數。至幹這些函數怎麼用完全不需要內核去關心。區別對待機制(mechanism) 和策略 (policy) 是 Unix/Linux 設計中的一大亮點。大部分的編程問題都可以被切割成兩個部分:“需要提供什麼功能”(機制)和“怎樣實現這些功能”(策略)。
<4>. 內核源碼中的雙向鏈表和哈希表都相當於內核源碼中的基本類型,對其操作只需要調用內核提供的相應 API 就可以。 (對)
Linux 內核中對雙向鏈表的使用, 簡直和 int 型一樣頻繁
<5>.Linux 內核把雙鏈表作爲基本類型存放於 types.h 文件中,是爲了隱藏雙鏈表的指針特性。 (對)
Linux 雙向鏈表的定義主要涉及到兩個文件:
-
include/linux/types.h
-
include/linux/list.h[9]
Linux 內核中雙向鏈表的經典實現 [10]
<6>. list.h 中的 list_entry()宏通過一個結構體中字段的地址可以求出該結構體的地址,從而可以訪問結構體的其他成員,是一種逆向思維。 (對)
Linux 內核中的 list_head 結構體以及 list_entry 宏 [11]
<7>.Linux 內核是單內核結構,執行效率高,可維護性好 (錯)
微內核效率不如單內核,但可維護性要好。minix,qnx,l4,還有谷歌剛推出的 fuchsia,均爲微內核。linux 大多數爲單內核
<8>. 內核文檔中 https://www.kernel.org/doc/html/latest/ 只包含各個子系統的文檔 (錯)
<9>. 可加裝的內核模塊在內核運行時候可加載和卸載,是開發一個新的文件系統,驅動程序的基本機制。 (對)
<10>. 內核模塊的修飾符__init 可加可不加,對模塊的運行沒有什麼影響 (錯)
linux kernel __init 和__exit 宏的作用 [12]
Linux 開發實戰指南文檔 13
<11>. 編寫 Linux 內核模塊時,不需要單獨寫一個 Makefile 文件,直接編譯就可以 (錯)
<12>.Linux 內核模塊運行在用戶空間 (錯)
<13>. 微內核比單內核的效率高 (錯)
<14>. Linux 內核模塊的插入和運行必須用 root 權限 (對)
<15>. Linux 的內核模塊不屬於 Linux 的幾個子系統 (對)
<16>.Linux 在超級計算機,可穿戴設備,嵌入式系統,移動終端,桌面等系統上都可以運行。 (對)
<17>. Linux 內核、GNU 工具以及其他一些自由軟件組成了人們常熟的 Linux 系統或者 Linux 發佈版。 (對)
<18>. lisit_entry(ptr,type,member) 宏返回的是 member 的地址 (錯)
[Linux 內核雙鏈表語句 list_entry(ptr, type, member) 理解](http://ilinuxkernel.com/?p=1062 "Linux 內核雙鏈表語句 list_entry(ptr, type, member"Linux 內核雙鏈表語句 list_entry(ptr, type, member) 理解 ") 理解")
<19>.list_for_each_saft() 宏和 list_for_each() 宏功能一樣,安全性有差異 (對)
<20>. 與體系結構(如 x86,ARM 等)相關的代碼存放在 arch 目錄 [14] 下 (對)
<21>. 創建進程屬於一種策略而不是機制 (錯)
<22>. ( ) 不屬於 Linux 的子系統 D
-
A. 進程管理
-
B. 內存管理
-
C. 文件系統
-
D. 模塊
<23>.Linux 操作系統遵循( )標準 C
-
A.GUN
-
B.GPL
-
C.POSIX
-
D.MMU
<24>. 觸摸屏屬於( )管理 B
-
A. 應用程序
-
B. 操作系統
-
C. 硬件廠家
-
D. 系統調用
<25>. 如果要從磁盤讀取一個文件,則主要與( )子系統打交道 C
-
A. 內存管理
-
B. 進程調度
-
C. 文件系統
-
D. 網絡
<26>. struct list_head 無法表達( )種數據結構 D
-
A. 隊和棧
-
B. 圖
-
C. 樹
-
D. 集合
深入理解 linux 內核 list_head 的實現 [15]
<27>. 谷歌的 Fuchsia 操作系統屬於 ( ) 結構 A
-
A. 微內核
-
B. 單內核
-
C.C/S
-
D. 面向對象
參考資料
[1]
Linux 內核分析與應用: https://next.xuetangx.com/course/XIYOU08091001441/1516763
[2]
dmesg: https://www.runoob.com/linux/linux-comm-dmesg.html
[3]
lsmod: https://www.runoob.com/linux/linux-comm-lsmod.html
[4]
部分可參考: https://tiku.link/post/106849.html
[5]
linux 操作系統概述: https://wenku.baidu.com/view/b270588d1eb91a37f0115c16.html
[6]
linux 概述: http://www.doc88.com/p-1751663666583.html
[7]
Linux 用戶空間與內核空間: https://blog.csdn.net/qq_29350001/article/details/51240230
[8]
阮一峯 - User space 與 Kernel space: https://www.ruanyifeng.com/blog/2016/12/user_space_vs_kernel_space.html
[9]
include/linux/list.h: https://github.com/torvalds/linux/blob/master/include/linux/list.h
[10]
Linux 內核中雙向鏈表的經典實現: https://www.cnblogs.com/skywang12345/p/3562146.html
[11]
Linux 內核中的 list_head 結構體以及 list_entry 宏: https://blog.csdn.net/rao_risk/article/details/8100005
[12]
linux kernel __init 和__exit 宏的作用: https://www.cnblogs.com/linengier/p/12380780.html
[13]
Linux 開發實戰指南文檔: https://tutorial.linux.doc.embedfire.com/zh_CN/latest/linux_driver/module.html
[14]
arch 目錄: https://github.com/torvalds/linux/tree/master/arch
[15]
深入理解 linux 內核 list_head 的實現: http://blog.chinaunix.net/uid-27122224-id-3277511.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/YtipZUGi_56Ce-E6hAPIKQ