這篇寫一下Nachos的中斷與時間片調度
關於時間片調度,我們只需要在執行時加入參數-rs即可,這樣在初始化的時候就會生成一個timer,並且可以在線程之間利用時間片進行切換
首先看下timer的定義
比較重要的參數是那個TimerInterruptHandler,是一個函數入口指針,是該定時器要執行的函數
該函數的目的就是將yieldOnReturn置爲True,便於os自己進行上下文的切換而不是進程主動調用yield函數
在timer初始化的時候,會主動向中斷隊列中加入一箇中斷
該TimerHandler函數除了執行該timer的指定函數以外,還會生成一個新的中斷加入到中斷隊列中,以此來模擬時鐘中斷的產生
那麼這些中斷又是如何形成線程切換的呢?
這個就要看SetLevel函數了,該函數調用了OneTick函數,模擬了時鐘的增長
CheckIfDue會檢查中斷隊列裏符合條件的中斷,如果符合條件就會予以執行,且timer所要執行的函數會將yieldOnReturn置爲True,也就導致了後面調用Yield進行線程的切換,這也是Nachos對於時鐘中斷的模擬