13-1 進程,系統性能和任務計劃

進程,系統性能和任務計劃

進程概念

  • 內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
  • 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

task

進程相關概念

  • 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),而後把這個內存地址映射到實際的物理內存地址上.程序操做的地址稱爲虛擬內存地址
MMU算法

進程、線程和協程

process

用戶和內核空間

UserSpaceAndKernelSpace

C代碼和內存佈局之間的對應關係

c

進程的基本狀態和轉換

change

進程的基本狀態: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個,則
    LRU
  • 第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

進程優先級

pre

CentOS優先級:
centos網絡

  • 進程優先級:
    • 系統優先級:數字越小,優先級越高
      • 0-139:各有140個運行隊列和過時隊列
    • 實時優先級: 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,結束進程,父進程結束前,子進程不關閉
相關文章
相關標籤/搜索