Linux 内核经典面试题
點擊上方“服務端思維”,選擇“設為星標”
回復”669“獲取獨家整理的精選資料集
回復”加群“加入全國服務端高端社群「后端圈」
內核經典面試題總覽
主要有哪幾種內核鎖?Linux 內核的同步機制是什么?
Linux 中的用戶模式和內核模式是什么含義?
怎么申請大塊內存?vmalloc 和 kmalloc 有什么區別?
進程間通信主要有哪幾種方式?
伙伴系統申請內存的函數有哪些?
通過 slab 分配器申請內存的函數有哪些?
Linux 的內核空間和用戶空間如何劃分的?進程地址空間布局圖?
vmalloc() 申請內存有什么特點?
用戶程序使用 malloc() 申請的內存空間在什么范圍?
在支持并使能 MMU 的系統中,Linux 內核和用于程序分別運行在物理地址模式還是虛擬地址模式?
ARM 處理器是通過幾級頁表進行存儲空間映射的?
Linux 是通過什么組件來實現支持多種文件系統的?
Linux虛擬文件系統的關鍵數據結構有哪些?(至少寫出4個)
對文件系統的操作函數保存在哪個數據結構中?
Linux 中的文件包括哪些?
創建進程的系統調用有哪些?
調用 schedule() 進行進程切換的方式有幾種?
Linux 調度程序是根據進程的動態優先級還是靜態優先級來調度進程的?
進程調度的核心數據結構是哪個?
如何加載、卸載一個模塊?
模塊和應用程序分別運行在什么空間?
Linux 中的浮點運算由應用程序實現還是內核實現?
模塊程序能否使用可鏈接的庫函數?
TLB 中緩存的是什么內容
Linux 中有哪幾種設備?
字符設備驅動程序的關鍵數據結構是哪個?
設備驅動程序包括哪些功能函數?
如何唯一標識一個設備?
Linux 通過什么方式實現系統調用?
Linux 軟中斷和工作隊列的作用是什么?
0x01 答案
1. 主要有哪幾種內核鎖?Linux 內核的同步機制是什么?
自旋鎖:spin_lock 忙等,中斷中使用
信號量:semxxx down/up write/read
mutex:初始化為1的信號量
讀寫鎖,RCU(read-copy update)
2. Linux 中的用戶模式和內核模式是什么含義?
cpu mode,用戶模式只能通過系統調用操作硬件資源,內核模式可以直接操作硬件資源
3. 怎么申請大塊內存?vmalloc 和 kmalloc 有什么區別?
vmalloc 用于申請大塊內存,虛擬地址連續,物理地址不一定連續,不能直接用于DMA,在進程地址空間有專門的一塊。
kmalloc 用于申請小內存,由 slab 管理實現,一般至少小于4KB(page)。不能申請大于128K的數據。物理地址和虛擬地址都連續,可用于DMA操作。
4. 進程間通信主要有哪幾種方式?
管道:兩個進程需要有共同的祖先,pipe/popen
命名管道:兩個進程可以無關
信號
消息隊列
共享內存
信號量
套接字
Android:binder/ashmem
5. 伙伴系統申請內存的函數有哪些?
alloc_page(gfp_mask, order)
__get_free_pages(gfp_mask, order)
6. 通過 slab 分配器申請內存的函數有哪些?
自己構造對象:kmem_cache_create/kmem_cache_alloc
普通匿名內存申請:kmalloc
7. Linux 的內核空間和用戶空間如何劃分的?進程地址空間布局圖?
32位可配置3G/1G, 2G/2G,一般是兩級頁表
64位可配置幾級頁表,一般可選3級/4級頁表,256G/256G,或512T/512T
8. vmalloc() 申請內存有什么特點?
申請大塊內存,虛擬地址連續,物理地址不一定連續,不能直接用于DMA。對于釋放函數 vfree()。
9. 用戶程序使用 malloc() 申請的內存空間在什么范圍?
stack 和 heap 中間。小于128M的通過brk申請,大于的通過 mmap 申請。
10. 在支持并使能 MMU 的系統中,Linux 內核和用于程序分別運行在物理地址模式還是虛擬地址模式?
都運行在虛擬地址模式,頁表轉換對應由硬件單元MMU完成。
11. ARM 處理器是通過幾級頁表進行存儲空間映射的?
兩級頁表,PGD和PTE
12. Linux 是通過什么組件來實現支持多種文件系統的?
VFS(virtual file system)
13. Linux虛擬文件系統的關鍵數據結構有哪些?(至少寫出4個)
super_block超級塊
inode索引節點
dentry目錄項
file文件
14. 對文件系統的操作函數保存在哪個數據結構中?
struct file_operations
15. Linux 中的文件包括哪些?
可執行文件,普通文件,目錄文件,鏈接文件,設備文件,管道文件
16. 創建進程的系統調用有哪些?
clone, fork, vfork
17. 調用 schedule() 進行進程切換的方式有幾種?
do_fork/do_timer/wake_up_process/setscheduler/sys_sched_yield
18. Linux 調度程序是根據進程的動態優先級還是靜態優先級來調度進程的?
cfs 會計算虛擬時間,還有一個計算出來的優先級。
實時進程根據xx
19. 進程調度的核心數據結構是哪個?
struct runqueue
20. 如何加載、卸載一個模塊?
ismod, rmmod
21. 模塊和應用程序分別運行在什么空間?
模塊運行在內核空間,應用程序運行在用戶空間
22. Linux 中的浮點運算由應用程序實現還是內核實現?
由應用程序實現,對應的數學庫函數。
23. 模塊程序能否使用可鏈接的庫函數?
module 運行在內核空間,不能鏈接庫函數。
24. TLB 中緩存的是什么內容
translation lookaside buffer, 也叫快表,用作頁表緩沖。記錄虛擬地址和物理地址的對應關系,用于加快地址轉換。
25. Linux 中有哪幾種設備?
字符設備和塊設備
26. 字符設備驅動程序的關鍵數據結構是哪個?
struct cdev: kobject
cdev_alloc()
cdev_add()
27. 設備驅動程序包括哪些功能函數?
open/read/write/ioctl/release/llseek
28. 如何唯一標識一個設備?
主設備號和次設備號。dev_t,12位表示主設備號,20位表示次設備號。
MKDEV(int major, int minor)用于生產一個 dev_t 類型的對象。
29. Linux 通過什么方式實現系統調用?
軟件中斷。系統調用編號,異常處理程序
30. Linux 軟中斷和工作隊列的作用是什么?
軟中斷:不可睡眠阻塞,處于中斷上下文,不能進程切換,不能被自己打斷。
工作隊列:處理進程上下文中,可以睡眠阻塞。
— 本文結束 —
●?漫談設計模式在 Spring 框架中的良好實踐
●?顛覆微服務認知:深入思考微服務的七個主流觀點
●?人人都是 API 設計者
●?一文講透微服務下如何保證事務的一致性
●?要黑盒測試微服務內部服務間調用,我該如何實現?
關注我,回復 「加群」 加入各種主題討論群。
對「服務端思維」有期待,請在文末點個在看
喜歡這篇文章,歡迎轉發、分享朋友圈
在看點這里
總結
以上是生活随笔為你收集整理的Linux 内核经典面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25LINQ拾遗及实例
- 下一篇: linux 其他常用命令