2012-02-06 27 views
1

基本級別的多任務處理是如何實現的?爲了澄清我的問題,假設我們給了一個C運行庫來創建一個實現多任務的應用程序,這個應用程序一次只能在一個核心處理器上運行一個任務,例如,通過調用這個「mutlitasking」應用程序的main()函數。 標準操作系統內核如何實現這一點?多核處理器如何改變如何在小學階段實施多任務處理?

回答

0

我對多核處理器沒有做太多的工作,所以我將避免試圖回答這部分查詢。然而,對於單處理器來說,當涉及到多任務處理時,有兩種策略可以想到。

  1. 如果我沒記錯,x86支持硬件任務切換。 (我對這種多任務處理的經驗很少)。從我記得的情況來看,當處理器檢測到任務切換條件時,它會自動將外出任務的所有寄存器保存到其任務狀態段(x86)中, ,並加載傳入任務的任務狀態段中的所有寄存器。這種方法存在各種警告和侷限性,例如「忙碌位」被設置,並且只能在特殊條件下切換回「忙碌任務」。就我個人而言,我不覺得這種方法對我特別有用。

  2. 我看到的更常見的解決方案是通過軟件進行任務切換。這可以分解爲協作任務切換和先發制人的任務切換。如果您正在編制協作任務切換策略,則任務切換僅在任務自願放棄處理器時發生。在這個策略中,你只需要保存和加載非易失性寄存器。如果選擇了先發制人的策略,那麼任務切換可以自發地或非自願地發生。在這種情況下,所有寄存器必須保存並加載。在編寫任一場景時,必須格外小心,不要破壞註冊內容,並且正確設置堆棧,以便在從任務切換代碼返回時,您位於傳入任務堆棧的正確位置。

希望這會有所幫助。

+0

這當然有幫助,謝謝,但主題絕對值得進一步的描述。 – Bleamer 2012-02-21 13:41:51

1

OS設置中斷計時器,並讓程序運行。一旦計時器到期,控制流程跳轉到OS的代碼進行上下文切換。

在上下文切換OS上保存當前進程的寄存器和支持數據,並將其替換爲CPU中的下一個進程在隊列中的數據。然後它設置另一箇中斷計時器,讓下一個程序從中斷的地方開始運行。

而且從當前處理的系統調用將控制權交給OS,以決定是否它是時間的上下文切換(當量進程正在等待一個IO操作)

力學是透明的程序。

運行。開關。重複。 :)