0

我是計算機體系結構和設計的新手。我的問題是一個高級程序指令集在CPU中一個接一個地執行。在執行這些指令時,它是否涉及操作系統指令作爲開銷?例如:如果在2 GHz處理器中有2 * 10^9個指令,可以在2 * 10^9個時鐘週期內執行。然後操作系統每秒總是需要大約1 * 10^9條指令執行。這種開銷總是在那裏,只有另外的1 * 10^9指令可供其他自定義調度程序執行時免費執行?操作系統的指令每秒

這是否意味着操作系統應該總是儘可能少地執行指令,以便它可以容納更多其他要執行的程序?

+0

你的問題沒有意義。 OS執行調度操作,提供硬件中斷並執行用戶代碼給出的命令。它不佔用任何固定數量的CPU時間,顯然,它儘量不浪費它。 – ruslik 2010-12-10 21:09:41

+1

可能是一個足夠簡單的CPU。但總的來說,我不認爲性能幾乎像你想要的那樣簡單。有緩存,虛擬內存,共享庫,調度,I/O等等。例如,如果操作系統使用一些指令來保持進程之間共享libc的單個拷貝,並且在我的程序之前,libc的熱門功能位於我的L2緩存中開始,這可以很容易地支付自己。 – Ken 2010-12-10 21:18:20

回答

1

對於這兩個問題都是有限的。首先,如果操作系統使用1e9指令/秒,則只剩下1e9指令/秒。

二,是的,你想盡可能減少;它被稱爲「開銷」。

「限制」是操作系統確實爲你做了好事。例如,考慮miltitasking,其中操作系統允許您同時運行多個程序,並在其中共享處理器。一方面,涉及到開銷。另一方面,如果沒有它,你可能會在沒有程序運行的情況下將機器閒置很長時間,或者你必須自己模擬多任務 - 這至少需要和操作系統一樣多的指令。

1

爲了擴大Martin先生的迴應:(注意,這是高度簡化的) OS的工作是處理那些程序自己不想要的東西 - 比如處理I/O中斷並安排多個任務共享機器。在運行一個應用程序的機器上的完美世界中,程序將控制CPU,直到它需要操作系統爲其執行某些操作,例如從磁盤文件中讀取下一條記錄(調用分層的「服務」來計算出哪個磁盤,哪個文件,哪個文件,哪個字節,哪個磁盤塊以及磁盤控制器要求哪個磁盤塊請求來自哪個磁盤塊,典型的「真實」機器還有一堆後臺任務正在運行,保持屏幕更新,讀取時鐘,檢查新郵件,下載補丁程序等。這是優先考慮的事情。有些任務以較低的優先級運行,因爲我們不在乎它們何時完成,例如在Windows中更新系統托盤圖標以獲取新郵件通知。其他任務以高優先級運行,但非常短,如在屏幕上跟隨鼠標並將其從指針更改爲手。請注意,典型任務只需要幾百條指令,然後再執行一些操作系統服務走當它發生時睡覺。大型應用程序可能有成千上萬的'指令',但是再次花費一些時間等待其他事情,從按鈕按下或鍵盤輸入到另一臺機器上數據庫查詢的響應。 大部分CPU密集型應用程序(如計算Pi到百萬位小數)可能會長時間佔用處理器的99.9%,但操作系統將定期中斷它,以查看是否需要執行其他操作。回到DOS(1980年代)的時代,程序實際上可能需要一段時間的CPU,但是如果需要讀取或寫入或在屏幕上輸入內容,則必須像BIOS一樣執行此操作,除非程序被寫爲做這些基本的操作。其中一些就是電腦遊戲的響應方式,通過直接修改屏幕所需的特定操作,以及直接從鍵盤或鼠標設備緩衝區讀取,繞過操作系統。 希望我沒有更多的困惑你...