03CPU管理的直接想法

CPU的工作原理:簡單來說就是取指執行,也就是說取指令然後執行指令。
以CPU上電以後的工作流程舉例解釋取指執行,如下圖所示

                              取指執行示意圖

假設CPU上電的時候PC指針值是50,那麼CPU首先通過地址總線發送一個地址:50。內存收到50後,取出50地址處的指令:max ax,[100],並通過地址總線發給CPU,CPU收到指令後解釋執行指令,即設置ax的值,接下來PC跳到51,取指執行,再跳到52取指執行,如此往復。

從上面的例子中可以看出,管理CPU最直觀的方法就是設置好初值就完事!如下圖所示,設置好初值後PC指針就一直往下跳。
                             

那麼設置好初值就完事的做法有沒有問題呢?,以一段C語言程序爲例,說明此問題
      

   在for循環中,如果只執行計算語句,執行一千萬次只耗時0.015秒,而執行printf語句1000次就耗時0.859秒。
不同類型的程序執行速度差異巨大,printf是I/O操作,需要從磁盤讀寫數據,磁頭的移動是機械過程,機械過程當然比
純計算這種電路變化慢得多。
  假如我們的程序設計成:先I/O操作一萬次,再純計算一萬次。那麼需要等待9s左右,才能計算。
  那麼CPU在這9s內做了些什麼事呢——>開啓I/O操作,然後等待9s,直到I/O操作完成纔去執行計算。實際上CPU在這9s內什麼也沒幹,那麼CPU的利用率就很低了。
 怎麼解決呢?參照燒水問題
 我們燒開水時,往壺裏注滿水,然後插頭插好,難道一直在那乾等開水燒開嗎?當然不是,我們可以去吃飯,等水燒開發出響聲後,我們停下吃飯去拔掉插頭,這樣人在燒水這段時間內就沒有閒着。
 所以提高CPU利用率的方法就是在啓動I/O操作後,去執行別的指令,I/O操作完成時再回來,如下圖所示
                  

  CPU在兩道程序之間切來切去,CPU空等待的時間就少多了,提高了CPU的利用率。由兩道程序切來切去,繼而推廣到多道程序交替執行即併發,通過此舉提高CPU利用率。
  那麼從程序1切到程序2時,除了修改PC指針,還需要做什麼呢?舉個栗子

PC在52處等待ax+bx完成期間,切到程序2.在程序一中,ax值爲1,而在程序2中ax是10,從而再切回來時,如果不預先保存ax的值,那麼程序1中的ax也變成10了。所以在切換前要記錄地址,ax,bx的值,也就是中斷現場要保存記錄。每個程序中都有一個存放記錄的結構:PCB

             PCB->

最後引出進程的概念
運行的程序和靜態程序不一樣?
靜態程序+這些不一樣(存在PCB)中=進程。
進程是進行(執行)中的程序

進程會走走停停,走停對程序無意義
進程需要記錄ax,bx,程序不用
。。。。。。。。。。。。。

進而,管理CPU就是管理多道正在進行的程序,即多進程管理
  

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