批处理结束某个进程_进程调度
當計算機系統是多道程序設計系統時,常常會出現多個進程或線程競爭CPU的情況。如果有大于處理器數的進程(線程)處于就緒態時,就必須要選擇下一個要執行的進程(線程)。在操作系統,用于選擇接下來要執行的進程的程序稱之為調度程序(Scheduler),調度程序相應的算法稱之為調度算法(Schedule Algorithm)。雖然進程調度和線程調度有些許不同,但是許多適用于進程調度的處理方法大多也適用于線程的調度。
- 進程的行為
幾乎所有的進程的I/O請求和計算都是交替發生的,典型的,CPU不間斷的執行一段時間,當CPU發現需要執行I/O操作,發出系統調用來完成I/O請求,當/O請求執行完成后CPU繼續計算,直到進程需要執行其他的I/O操作或者執行完成。某些進程花費大量的時間在計算上(使用CPU),這類型進程稱之為CPU密集型進程(compute-bound),典型的CPU密集型進程具有較長時間的CPU集中使用和較小頻度的I/O操作。相反,某些進程花費大量時間用于處理I/O請求,這類進程稱之為I/O密集型進程(I/O-bound),典型的I/O密集型進程具有較短的CPU集中使用和頻度較大的I/O操作。隨著CPU的速度的不斷提升,進程更加偏向于I/O密集型,因為因此如果需要運行/O密集型進程,那么應當勁量讓/O密集型進程得到執行,以便發出磁盤請求并保持磁盤忙碌。因為I/O操作遠遠慢于CPU的速度,對于/O密集型進程的調度就更加重要了。
- 何時調度
有關調度的一個關鍵問題是在何時進行調度?考慮如下的情形:
根據如何處理時鐘中斷,可以把調度算法分為兩類。非搶占式調度算法是挑選一個進程讓其執行,直到該進程阻塞(I/O請求或其它原因)或者主動釋放CPU,即使該進程執行了若干小時也不會強制掛起。這樣做的結果是在時鐘中斷發生時不會進行調度,在處理完時鐘中斷后,如果沒有優先級更高的進程,該進程會繼續執行。搶占式調度算法是挑選一個進程,讓進程執行一個給定的最大運行時間(時間片),如果在給定的最大執行時間后進程仍然在執行,那么會強制掛起該進程,調度程序選擇另一個進程執行。
- 調度算法分類
調度算法的分類主要是根據其執行的環境,不同的執行環境使用不同的調度算法。大致可以劃分出三種環境:批處理、交互式、實時。
- 調度算法的目標
前面我們知道,對于不同的環境使用不同的調度算法,因為在不同的環境所追求的性能指標也不盡相同,有些是所有環境都適合,有些則適合于特定的環境。
所有系統公平——保證每個進程由公平的CPU份額策略強制執行——保證指定的策略能夠被執行平衡——保持系統所有的部分都是忙碌的 批處理系統吞吐量——每小時完成最大的作業數周轉時間——任務從被提交到執行完成的最小時間CPU利用率——CPU的使用情況 交互式系統響應時間——快速響應時間均衡性——滿足用戶的請求 實時系統滿足截止時間——避免丟失數據可預測性——在多媒體系統中避免品質降低對于所有情形,公平性十分重要,進程應該得到公平的CPU的份額,在理論上能夠達到公平。再者,盡量保證系統的各個部分都保持忙碌,保證CPU和I/O設備都在處理任務,這樣比CPU空轉或I/O設備空閑會更加高效。因此調度程序在把進程調入到內存時,保證內存中既有CPU密集型進程和I/O密集型進程是較好的想法。好于內存中先全部都是CPU密集型進程然后在全是I/O密集型進程。如果是后一種策略,在CPU密集型進程執行時會競爭CPU并且磁盤空閑,而后面執行I/O密集型進程時會競爭磁盤,而CPU卻空轉。因此保證內存中的進程既包含CPU密集型又包含I/O密集型能夠讓系統的性能好一些。
- 批處理系統中的調度算法
- 交互式系統中的調度
- 線程調度
當進程擁有多個線程時,就存在兩個層次的并行:進程和線程,這兩種調度存在本質的區別,并且還取決于線程是用戶級線程還是內核級線程還是兩者的混合。首先考慮用戶級線程,操作系統不知道線程的存在,因此操作系統還是和以前一樣調度進程,而線程調度程序在進程內部,進程內的調度程序決定如何調度線程。因為多個線程不存在時鐘中斷,因此使用時間片是可行的方案。當進程的運行時間介紹內核就會調度其他進程。也就是說當調度程序分配給進程一定的執行時間,進程內的多個線程如何使用這段執行時間內核不關心,內核關系的是分配給進程的執行時間(時間片長度)。對于內核級線程,內核選擇一個特定的線程執行,它不用考慮該線程屬于那個進程,對于被選擇的進程賦予一個時間片,而且超過了時間片,就會強制掛起該線程。用戶級線程和內核級線程之間的差別在于性能,用戶級線程的線程切換需要更少的機器指令,甚至內核都不知道進行了線程切換,因為這是由進程內部的調度程序決定的,因此用戶級線程可以使用轉為應用程序定制的線程調度程序。另一方面,使用內核級線程時,一個線程被阻塞時不會出現像用戶級線程那樣掛起相應的進程的情況。
總結
以上是生活随笔為你收集整理的批处理结束某个进程_进程调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译后没有taget文件夹_maven资
- 下一篇: php 循环大数组 卡死,PHP 大数组