回覆列表
  • 1 # CoreCode

    跟任何其他程式一樣,一個任務執行時,它使用 處理器/微控制器 的暫存器,訪問RAM ROM。這些資源(處理器的暫存器,stack等)一起組成任務的執行上下文(the task execution context).一個任務是一個連續有序的程式碼片斷。它並不知道它將何時被核心掛起或者恢復,甚至不知道這些事情(掛起或者恢復)在什麼時候已經發生了。下面考查(Consider)的這個例子是用來求兩個處理器中的暫存器值之和,該任務在執行1條指令後就立即被掛起。-->任務將要執行ADD指令時,被掛起-->先前的指令已經把數取到暫存器(Reg1,Reg2)中了,而這些暫存器(Reg1,Reg2)將要被ADD指令用到。當這個任務被恢復後,ADD就是要執行的第1條指令。這個任務不知道是否有另一個的任務會在中間時期 修改 Reg1或者Reg2)當這個任務掛起時,其他任務繼續執行,可能會修改處理器暫存器的值。在恢復之後,這個任務也不知道處理器的暫存器被修改過(altered).如果它使用這個修改過的值,就會導致計算的和的結果不正確。為了避免這類錯誤,必須保證,在恢復一個任務之後,其上下文環境跟即將掛起前是一樣的。作業系統核心有責任 透過在任務掛起前儲存其上下文 來確保這種狀況。當任務恢復時,儲存的上下文 就被 作業系統核心恢復到先前的執行情況。儲存一個被掛起的任務的上下文 並在 任務恢復時 恢復其上下文的這個處理過程就叫做上下文切換(context switching)。

  • 中秋節和大豐收的關聯?
  • 大家去香港旅遊的最大收穫是什麼?