linux進程管理相關概念
進程概念
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID(Process ID,PID)號碼被用來標記各個進程
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,
通常從執行進程的用戶來繼承
存在生命周期
task struct:Linux內核存儲進程信息的數據結構格式
task list:多個任務的的task struct組成的鏈表
進程創建:
init:第一個進程
Centos7 是 systemd
父子關系
init:進程:都由其父進程創建,CoW (寫實復制)、fork(), clone(克隆)
CoW (寫實復制):如果創建的子進程,子進程還沒有發生任何的數據改動,這時候用的是父進程的內存空間,總體來說節約了空間,這點跟LVM邏輯卷快照類似
進程的基本狀態和轉換
創建狀態:
進程在創建時需要申請一個空白PCB(process control block進程控制塊),向其中填寫控制和管理進程的信息,完成資源分配。如果創建工作無法完成,比如資源無法滿足,就無法被調度運行,把此時進程所處狀態稱為創建狀態就緒狀態:
進程已準備好,已分配到所需資源,只要分配到CPU就能夠立即運行
執行狀態:
進程處於就緒狀態被調度後,進程進入執行狀態
阻塞狀態:
正在執行的進程由於某些事件(I/O請求,申請緩存區失敗)而暫時無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用
終止狀態:
進程結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行
狀態之間轉換六種情況
運行——>就緒:
1,主要是進程占用CPU的時間過長,而系統分配給該進程占用CPU的時間是有限的;2,在采用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變為就緒狀態。
就緒——>運行:
運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
運行——>阻塞:
正在執行的進程因發生某等待事件而無法執行,則進程由執行狀態變為阻塞狀態,如發生了I/O請求
阻塞——>就緒:
進程所等待的事件已經發生,就進入就緒隊列
以下兩種狀態是不可能發生的:
阻塞——>運行:即使給阻塞進程分配CPU,也無法執行,操作系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態
進程優先級
系統優先級:
系統整個所有進程從最低到最大的優先級,其中數字越小,優先級越高。
Centos4、5系統上0-139
centos6 系統上0-98,99
實時優先級:
99-0 值最大優先級最高
nice優先級:
-20到19,對應系統優先級100-139或99,nice值越大,優先級越低
Big O:時間復雜度,用時和規模的關系
O(1)衡定, O(logn), O(n)線性, O(n^2)拋物線, O(2^n)指數型,
進程內存
進程內存:
Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
LRU:Least Recently Used 近期最少使用算法,釋放內存,
物理地址空間和線性地址空間
MMU:Memory Management Unit負責轉換線性和物理地址
TLB:Translation Lookaside Buffer 翻譯後備緩沖器,用於保存虛擬地址和物理地址映射關系的緩存IPC: Inter Process Communication
同一主機: signal:信號
shm: shared memory
semaphore:信號量,一種計數器
不同主機:socket: IP和端口號
RPC: remote procedure call
MQ:消息隊列,Kafka,ActiveMQ
進程狀態
Linux內核:搶占式多任務
進程類型:
守護進程: daemon,在系統引導過程中啟動的進程,和終端無關進程
前臺進程:跟終端相關,通過終端啟動的進程
註意:兩者可相互轉化
進程狀態:
運行態:running
就緒態:ready
睡眠態:
可中斷:interruptable
不可中斷:uninterruptable
停止態:stopped,暫停於內存,但不會被調度,除非手動啟動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉
linux進程管理相關概念