乙個處理機只能執行乙個程式,當程式執行的時候,作業系統在執行嗎?此時,作業系統是如何進行程序排程的?

時間 2021-06-01 03:27:49

1樓:孟南知

單道處理機,程式執行的時候作業系統是沒有執行的,你感覺不出來是因為它太快了,程式是分時執行的並不是乙個程式一下就跑完了,而是跑一段換個程式跑一段

2樓:海鵬

處理機是什麼?處理器?

大部分處理器不是只能執行乙個程式

當程式執行的時候,作業系統也在執行

os程序排程,請隨便買本作業系統書看,就算是單核沒有超執行緒的處理器,一次只能執行乙個任務,也有法排程

3樓:宋子明

下面說到的作業系統只表示核心,不包括使用者層工具。

作業系統不執行,只會被呼叫。對作業系統的呼叫可以基本分成兩類:系統呼叫,即使用者態應用程式呼叫系統功能;中斷處理,即硬體裝置產生中斷並讓系統進行處理。

也就是說,作業系統並不存在乙個main函式,沒有一條單一的執行流,更像是乙個庫,供具體的應用程式呼叫。

至於如何支援多工,這實際上有三個問題:何時排程,即什麼時刻切換任務;如何排程,即決定接下來要執行的是哪個任務;任務切換,也就是決定了從當前任務A切換到新任務B,如何實現這個切換。前兩個問題是純粹的演算法問題,下面主要說一下任務切換。

我們先來看一下中斷處理過程,以應用程式的視角來看,假設沒有任務切換發生,那麼流程是這樣的:

任務A正在執行,使用任務A的核心棧

發生中斷,將任務A的暫存器狀態儲存在A的核心棧上,切換到中斷棧

作業系統執行中斷處理函式(ISR)

中斷處理完成,切換回任務A的核心棧

從棧上恢復任務A的暫存器狀態,任務A繼續執行

從棧的切換過程來看,一共切換兩次:stackA->中斷棧,中斷棧->stackA。

現在有兩個任務A和B,直接把之前的流程複製乙份:

任務A執行,stackA->中斷棧,ISR,中斷棧->stackA,任務A執行

任務B執行,stackB->中斷棧,ISR,中斷棧->stackB,任務B執行

如果我們把上面兩個流程各擷取加粗的部分,效果就是:

任務A執行,使用A的核心棧

發生中斷,儲存A的狀態,切換到中斷棧

執行中斷處理函式(ISR)

切換到目標任務B的核心棧

從核心棧恢復B的狀態,B繼續執行

這樣,就相當於實現了任務A到任務B的切換,而任務A則一直停在發生中斷的狀態,直到下一次作業系統重新排程到A。

通常,作業系統會使用乙個變數current_task來表示正在執行的任務,每次中斷流程結束,就自動切換到current_task的核心棧上,恢復暫存器並繼續執行,至於這個current_task是否跟終端之前的一樣,則完全不需要關心。

4樓:河馬

可以先了解一下作業系統的時分復用機制。即在作業系統看來,系統會將連續的時間分成乙個乙個的時間片,每個時間片作業系統會決定執行什麼程式。

關於以後當乙個程式設計師?

石之審判 我上大學學的電腦科學與技術,在上大學之前,沒碰過電腦,是沒 碰 過!到了學校,不知道怎麼開機,手機插電腦上,不知道怎麼找記憶體卡 對,那時候是山寨機 不知道什麼是U盤,不會用鍵盤打字。然而,我現在也是程式設計師了。 趙地 優先考大學,好大學有好的環境,高的起點。只要自己再自律些,做什麼都有...

程式設計師需要執行虛擬機器,不止乙個,32g以上,除用ThinkPad p15 還有什麼膝上型電腦推薦呢?

綠蟻 低價的方案用 thinkbook 14 板載8G,自己再上根32G。主要是虛擬機器多了,SSD也得能擴充套件,這方面戰66就不行 晨兒哥 macbook pro 16寸 32g 定製的不錯啊,我一直在用,可以開好幾個虛擬機器,另外虛擬機器不要傻傻的用帶介面的那種,用 vagrant 來啟動官方...

乙個程式如果是本機執行或者是單機執行的,還需要需要資料庫嗎?

人家開發資料庫是為了把資料儲存規範化 為什麼要考慮資料能不能這樣那樣儲存的問題 既然有資料庫了,為什麼會出現 有沒有類似資料庫 這種莫名其妙的需求 另外乙個程式要不要用到資料庫,這個跟你的程式需求有關,而不是說本機執行,剪斷網線它就不需要資料庫了,程式不是自己寫的嗎,要不要用資料庫,自己都不知道? ...