Linux 內核分析與應用 1 - 概覽

本系列是對 陳莉君 老師 Linux 內核分析與應用 [1] 的學習與記錄。講的非常之好,推薦觀看

留此記錄,蜻蜓點水, 可作拋磚引玉


  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 雙向鏈表的定義主要涉及到兩個文件:

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

<23>.Linux 操作系統遵循( )標準  C

<24>. 觸摸屏屬於( )管理   B

<25>. 如果要從磁盤讀取一個文件,則主要與( )子系統打交道   C

<26>. struct list_head 無法表達( )種數據結構    D

深入理解 linux 內核 list_head 的實現 [15]

<27>. 谷歌的 Fuchsia 操作系統屬於 ( ) 結構    A

參考資料

[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