【操作系統】進程調度(4):I/O、不可預測的運行時間

0 前言

上一篇文章:進程調度(3):RR(輪轉) 算法 原理與實踐

1 前提鋪墊

與上一篇同。

2 引入I/O操作

之前我們一直提及的是計算密集型程序,現在我們的程序可以進行I/O交互了,它會發起I/O請求,比如向磁盤發起請求獲取數據。

這個時候,我們之前的算法會發生怎樣的變化呢?我們來探索一下!

2.1 進程的三狀態模型

  • Ready:就緒態
  • Running:運行態
  • Waiting:阻塞態 / 等待

最后還有一個DONE,代表執行完成,我們看一下其定義:

RUNNING - the process is using the CPU right now
READY   - the process could be using the CPU right nowbut (alas) some other process is
WAITING - the process is waiting on I/O(e.g., it issued a request to a disk)
DONE    - the process is finished executing

之前我們的計算密集型程序,僅僅使用CPU,沒有Waiting狀態,不過現在有了!

2.2 傻等:糟糕的資源利用方式

我們看一看一個向磁盤發起IO請求的程序,將會如何執行。

我們先假定其采用FIFO策略順序執行吧!

  • A:每在CPU執行10s,就發起IO請求,IO耗時10s,之后再在CPU執行10s,發起IO,共循環3次。
  • B:運行時間30s,100%使用CPU,不發起IO請求。

假定A比B先到達一點點。
在這里插入圖片描述
它的執行就成了這樣,注意紅色箭頭部分,CPU是空閑的!OMG!CPU空閑了30s!如此昂貴的CPU空閑30s……這真是太糟糕了。

2.3 重疊:高效利用資源

既然B執行30s,為什么不在空閑的時候執行B呢?反正我們擁有上下文切換機制!

在這里插入圖片描述
這看起來棒多了,A和B重疊了起來!CPU沒有被浪費,系統的整體性能也提高了,之前100s做的現在70s完成了!

3 不可預測的運行時間

3.1 無法預知的未來

之前我們的假設是任務運行時間已知,但是這怎么可能?我們不可能在程序運行前,就知道它將會運行多久……這很荒謬不是嗎?那怎么辦?

3.2 以史為鑒:預測時間

我們將會使用以史為鑒的方式,估計運行時間,也就是基于該程序之前運行時間的歷史情況,估算一下,這聽起來還有點靠譜了!具體實現先不談,之后再說。

3.3 思想貫通:CPU流水線的分支預測

CPU流水線,是硬件,也有類似的技術,就是分支預測,更著名的是動態分支預測,這這很棒!我想之后軟硬件的預測思想可以結合起來理解,達到融會貫通。

4 預告:進程調度(5)MLFQ(多級反饋隊列)算法 原理與實踐

之前我們的算法,無法同時兼顧周轉時間和響應時間,那么,何不將二者的優點結合? 這也就是接下來我們做的事情。

5 模擬軟件鏈接

點擊此處,在Linux可以運行模擬軟件,請閱讀README.md文檔,然后進行軟件的使用。

此模擬軟件可以充分體會多進程運行時候的轉換,體會IO引入程序之后帶來的重疊使用方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384672.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384672.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384672.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

堅定不移地加速,并且不斷解決新問題

想要更快更高效地做事,一定會帶來問題,我們要做的是 保證事情一定要做對堅定不移地解決問題,尋找方法,而不是回歸慢速 這里有幾個典型的例子 從單周期CPU,到多周期CPU,是為了提速,我們不必再…

運行bat批處理文件不出現黑框

if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit :CmdBegin echo off java -jar logisim118.exe exit 只需要添加上述代…

【操作系統】使用循環創建線程,一個手殘導致的bug

讓我們先看看這個手殘的程序…… 這是一個簡單的生產者消費者問題。 #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <unistd.h> #include <pthread.h> #include <sys/types.h> #incl…

【計算機系統設計】重點 · 學習筆記(0)

HDL等硬件描述語言&#xff0c;例如Verilog&#xff0c;是并行的&#xff0c;而不像軟件一樣的順序執行的&#xff0c;例如很多的always塊&#xff0c;initial塊&#xff0c;都是并行的&#xff0c;他們會轉換為硬件電路&#xff0c;而在仿真的時候&#xff0c;他們也是并發執行…

【計算機系統設計】學習筆記(1)03,04

疑問&#xff1a;sw和lw指令&#xff0c;獲取的地址不是4的整倍數&#xff08;字節不對齊&#xff09;的時候&#xff0c;應該如何處理&#xff1f; 東南大學MOCC 計算機系統綜合設計 03 03-1 寄存器 介紹了MIPS寄存器&#xff0c;32個寄存器的基本功能和使用&#xff0c;注…

【期末考試】計算機網絡、網絡及其計算 考試重點

個人簡介&#xff1a;Java領域新星創作者&#xff1b;阿里云技術博主、星級博主、專家博主&#xff1b;正在Java學習的路上摸爬滾打&#xff0c;記錄學習的過程~ 個人主頁&#xff1a;.29.的博客 學習社區&#xff1a;進去逛一逛~ 計算機網絡及其計算 期末考點 &#x1f680;數…

【計算機系統設計】學習筆記(2)

5.1 對于CPU與外界的讀寫&#xff0c;只有load和store指令能夠做&#xff0c;所以很多情況下&#xff0c;直接通過bypass跳過去了&#xff0c;或者閑置&#xff0c;尤其對于流水線&#xff0c;更應該直接跳過而不是閑置&#xff08;如何設計?&#xff09;。 另一方面&#xf…

【計算機系統設計】重點 · 學習筆記(1)(資源消耗)

這一點先淺顯理解&#xff0c;就好比我要造一個樓 我是用現成的材料造節省?還是需要用XX材料&#xff0c;但是XX材料還需要現成材料造呢&#xff1f; 這也不一定&#xff0c;但是基本來說&#xff0c;如果使用現有資源&#xff0c;能夠直接用&#xff0c;那其實是最好不過的…

【計算機系統設計】重點 · 學習筆記(0)(數據通路設計思想)

重點1&#xff1a;05.1 設計思想 設計思想至關重要&#xff0c;這決定了你能不能自己根據ISA設計出來CPU架構&#xff0c;而不是只是抄別人的&#xff0c;也決定你能不能完成自己的設計更優化的架構。 描述方式約定 6 數據通路 ≠ Verilog代碼 我們構建的數據通路&#…

【計算機系統設計】實踐筆記(1)數據通路構建:取指部件分析

0 核心思想 根據指令功能&#xff0c;分析出需求&#xff0c;從而得出需要的部件、控制信號以及其他設計。 1. 針對的指令 取指階段&#xff0c;針對所有指令&#xff0c;任何指令都需要進行取指。 2 功能&#xff08;需求&#xff09;分析 CPU的內部采用的是字節編址&…

【計算機系統設計】實踐筆記(2)數據通路構建:第一類R型指令分析(1)

0 回顧 上一次實踐筆記&#xff08;0&#xff09;我們實現了一個最簡單的&#xff0c;能夠每個上升沿4的PC。 我們最需要關注的就是器件功能的獨立性&#xff0c;避免內外功能混雜&#xff0c;同時一定要注意腦中有電路&#xff08;RTL級描述的抽象電路而不是實際的門級電路&…

接口的抽象與實現(概述)

概述 我們先建立一個整體的接口格局觀&#xff0c;建立知識地圖&#xff0c;了解接口的大概面貌。 整體來說&#xff0c;就這點事兒&#xff0c;4個箭頭代表了所有&#xff01; 三個器件4個箭頭 把這幾個都想明白&#xff0c;就完事兒了。 第一層&#xff08;頂層&#xf…

從功能層次,闡述CPU、接口和外設之間的交互

我們從功能抽象層次&#xff0c;闡述一下CPU、接口芯片和外設之間的交互情況&#xff1a; 三個器件4個箭頭 我們依次將其描述清楚。 數據 箭頭①和③ CPU給接口可以發送數據&#xff0c;然后接口暫存數據&#xff0c;之后再發給外設&#xff0c;這就是數據緩沖。 發送的數…

【接口技術】8086的IN和OUT指令

x86采用獨立編址的方式&#xff0c;IO端口地址和存儲器地址是分開的。 對于IO存儲器訪問&#xff0c;需要使用獨立的IO指令&#xff0c;也就是IN和OUT 兩類地址 地址空間大小在8位以下地址空間大小在16位以下 兩種格式 對于兩類不同的地址&#xff0c;IO指令的格式不一樣。…

Vivado工程文件分類

只需要在創建的時候&#xff0c;選擇自定義路徑即可&#xff0c;最好在原有的new文件夾下新建文件夾。 至于路徑的匹配&#xff0c;可以自己試試&#xff0c;在原有默認new下創建文件夾&#xff0c;選中新的文件夾后&#xff0c;內部的Verilog文件可以訪問外部new文件夾的文件&…

【微機原理與接口技術】具體芯片(1)并行接口8255A(1):全局觀

并行接口8255A 首先&#xff0c;它是傳輸并行數據的&#xff0c;與CPU一樣&#xff0c;然后&#xff0c;它是可編程的&#xff0c;也是多功能的&#xff0c;CPU可以對其進行一些控制。 管腳 先從最宏觀層面分類 一部分引腳與外設相連一部分引腳與CPU相連GND和Vcc 注意&…

【微機原理與接口技術】多功能可編程芯片 與 多功能電飯煲

多功能可編程芯片&#xff0c;就像你的多功能電飯煲&#xff0c;你點了不同的按鍵&#xff0c;就啟動了不同的工作方式&#xff0c;是熬粥還是做米飯&#xff0c;之后你又得選擇壓力和時間。 而在芯片上&#xff0c;你得先設置控制字&#xff0c;也就是 先選擇工作方式&#…

什么是地址譯碼 理解二進制編碼

我們知道存儲器都是有多個芯片組合而成的&#xff0c;必然涉及到片選&#xff0c;因此我們將地址分開看 前面的一部分&#xff0c;是片選&#xff0c;也就是選中某個芯片&#xff08;使用譯碼器&#xff0c;2-4譯碼器就是2位地址可以選擇4個芯片&#xff09;后面的部分&#x…

【微機原理與接口技術】具體芯片(1)并行接口8255A(2):控制字概述

核心 對于一個多功能可編程接口芯片&#xff0c;我們要想使用它&#xff0c;必須 先確定需求&#xff0c;要用什么芯片去干什么設置芯片的工作方式然后再讓芯片工作 至于設置的方式&#xff0c;當然是軟件編程。 同時重點注意&#xff0c;例如8255A&#xff0c;它一次只能寫…