一某弦、Linux介紹
1.1 Unix簡(jiǎn)介
- Unix因?yàn)槠浒踩煽客┯洌咝?qiáng)大的特點(diǎn)在服務(wù)器領(lǐng)域得到了廣發(fā)的應(yīng)用。直到GNU/Linux流行開(kāi)始前宗挥,Unix也是科學(xué)計(jì)算乌庶、大型機(jī)、超級(jí)電腦等所用操作系統(tǒng)的主流契耿。
- Unix的誕生:湯普遜和里奇最早是在貝爾實(shí)驗(yàn)室開(kāi)發(fā)Unix
1.2 Linux的誕生
1991年瞒大,在赫爾辛基,Linus Toral開(kāi)始寫了一個(gè)項(xiàng)目搪桂,目的是用來(lái)訪問(wèn)大學(xué)里面的大型Unix服務(wù)器的虛擬終端透敌。他專門寫了一個(gè)用于他當(dāng)時(shí)正在用的硬件的,與系統(tǒng)操作系統(tǒng)無(wú)關(guān)的程序锅棕,開(kāi)發(fā)是在Minix拙泽,用的編譯器是GCC來(lái)完成的淌山,這個(gè)項(xiàng)目后面逐漸轉(zhuǎn)變?yōu)長(zhǎng)inux內(nèi)核裸燎。
1.3 Linux的全局圖
5713484-64910e3e959d8bbb.png
1.4 Linux的源碼目錄結(jié)構(gòu)
目錄 | 解釋 | 部分子子目錄 |
---|---|---|
kernel | 內(nèi)核管理相關(guān),進(jìn)程調(diào)度等 | sched/fork等 |
fs | 文件子系統(tǒng) | ext4/f2fs/fuse/debugfs/proc等 |
mm | 內(nèi)存子系統(tǒng) | |
drivers | 設(shè)備驅(qū)動(dòng) | staging/cpufreq/gpu 等 |
arch | 所有CPU系統(tǒng)結(jié)構(gòu)相關(guān)的代碼 | arm/x86等 |
include | 頭文件 | linux/uapi/asm_generic等 |
lib | 標(biāo)準(zhǔn)通用的C庫(kù) | |
ipc | 進(jìn)程通信相關(guān) | |
init | 初始化過(guò)程(非系統(tǒng)引導(dǎo)) | |
block | 塊設(shè)備驅(qū)動(dòng)程序 | |
crypto | 加密泼疑、解密德绿、校驗(yàn)算法 | |
Documentation | 說(shuō)明文檔 |
2 內(nèi)核態(tài)與用戶態(tài)
Binder驅(qū)動(dòng)里面會(huì)用到
2.1 內(nèi)核態(tài)和用戶態(tài)的簡(jiǎn)介
- 內(nèi)核態(tài):CPU可以訪問(wèn)內(nèi)存所有數(shù)據(jù),包括外圍設(shè)備退渗,例如硬盤移稳、網(wǎng)卡,CPU可以將自己從一個(gè)程序切換到另外一個(gè)程序会油。
- 用戶態(tài): 只能受限的訪問(wèn)內(nèi)存个粱,且不允許訪問(wèn)外圍設(shè)備,占用CPU的能力被剝削翻翩,CPU資源可以被其他程序獲取都许。
- 由于需要限制不同的程序之間的訪問(wèn)能力稻薇,防止他們獲取別的程序的內(nèi)存數(shù)據(jù),或者獲取外圍設(shè)備的數(shù)據(jù)胶征,并發(fā)送網(wǎng)絡(luò)塞椎,CPU劃分出兩個(gè)權(quán)限等級(jí) ----用戶態(tài) 和 內(nèi)核態(tài)。
2.2 用戶態(tài)與內(nèi)核態(tài)的切換
2.2.1 切換簡(jiǎn)介
- 所有用戶程序都是運(yùn)行在用戶態(tài)的睛低,但是有時(shí)候程序確實(shí)需要做一些內(nèi)核態(tài)的事情案狠,例如從硬盤讀取數(shù)據(jù),或者從鍵盤獲取輸入等钱雷。
- 唯一可以這這些事情的就是 操作系統(tǒng) 骂铁,所以這時(shí)候 程序 就需要先向 操作系統(tǒng) 請(qǐng)求,以 程序 的名字來(lái)執(zhí)行這些操作罩抗。
- 需要一個(gè)這樣的機(jī)制:用戶態(tài) 切換到 內(nèi)核態(tài)从铲,但是不能控制內(nèi)核態(tài)中執(zhí)行的執(zhí)行這種機(jī)制叫做系統(tǒng)調(diào)用,在CPU中的實(shí)現(xiàn)稱之為"陷阱指令(Trap Instruction)"
2.2.2 系統(tǒng)調(diào)用機(jī)制流程
- 用戶態(tài)程序?qū)⒁恍?shù)據(jù)值放在寄存器中澄暮,或者使用參數(shù)創(chuàng)建一個(gè)堆棧(stack frame)名段,以表明需要操作系統(tǒng)提供的服務(wù)。
- 用戶態(tài)程序執(zhí)行陷阱指令
- CUP切換到內(nèi)核態(tài)泣懊,并跳到內(nèi)存指定位置的指令伸辟,這些指令是操作系統(tǒng)的一部分,他們具有內(nèi)存保護(hù)馍刮,不可被用戶態(tài)程序訪問(wèn)
- 這些指令稱之為 陷阱 (trap) 或者新系統(tǒng)調(diào)用處理器 ( system call hanlder )信夫。他們會(huì)讀取程序放入內(nèi)存的數(shù)據(jù)參數(shù),并執(zhí)行程序請(qǐng)求的服務(wù)卡啰。
- 系統(tǒng)調(diào)用完成后静稻,操作系統(tǒng)會(huì)重置CPU為用戶態(tài)并返回系統(tǒng)調(diào)用的結(jié)果。