程序的執行方式
順序方式(*)
內存中只能駐留一個程序,前一個程序結束,後一個程序才能進來,並且有着嚴格的先後次序
順序執行的特點:
- 順序性:程序執行有着明確的先後順序
- 封閉性:程序運行時獨佔所有資源
- 可再現性:初始條件相同,若程序執行順序不變,則每次得到的結果一定相同
問題:
- 無法滿足高性能
併發執行(***)
併發指一段時間內執行多個程序。多個程序同時進入內存,輪流交替執行。
併發執行的特點:
-
間斷性:交替執行就是走走停停
-
失去了封閉性:程序不再獨佔系統資源
-
不可再現性:程序執行有多種結果。
並行執行
同一時刻有多個程序執行,只能在多處理機上實現
進程
進程是研究併發方式下,程序的執行。
進程的概念:進程是進程實體的運行過程,是系統進行資源分配和調度的一一個獨立單位。
進程實體:由程序段、相關數據段和PCB組成
進程的特徵
- 併發性, 多個進程在一段時 間內同存於內存中同時運行
- 動態性,進程由創建而產生,由調度而執行,由撤消而消亡。
- 獨立性,進程是能獨立運行、資源分配、調度的基本單位。
- 結構性,進程映像由程序、數據、棧和進程控制塊( PCB )構成。
- 異步性,進程按各自獨立、不可預知的速度向前推進。
進程的狀態
有三個狀態:
- 就緒狀態:指程序已經處於準備好運行的狀態。
- 執行狀態:指程序已經獲得CPU,正在執行。
- 阻塞狀態:指程序的執行因爲某些原因無法繼續執行。
進程控制塊(PCB)
- 用來描述進程的基本情況和活動過程,進而控制和管理進程。(類似於學籍、戶口等)
- 進程創建時會建立一個PCB,結束時會收回PCB
進程控制塊中的信息:
- 進程標識符:包括內部標識符和外部標識符。
- 處理機狀態:處理機狀態包括通用寄存器、程序計數寄存器、程序狀態寄存器、棧寄存器信息。
- 進程控制信息:程序棧和數據地址,同步和通信機制,資源清單,鏈接指針。
- 進程調度信息
進程控制塊中的組織方式
-
線性方式
-
鏈接方式
-
索引方式
進程控制
-
進程控制用於創建、終止、阻塞和喚醒進程。
-
進程控制由操作系統內核原語來實現。
原語是由若干條指令組成,用於完成一定功能的一個過程,所有的指令要麼全做,要麼全不做。(一個函數)
用戶態:具有較低特權的執行狀態,進行執行規定的指令,訪問特定的寄存器和存儲區。
系統態(內核態):具有較高特權,能執行全部的指令,訪問所有的寄存器和存儲區。
進程的四個操作
進程的創建
引起進程創建的事件:
- 用戶執行應用程序。
- 用戶登錄。
- 啓動服務。
- 程序創建進程。
進程創建的過程(必須要求是原語):
- 申請空白PCB
- 爲新進程分配資源,如內存空間等
- 初始化PCB
- 將進程插入就緒隊列
進程的終止
引起進程終止的事件:
- 正常結束。
- 異常結束。
- 外界干預。
進程的終止過程:
-
檢查進程狀態。
-
有無子孫需要終止。
-
歸還進程全部資源。
-
將PCB從進程中移除。
進程的阻塞和進程的喚醒
進程調度概念
處理機調度的層次:
- 高級調度
- 低級調度
- 中級調度
引起進程調度的事件:
- 進程終止。
- 進程創建。
- 進程阻塞。
- 進程喚醒。
- 外部設備中斷。
進程切換時需要保存和恢復現場。
進程調度的方式
-
搶佔式調度:允許調度程序根據某種原則,暫停某個佔用處理機的進程,搶佔已經分配出去的處理機。搶佔的原則有優先權原則、短作業優先原則和時間片原則。
-
非搶佔式調度:進程一旦獲得處理機,只有在該進程任務完成或因某事件而阻塞時,才讓出處理機,決不允許某進程搶佔已經分配出去的處理機。(只有時間片用完才能調度)
衡量調度算法指標
面向用戶(***):
- 平均週轉時間:所有周轉時間求平均。
- 帶權週轉時間:一個程序的週轉時間除以服務的時間。(>=1)
- 平均帶權週轉時間:對帶權週轉時間求平均。
週轉時間:從作業被提交給系統開始,到作業完成爲止的這段時間間隔。
面向系統:
- 吞吐量:在單位時間內系統所完成的作業數。
- 處理機利用率:在過去一 段時間內CPU被佔用的時間總和。
- 各類資源的平衡利用率:保證系統所有的資源被合理利用。
進程調度算法(計算***)
先來先服務調度算法(***)
先來的進程先搶到CPU,有利於長作業,不利於短作業
短作業優先調度算法(***)
在分配時,優先分配給服務時間最短的,降低了系統的平均週轉時間,對長作業不利。
只有在搶佔的時候,進程的創建纔會導致需要重新分配CPU,非搶佔式在進程終止的時候分配。
非搶佔方式:
搶佔式:
高優先權調度算法(***)
按照優先權重分配CPU,優先數越小,優先權越大
高響應比優先調度算法
按照響應比去分配CPU資源,既考慮的作業的先後順序,又優先照顧短作業,同時不會使長作業等太久
響應比 = 等待時間/服務時間
時間片輪轉調度算法(***)
按照先來先服務的將作業放入一個調度隊列中,每隔一定的時間片,發生一次調度,一般爲10ms到100ms。
假設時間片爲2。
多級隊列調度算法
優先調度優先級高的
多級反饋隊列調度算法
解決了低優先級隊列長時間無法調度的問題
線程
爲什麼提出線程?
- 進程是資源的擁有者,在併發時,對進程的切換需要有較大時空的開銷。
- 一個進程內全部線程都是在同一個地址空間進行,在併發時可以減少系統的開銷。
線程概念:線程是進程的一個實體,是被系統獨立調度的基本單位,只擁有少量的資源(如CPU寄存器資源)。
如下圖所示,每個線程都會有個棧,一共有三個線程:
線程的特點:
- 一個線程擁有少量的資源,記錄在線程控制塊中。輕型實體,線程基本上不擁有資源,或者是有較少的資源;
- 一個進程的所有線程共享進程所擁有的全部資源。
- 線程是處理機調度的基本單位,多個線程可以併發執行。
線程與進程的比較:
線程的實現方式:
- 內核級線程:所有創建、切換等都需要內核的支持,開銷較大(適合多處理器系統)
- 用戶級線程:可以不需要進入內核態創建,但是切換進程需要進入內核(開銷小)
- 組合方式:建立內核級線程與用戶級線程的關係。