用戶進程
圖形用戶界面 ? ? ? ? 服務(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