進程,系統性能和任務計劃
進程概念
- 內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
- Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
- 進程ID(Process ID,PID)號碼被用來標記各個進程
- UID、GID、和SELinux語境決定對文件系統的存取和訪問權限
- 一般從執行進程的用戶來繼承
- 存在生命週期
- 進程建立:
- init:第一個進程(CentOS7軟鏈接到systemd)
- 進程:都由其父進程建立,fork(),父子關係,CoW
進程控制塊PCB
- 內核把進程存放在叫作任務隊列(task list)的雙向循環鏈表中 * 鏈表中的每一項都是類型爲task_struct,稱爲進程控制塊(Processing Control Block),PCB中包含一個具體進程的全部信息
- PCB包含信息:
- 進程id、用戶id和組id
- 程序計數器
- 進程的狀態(有就緒、運行、阻塞)
- 進程切換時須要保存和恢復的CPU寄存器的值
- 描述虛擬地址空間的信息
- 描述控制終端的信息
- 當前工做目錄
- 文件描述符表,包含不少指向file結構體的指針
- 進程可使用的資源上限(ulimit –a命令能夠查看)
- 輸入輸出狀態:配置進程使用I/O設備
Task struct和Task list
進程相關概念
- Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
- 物理地址空間和虛擬地址空間
- MMU:Memory Management Unit 負責轉換線性和物理地址
- TLB:Translation Lookaside Buffer 翻譯後備緩衝器
- LRU:Least Recently Used 近期最少使用算法,釋放內存
- 查看線程:cat /proc/PID/status |grep -i threads
MMU
程序在訪問一個內存地址指向的內存時,CPU不是直接把這個地址送到內存總線上,而是被送到MMU(Memory Management Unit),而後把這個內存地址映射到實際的物理內存地址上.程序操做的地址稱爲虛擬內存地址
算法
進程、線程和協程
用戶和內核空間
C代碼和內存佈局之間的對應關係
進程的基本狀態和轉換
進程的基本狀態:centos
- 建立狀態:進程在建立時須要申請一個空白PCB(process control block進程控制塊),向其中填寫控制和管理進程的信息,完成資源分配。若是建立工做沒法完成,好比資源沒法知足,就沒法被調度運行,把此時進程所處狀態稱爲建立狀態
- 就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就可以當即運行
- 執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態
- 阻塞狀態:正在執行的進程因爲某些事件(I/O請求,申請緩存區失敗)而暫時沒法運行,進程受到阻塞。在知足請求時進入就緒狀態等待系統調用
- 終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。沒法再執行
狀態之間轉換六種狀況:緩存
- 運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲就緒狀態
- 就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
- 運行——>阻塞:正在執行的進程因發生某等待事件而沒法執行,則進程由執行狀態變爲阻塞狀態,如發生了I/O請求
- 阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
- 如下兩種狀態是不可能發生的:
- 阻塞——>運行:即便給阻塞進程分配CPU,也沒法執行,操做系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
- 就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態
LRU算法
內存調度算法之一:安全
- 假設序列爲 4 3 4 2 3 1 4 2物理塊有3個,則
- 第1輪 4調入內存 4
- 第2輪 3調入內存 3 4
- 第3輪 4調入內存 4 3
- 第4輪 2調入內存 2 4 3
- 第5輪 3調入內存 3 2 4
- 第6輪 1調入內存 1 3 2
- 第7輪 4調入內存 4 1 3
- 第8輪 2調入內存 2 4 1
IPC進程間通訊
- IPC: Inter Process Communication
- 同一主機:pipe 管道
- socket 套接字文件
- signal 信號
- shm shared memory
- semaphore 信號量,一種計數器
- 不一樣主機:socket IP和端口號
- RPC remote procedure call
- MQ 消息隊列,如:Kafka,RabbitMQ,ActiveMQ
進程優先級
CentOS優先級:
網絡
- 進程優先級:
- 系統優先級:數字越小,優先級越高
- 實時優先級: 99-0 值最大優先級最高
- nice值:-20到19,對應系統優先級100-139
- Big O:時間複雜度,用時和規模的關係
- O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
進程狀態
- Linux內核:搶佔式多任務
- 進程類型:
- 守護進程: daemon,在系統引導過程當中啓動的進程,和終端無關進程
- 前臺進程:跟終端相關,經過終端啓動的進程
- 進程狀態:
- 運行態:running
- 就緒態:ready
- 睡眠態:
- 可中斷:interruptable
- 不可中斷:uninterruptable
- 中止態:stopped,暫停於內存,但不會被調度,除非手動啓動
- 僵死態:zombie,結束進程,父進程結束前,子進程不關閉