经典面试题-Linux Kernel面试题
快速鏈接:
.
👉👉👉 個人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
目錄
- 一、經(jīng)典題目
- 1、主要有哪幾種內(nèi)核鎖?Linux 內(nèi)核的同步機制是什么?
- 2、Linux 中的用戶模式和內(nèi)核模式是什么含義?
- 3、怎么申請大塊內(nèi)存?vmalloc 和 kmalloc 有什么區(qū)別?
- 4、進(jìn)程間通信主要有哪幾種方式?
- 5、伙伴系統(tǒng)申請內(nèi)存的函數(shù)有哪些?
- 6、通過 slab 分配器申請內(nèi)存的函數(shù)有哪些?
- 7、Linux 的內(nèi)核空間和用戶空間如何劃分的?進(jìn)程地址空間布局圖?
- 8、vmalloc() 申請內(nèi)存有什么特點?
- 9、用戶程序使用 malloc() 申請的內(nèi)存空間在什么范圍?
- 10、在支持并使能 MMU 的系統(tǒng)中,Linux 內(nèi)核和用戶程序分別運行在物理地址模式還是虛擬地址模式?
- 11、ARM 處理器是通過幾級頁表進(jìn)行存儲空間映射的?
- 12、Linux 是通過什么組件來實現(xiàn)支持多種文件系統(tǒng)的?
- 13、Linux虛擬文件系統(tǒng)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有哪些?(至少寫出4個)
- 14、對文件系統(tǒng)的操作函數(shù)保存在哪個數(shù)據(jù)結(jié)構(gòu)中?
- 15、Linux 中的文件包括哪些?
- 16、創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用有哪些?
- 17、調(diào)用 schedule() 進(jìn)行進(jìn)程切換的方式有幾種?
- 18、Linux 調(diào)度程序是根據(jù)進(jìn)程的動態(tài)優(yōu)先級還是靜態(tài)優(yōu)先級來調(diào)度進(jìn)程的?
- 19、進(jìn)程調(diào)度的核心數(shù)據(jù)結(jié)構(gòu)是哪個?
- 20、如何加載、卸載一個模塊?
- 21、模塊和應(yīng)用程序分別運行在什么空間?
- 22、Linux 中的浮點運算由應(yīng)用程序?qū)崿F(xiàn)還是內(nèi)核實現(xiàn)?
- 23、模塊程序能否使用可鏈接的庫函數(shù)?
- 24、TLB 中緩存的是什么內(nèi)容
- 25、Linux 中有哪幾種設(shè)備?
- 26、字符設(shè)備驅(qū)動程序的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)是哪個?
- 27、設(shè)備驅(qū)動程序包括哪些功能函數(shù)?
- 28、如何唯一標(biāo)識一個設(shè)備?
- 29、Linux 通過什么方式實現(xiàn)系統(tǒng)調(diào)用?
- 30、Linux 軟中斷和工作隊列的作用是什么?
- 二、帶補充
- volilate 作用
- 信號量和互斥體的區(qū)別
- 三、靈魂的一問
- linux kernel你都熟悉什么?
- 講一講中斷機制?
- 講一講同步機制?
- 講一講MMU/CACHE?
- 三、安全相關(guān)
- optee os你知道什么?
- 講一講sharememrory
- 講一講secureboot
- 安全算法都有哪些?
- Linux Kernel掌握怎樣
- 微內(nèi)核的 IPC通信怎么實現(xiàn)的
一、經(jīng)典題目
1、主要有哪幾種內(nèi)核鎖?Linux 內(nèi)核的同步機制是什么?
原子變量
spinlock 自旋鎖
信號量semaphore、二值信號量
互斥體mutex
禁止強制、禁止軟中斷、禁止硬中斷
每處理器變量、每處理器計數(shù)器、內(nèi)存屏障
RCU
2、Linux 中的用戶模式和內(nèi)核模式是什么含義?
執(zhí)行在EL0的用戶程序,每個用戶程序都有自己的虛擬地址空間
執(zhí)行在EL1的kernel程序,整個kernel程序使用一個虛擬地址空間
3、怎么申請大塊內(nèi)存?vmalloc 和 kmalloc 有什么區(qū)別?
- vmalloc 用于申請大塊內(nèi)存,虛擬地址連續(xù),物理地址不一定連續(xù),不能直接用于DMA,在進(jìn)程地址空間有專門的一塊。
- kmalloc 用于申請小內(nèi)存,由 slab 管理實現(xiàn),一般至少小于4KB(page)。不能申請大于128K的數(shù)據(jù)。物理地址和虛擬地址都連續(xù),可用于DMA操作。
4、進(jìn)程間通信主要有哪幾種方式?
- 管道(Pipe)
- 命名管道(named pipe)
- 信號(Signal)
- 消息(Message)隊列
- 共享內(nèi)存
- 信號量(semaphore)
- 套接字(Socket)
5、伙伴系統(tǒng)申請內(nèi)存的函數(shù)有哪些?
- alloc_page(gfp_mask, order)
- __get_free_pages(gfp_mask, order)
6、通過 slab 分配器申請內(nèi)存的函數(shù)有哪些?
- 自己構(gòu)造對象:kmem_cache_create/kmem_cache_alloc
- 普通匿名內(nèi)存申請:kmalloc
7、Linux 的內(nèi)核空間和用戶空間如何劃分的?進(jìn)程地址空間布局圖?
8、vmalloc() 申請內(nèi)存有什么特點?
申請大塊內(nèi)存,虛擬地址連續(xù),物理地址不一定連續(xù),不能直接用于DMA。對于釋放函數(shù) vfree()。
9、用戶程序使用 malloc() 申請的內(nèi)存空間在什么范圍?
stack 和 heap 中間。小于128M的通過brk申請,大于的通過 mmap 申請
10、在支持并使能 MMU 的系統(tǒng)中,Linux 內(nèi)核和用戶程序分別運行在物理地址模式還是虛擬地址模式?
在開啟MMU之后,用戶程序和內(nèi)核程序,都是使用的虛擬地址
11、ARM 處理器是通過幾級頁表進(jìn)行存儲空間映射的?
L3 L2 L1 L0 L-1
要看你的系統(tǒng)的granue size和虛擬地址有效位的配置
12、Linux 是通過什么組件來實現(xiàn)支持多種文件系統(tǒng)的?
VFS(virtual file system)
13、Linux虛擬文件系統(tǒng)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有哪些?(至少寫出4個)
struct super_block、struct inode、struct file、struct dentry
14、對文件系統(tǒng)的操作函數(shù)保存在哪個數(shù)據(jù)結(jié)構(gòu)中?
struct file_operations
15、Linux 中的文件包括哪些?
- 執(zhí)行文
- 普通文
- 目錄文
- 鏈接文件
- 設(shè)備文件
- 管道文件
16、創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用有哪些?
- clone()
- fork()
- vfork();
系統(tǒng)調(diào)用服務(wù)例程:
- sys_clone
- sys_fork
- sys_vfork;
17、調(diào)用 schedule() 進(jìn)行進(jìn)程切換的方式有幾種?
- 系統(tǒng)調(diào)用 do_fork();
- 定時中斷 do_timer();
- 喚醒進(jìn)程 wake_up_process
- 改變進(jìn)程的調(diào)度策略 setscheduler();
- 系統(tǒng)調(diào)用禮讓 sys_sched_yield();
18、Linux 調(diào)度程序是根據(jù)進(jìn)程的動態(tài)優(yōu)先級還是靜態(tài)優(yōu)先級來調(diào)度進(jìn)程的?
Liunx調(diào)度程序是根據(jù)根據(jù)進(jìn)程的動態(tài)優(yōu)先級來調(diào)度進(jìn)程的,但是動態(tài)優(yōu)先級又是根據(jù)靜態(tài)優(yōu)先級根據(jù)算法計算出來的,兩者是兩個相關(guān)聯(lián)的值。因為高優(yōu)先級的進(jìn)程總是比低優(yōu)先級的進(jìn)程先被調(diào)度,為防止多個高優(yōu)先級的進(jìn)程占用CPU資源,導(dǎo)致其他進(jìn)程不能占有CPU,所以引用動態(tài)優(yōu)先級概念
19、進(jìn)程調(diào)度的核心數(shù)據(jù)結(jié)構(gòu)是哪個?
TODO
20、如何加載、卸載一個模塊?
insmod xxx.ko
rmmod xxx
21、模塊和應(yīng)用程序分別運行在什么空間?
模塊: 內(nèi)核空間
應(yīng)用程序: 用戶空間
22、Linux 中的浮點運算由應(yīng)用程序?qū)崿F(xiàn)還是內(nèi)核實現(xiàn)?
內(nèi)核也可以實現(xiàn),VFPV4架構(gòu)的,V0-V31寄存器
23、模塊程序能否使用可鏈接的庫函數(shù)?
模塊程序運行在內(nèi)核空間,不能鏈接庫函數(shù)。
24、TLB 中緩存的是什么內(nèi)容
ASID,物理地址,虛擬地址,NS比特位,MESI位等
25、Linux 中有哪幾種設(shè)備?
- 字符設(shè)備
- 塊設(shè)備
- 網(wǎng)絡(luò)設(shè)備
26、字符設(shè)備驅(qū)動程序的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)是哪個?
字符設(shè)備描述符struct cdev、cdev_alloc()用于動態(tài)的分配cdev描述符,cdev_add()用于注冊一個cdev描述符,cdev包含一個struct kobject類型的數(shù)據(jù)結(jié)構(gòu)它是核心的數(shù)據(jù)結(jié)構(gòu)
27、設(shè)備驅(qū)動程序包括哪些功能函數(shù)?
open()、,read()、write()、llseek()、realse()
28、如何唯一標(biāo)識一個設(shè)備?
Linux使用一個設(shè)備編號來唯一的標(biāo)示一個設(shè)備,設(shè)備編號分為:主設(shè)備號和次設(shè)備號,一般主設(shè)備號標(biāo)示設(shè)備對應(yīng)的驅(qū)動程序,次設(shè)備號對應(yīng)設(shè)備文件指向的設(shè)備,在內(nèi)核中使用dev_t來表示設(shè)備編號,一般它是32位長度,其中12位用于表示主設(shè)備號,20位用于表示次設(shè)備號,利用MKDEV(int major,int minor);用于生成一個dev_t類型的對象。
29、Linux 通過什么方式實現(xiàn)系統(tǒng)調(diào)用?
syscall,底層調(diào)用到svc同步異常指令
30、Linux 軟中斷和工作隊列的作用是什么?
實現(xiàn)中斷下半部分
二、帶補充
volilate 作用
信號量和互斥體的區(qū)別
三、靈魂的一問
linux kernel你都熟悉什么?
講一講中斷機制?
講一講同步機制?
講一講MMU/CACHE?
三、安全相關(guān)
optee os你知道什么?
講一講sharememrory
講一講secureboot
安全算法都有哪些?
Linux Kernel掌握怎樣
微內(nèi)核的 IPC通信怎么實現(xiàn)的
總結(jié)
以上是生活随笔為你收集整理的经典面试题-Linux Kernel面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [工具]-电脑磁盘爆满了,但又不知道哪些
- 下一篇: optee中MMU内存管理模型-页表的建