Linux的基本組成


用戶進程

圖形用戶界面 ? ? ? ? 服務(wù)器 ? ? ? ?命令行


Linux內(nèi)核

系統(tǒng)調(diào)用 ? ? ? ?進程管理 ? ? ? ?內(nèi)存管理 ? ? ? ?設(shè)備驅(qū)動程序


硬件

中央處理器(CPU) ? ? ? ?主內(nèi)存(RAM) ? ? ? ?磁盤 ? ? ? ?網(wǎng)絡(luò)端口


進程是指計算機中運行的所有程序,由內(nèi)核統(tǒng)一管理,它們組成了最頂層,稱為用戶空間,也叫用戶進程。


主內(nèi)存(main memory)

內(nèi)核和進程就在主內(nèi)存中進行


內(nèi)核負責管理以下四個方面:

進程:內(nèi)核決定哪個進程可以使用CPU

內(nèi)存:內(nèi)核管理所有的內(nèi)存,為進程分配內(nèi)存,管理進程間的共享內(nèi)存以及空閑內(nèi)存

設(shè)備驅(qū)動程序:作為硬件系統(tǒng)和進程之間的接口,內(nèi)核負責操控硬件設(shè)備

系統(tǒng)調(diào)用和支持:進程通常使用系統(tǒng)調(diào)用和內(nèi)核通信


進程管理:

任何一個特定的時間內(nèi)只能有一個進程可以使用CPU

多個進程輪流使用CPU

時間單位為毫秒級

一個進程讓出CPU使用權(quán)給另外一個進程稱為上下文切換(context switch)

內(nèi)核負責上下文切換

工作原理:

1.CPU為每個進程計時,到時即停止進程,并切換至內(nèi)核模式,由內(nèi)核接管CPU控制權(quán)

2.內(nèi)核記錄下當前CPU和內(nèi)存的狀態(tài)信息,這些信息在恢復(fù)被停止的進程時需要用到

3.內(nèi)核執(zhí)行上一個時間段內(nèi)的任務(wù)

4.內(nèi)核準備執(zhí)行下一個進程,從準備就緒的進程中選擇一個執(zhí)行

5.內(nèi)核為新進程準備CPU和內(nèi)存

6.內(nèi)核將新進程執(zhí)行的時間段通知CPU

7.內(nèi)核將CPU切換至用戶模式,將CPU控制權(quán)交給新進程

內(nèi)核是在上下文切換的時間段間隙中運行的

進程管理涉及進程的啟動、暫停、恢復(fù)、終止


內(nèi)存管理:

內(nèi)存在上下文切換中管理內(nèi)存

MMU(Memory Management Unit)內(nèi)存管理單元

MMU使用虛擬內(nèi)存的訪問機制


System call (systemcall) 系統(tǒng)調(diào)用

打開、讀取和寫文件這些操作都涉及到系統(tǒng)調(diào)用fork( )和exec( )

fork( ):當進程調(diào)用fork( )時,內(nèi)核創(chuàng)建一個和該進程幾乎一模一樣的副本

exec( ):當進程調(diào)用exec( program)時,內(nèi)核啟動program來替換當前的進程

除了init以外,Linux中的所有用戶進程都是通過fork( )來啟動的

除了創(chuàng)建副本外,大多數(shù)情況下還可以使用exec( )來啟動新的進程

例如你在命令行運行l(wèi)s命令來顯示目錄內(nèi)容,當你的終端窗口中輸入ls時,終端窗口中的shell調(diào)用fork( )創(chuàng)建一個shell的副本,然后該副本調(diào)用exec( )來運行l(wèi)s

shell即為命令行界面

Linux使用了一個增強型版本的Bourne shell ,我們稱之為bash或Bourne-again shell

大部分Linux系統(tǒng)的默認shell是bash,通常有一個符號鏈接為/bin/sh

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容