基本級別的多任務處理是如何實現的?爲了澄清我的問題,假設我們給了一個C運行庫來創建一個實現多任務的應用程序,這個應用程序一次只能在一個核心處理器上運行一個任務,例如,通過調用這個「mutlitasking」應用程序的main()
函數。 標準操作系統內核如何實現這一點?多核處理器如何改變如何在小學階段實施多任務處理?
1
A
回答
0
我對多核處理器沒有做太多的工作,所以我將避免試圖回答這部分查詢。然而,對於單處理器來說,當涉及到多任務處理時,有兩種策略可以想到。
如果我沒記錯,x86支持硬件任務切換。 (我對這種多任務處理的經驗很少)。從我記得的情況來看,當處理器檢測到任務切換條件時,它會自動將外出任務的所有寄存器保存到其任務狀態段(x86)中, ,並加載傳入任務的任務狀態段中的所有寄存器。這種方法存在各種警告和侷限性,例如「忙碌位」被設置,並且只能在特殊條件下切換回「忙碌任務」。就我個人而言,我不覺得這種方法對我特別有用。
我看到的更常見的解決方案是通過軟件進行任務切換。這可以分解爲協作任務切換和先發制人的任務切換。如果您正在編制協作任務切換策略,則任務切換僅在任務自願放棄處理器時發生。在這個策略中,你只需要保存和加載非易失性寄存器。如果選擇了先發制人的策略,那麼任務切換可以自發地或非自願地發生。在這種情況下,所有寄存器必須保存並加載。在編寫任一場景時,必須格外小心,不要破壞註冊內容,並且正確設置堆棧,以便在從任務切換代碼返回時,您位於傳入任務堆棧的正確位置。
希望這會有所幫助。
1
OS設置中斷計時器,並讓程序運行。一旦計時器到期,控制流程跳轉到OS的代碼進行上下文切換。
在上下文切換OS上保存當前進程的寄存器和支持數據,並將其替換爲CPU中的下一個進程在隊列中的數據。然後它設置另一箇中斷計時器,讓下一個程序從中斷的地方開始運行。
而且從當前處理的系統調用將控制權交給OS,以決定是否它是時間的上下文切換(當量進程正在等待一個IO操作)
力學是透明的程序。
運行。開關。重複。 :)
相關問題
- 1. 實施第三階段縮小階段後稱爲合併
- 2. 實施階段VS SDLC
- 3. 實施階
- 4. 基於Java的階段處理實現
- 5. 如何在PayPal的多個階段處理付款?
- 6. 如何在8位處理器上「僞造」多任務處理?
- 7. Android:如何處理多個任務
- 8. Java預處理階段
- 9. 處理RDD的階段數
- 10. MSBuild任務批處理多個任務
- 11. 如何處理因實施類而異的靜態字段
- 12. python多處理不處理任務
- 13. 實施多階段過程時的TDD策略?
- 14. iphone 3G多任務處理?
- 15. MPMediaPlayer的多任務處理
- 16. 如何處理ETL任務?
- 17. 實施異步任務
- 18. 批處理實施工具
- 19. 在階段中處理壓縮文件
- 20. 在預處理階段不斷摺疊
- 21. Optaplanner解決階段滯留在施工啓發階段
- 22. Spark如何管理階段?
- 23. 多任務學習
- 24. 學習MPI實施
- 25. jenkins在多任務階段失敗時完全停止subjob
- 26. 如何在Xcode構建階段運行Grunt任務?
- 27. 如何實施'如果'在小黃瓜
- 28. 如何在Jenkins管道中爲失敗階段實施重試選項?
- 29. 亞馬遜簡單的工作流程 - 並行處理任務,並在前一階段的所有並行處理完成後才進入下一階段
- 30. 如何在Objective-C的ViewControllers之間獲得多任務處理?
這當然有幫助,謝謝,但主題絕對值得進一步的描述。 – Bleamer 2012-02-21 13:41:51