處理器管理

進程狀態: 七態轉換
進程組成:進程控制塊(PCB)+ 程序代碼 + 數據集
進程控制: 基本控制操作 + 進程隊列 + 調度層次,算法
進程通信: 管道,共享內存,Socket

進程狀態: 核心爲就緒,運行,阻塞三態
在這裏插入圖片描述
1.創建狀態:進程在創建時需要申請一個空白PCB(processcontrol block進程控制塊),向其中填寫控制和管理進程的信息,完成資源分配。如果創建工作無法完成,比如資源無法滿足,就無法被調度運行,把此時進程所處狀態稱爲創建狀態
2.就緒狀態:進程已經準備好,已分配到所需資源,只要分配到CPU就能夠立即運行。即現在CPU沒有資源。(非自身原因)
3.執行狀態:進程正在CPU中處理執行。
4.阻塞狀態:正在執行的進程由於某些事件(I/O請求,申請緩存區失敗)而暫時無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用。等待用戶輸入,接收不到輸入參數邏輯上無法運行。(CPU空閒也不行,自身原因)
5.終止狀態:進程結束,或出現錯誤,或被系統終止,或被其他進程代替,進入終止狀態。無法再執行
6.掛起狀態:計算機資源不足(CPU,內存等資源)時,將進程從內存調到外存,剝奪其資源,待到有資源後再參與調度。

進程組成: 核心爲進程控制塊(進程的屬性集合,分三部分)
一個進程映像(Process Image)包括:
1.進程控制塊,每一個進程都將捆綁一個進程控制塊,用來存儲進程的標誌信息、狀態信息和控制信息。進程創建時,建立進程控制塊;進程撤銷時,回收進程控制塊,它與進程一一對應。 進程控制塊類似於協議(消息單元)的頭部。 表明標識,狀態,控制信息。
2.進程程序塊,即被執行的程序,規定了進程一次運行應完成的功能。通常它是純代碼,作爲一種系統資源可被多個進程共享。
3.進程數據塊,即程序運行時加工處理對象,包括全局變量、局部變量和常量等的存放區以及開闢的工作區,常常爲一個進程專用。
4.系統/用戶堆棧,每一個進程都將捆綁一個系統/用戶堆棧。用來解決過程調用或系統調用時的信息存儲和參數傳遞。 堆棧是存儲數據的一塊連續內存

進程標識塊(PCB,process control block)組成:
在這裏插入圖片描述
核心爲 進程標識符(PID)
在這裏插入圖片描述
核心爲程序計數器 進程的狀態信息包括 進程狀態信息和 處理器狀態信息
在這裏插入圖片描述
核心爲 狀態,優先級
在這裏插入圖片描述
在這裏插入圖片描述


進程控制: 核心爲進程隊列模塊, 基本操作(狀態切換),進程調度都圍繞隊列模塊展開

基本控制操作
在這裏插入圖片描述
隊列管理模塊: 就緒,等待,掛起三隊列
根據進程的三種狀態將內存中的進程放入不同隊列:就緒(根據隊列調度算法優先級再分),等待(根據不同的終止原因再分),掛起三種隊列
過程:完成新建——加入就緒隊列——根據調度算法進入CPU運行——發生等待事件(中斷,陷阱)——加入等待隊列——發生掛起事件——加入掛起隊列。
等待事件結束後——加入就緒隊列,等待處理器處理。
在這裏插入圖片描述
處理器調度(誰<進程/線程>先使用,誰後使用CPU的問題)
雙層調度機制 + 進程調度算法/程序
在這裏插入圖片描述
作業調度: 判斷指令能否被系統接納,進入內存成爲進程。 完成進程的創建(態)和退出
進程調度:按照進程調度算法決定進程使用CPU的先後順序

進程調度算法
調度算法——幾個嘗試
1.FCFS(First come first service): 先到先服務算法—對於長作業來說是很好,但是不利於短作業。對於CPU繁忙型的比較佔優勢,而對於耗時的IO繁忙型作業不利。
2.SJF(short job first): 短作業優先算法 —— 會一直處理短作業,長作業處於飢餓狀態。
3.時間片輪轉調度算法: 每個都處理固定時間 —— 可能都處理不完
4. 優先級調度算法: 設置優先級讓優先度高的進程先執行。 先執行重要的任務,但仍舊會產生飢餓現象

最終 應用的調度算法: 多級反饋隊列調度算法(綜合以上算法優點),是個綜合性算法
1.設置多個就緒隊列,併爲各個隊列賦予不同的優先級,第1級隊列的優先級最高,第2級隊列次之,其餘隊列的優先級逐次降低。
2.賦予各個隊列中進程執行時間片的大小也各不相同,在優先級越高的隊列中,每個進程的運行時間片就越小。例如,第2級隊列的時間片要比第1級隊列的時間片長一倍, ……第i+1級隊列的時間片要比第i級隊列的時間片長一倍。
3.當一個新進程進入內存後,首先將它放入第1級隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第2級隊列的末尾,再同樣地按FCFS 原則等待調度執行;如果它在第2級隊列中運行一個時間片後仍未完成,再以同樣的方法放入第3級隊列……如此下去,當一個長進程從第1級隊列依次降到第 n 級隊列後,在第 n 級隊列中便釆用時間片輪轉的方式運行。
4.僅當第1級隊列爲空時,調度程序才調度第2級隊列中的進程運行;僅當第1 ~ (i-1)級隊列均爲空時,纔會調度第i級隊列中的進程運行。如果處理機正在執行第i級隊列中的某進程時,又有新進程進入優先級較高的隊列(第 1 ~ (i-1)中的任何一個隊列),則此時新進程將搶佔正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i級隊列的末尾,把處理機分配給新到的更高優先級的進程。

這麼做的好處是明顯的,對於短作業來說,可以很快的輪到並解決。對於長作業來說,一下子解決不了,可以放到下一條隊列裏,雖然等的時間久了,但是輪到自己的執行時間變長了,也可以接受,不容易產生飢餓現象。可以說是綜合上面幾種算法的優點。


進程通信(inter process communication ,ICP)方式
1.最基本: 管道,分爲pipe(匿名管道), fifo(命名管道)
常見的Linux命令 “|” 其實就是匿名管道,表示把一個進程的輸出傳輸到另外一個進程
半雙工,單向通信,兩個管道實現雙向通信。
2.最高效:共享內存(配合信號量使用):兩個進程各自拿出一塊虛擬地址空間來,然後映射到相同的物理內存中,這樣,兩個進程雖然有着獨立的虛擬內存空間,但有一部分卻是映射到相同的物理內存,這就完成了內存共享機制。共享內存是臨界資源,所以需要操作時必須要保證原子性。使用信號量進行保護。
3.最常用(實際使用):socket套接字 在多進程,多線程,多模塊所構成的今天1最常見的分佈式系統開發中,socket是幾乎唯一選擇。socket本地也可以實現通信,跨機器也可以通信(網絡)。
實際中,都直接用成熟的基於socket的庫了,比如zeromq。
4.其他: 消息隊列幾乎不使用, 信號量功能是—對臨界資源進行保護。


進程管理軟件
1.中斷管理軟件: 用於進程切換
2.隊列管理程序: 操作系統管理進程控制塊的程序,核心程序包
3.進程控制程序: 控制進程狀態轉換
4.進程調度程序: 用於進程調度(內存向CPU調度時)
5.進程通信程序:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章