91精品一区二区三区久久久久久_欧美一级特黄大片色_欧美一区二区人人喊爽_精品一区二区三区av

位置:51電子網 » 技術資料 » 嵌入式系統

計算機操作系統進程切換

發布時間:2009/1/16 0:00:00 訪問次數:859

  進行進程切換就是從正在運行的進程中收回處理器,然后再使待運行進程來占用處理器。

  這里所說的從某個進程收回處理器,實質上就是把進程存放在處理器的寄存器中的中間數據找個地方存起來,從而把處理器的寄存器騰出來讓其他進程使用。那么被中止運行進程的中問數據存在何處好呢?當然這個地方應該是進程的私有堆棧。

  讓進程來占用處理器,實質上是把某個進程存放在私有堆棧中寄存器的數據(前一次本進程被中止時的中間數據)再恢復到處理器的寄存器中去,并把待運行進程的斷點送入處理器的程序指針pc,于是待運行進程就開始被處理器運行了,也就是這個進程已經占有處理器的使用權了。

  這就像多個同學要分時使用同一張課桌一樣9說是要收回正在使用課桌同學的課桌使用權,實質上就是讓他把屬于他的東西拿走;而賦予某個同學課桌使用權,只不過就是讓他把他的東西放到課桌上罷了。

  在切換時,一個進程存儲在處理器各寄存器中的中間數據叫做進程的上下文,所以進程的 切換實質上就是被中止運行進程與待運行進程上下文的切換。在進程未占用處理器時,進程 的上下文是存儲在進程的私有堆棧中的。

  從上面的敘述可知,調度器進程切換的代碼應有如下功能:

  ●保存處理器pc寄存器的值到被中止進程的私有堆棧;

  ●保存處理器psw寄存器的值到被中止進程的私有堆棧;

  ●保存處理器sp寄存器的值到被中止進程的進程控制塊;

  ●保存處理器其他寄存器的值到被中止進程的私有堆棧;

  ●自待運行進程的進程控制塊取sp值并存入處理器的寄存器sp;

  ●自待運行進程的私有堆棧恢復處理器各寄存器的值;

  ●自待運行進程的私有堆棧中彈出psw值并送入處理器的psw;

  ●自待運行進程的私有堆棧中彈出pc值并送入處理器的pc。

  顯然,進程的切換可以用中斷技術來實現,即當調度器獲得了待運行進程的控制塊之后,應立即用軟中斷指令來中止當前進程的運行,并保存當前進程的pc值和psw值。其后,使 用壓棧指令把處理器其他寄存器的值壓入進程私有堆棧。接下來,就從待運行進程的進程控 制塊中取出私有堆棧指針的值并存入處理器的寄存器sp,至此sp就指向了待運行進程的私 有堆棧,于是下面就自待運行進程的私有堆棧中彈出上下文進人處理器。最后,利用中斷返回指令來實現自待運行進程的私有堆棧中彈出psw值和自待運行進程的私有堆棧中彈出pc值的功能。

  這是一個完整的軟中斷處理過程,只不過在保護現場和恢復現場工作中,保護的是被中止 運行進程的現場,恢復的是待運行進程的現場,這一切都依賴于堆棧指針的切換。

  進程切換時,被中止進程保護斷點和待運行進程保護斷點的示意圖如圖所示。

  圖 調度器進行進程切換的動作

  歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)



  進行進程切換就是從正在運行的進程中收回處理器,然后再使待運行進程來占用處理器。

  這里所說的從某個進程收回處理器,實質上就是把進程存放在處理器的寄存器中的中間數據找個地方存起來,從而把處理器的寄存器騰出來讓其他進程使用。那么被中止運行進程的中問數據存在何處好呢?當然這個地方應該是進程的私有堆棧。

  讓進程來占用處理器,實質上是把某個進程存放在私有堆棧中寄存器的數據(前一次本進程被中止時的中間數據)再恢復到處理器的寄存器中去,并把待運行進程的斷點送入處理器的程序指針pc,于是待運行進程就開始被處理器運行了,也就是這個進程已經占有處理器的使用權了。

  這就像多個同學要分時使用同一張課桌一樣9說是要收回正在使用課桌同學的課桌使用權,實質上就是讓他把屬于他的東西拿走;而賦予某個同學課桌使用權,只不過就是讓他把他的東西放到課桌上罷了。

  在切換時,一個進程存儲在處理器各寄存器中的中間數據叫做進程的上下文,所以進程的 切換實質上就是被中止運行進程與待運行進程上下文的切換。在進程未占用處理器時,進程 的上下文是存儲在進程的私有堆棧中的。

  從上面的敘述可知,調度器進程切換的代碼應有如下功能:

  ●保存處理器pc寄存器的值到被中止進程的私有堆棧;

  ●保存處理器psw寄存器的值到被中止進程的私有堆棧;

  ●保存處理器sp寄存器的值到被中止進程的進程控制塊;

  ●保存處理器其他寄存器的值到被中止進程的私有堆棧;

  ●自待運行進程的進程控制塊取sp值并存入處理器的寄存器sp;

  ●自待運行進程的私有堆棧恢復處理器各寄存器的值;

  ●自待運行進程的私有堆棧中彈出psw值并送入處理器的psw;

  ●自待運行進程的私有堆棧中彈出pc值并送入處理器的pc。

  顯然,進程的切換可以用中斷技術來實現,即當調度器獲得了待運行進程的控制塊之后,應立即用軟中斷指令來中止當前進程的運行,并保存當前進程的pc值和psw值。其后,使 用壓棧指令把處理器其他寄存器的值壓入進程私有堆棧。接下來,就從待運行進程的進程控 制塊中取出私有堆棧指針的值并存入處理器的寄存器sp,至此sp就指向了待運行進程的私 有堆棧,于是下面就自待運行進程的私有堆棧中彈出上下文進人處理器。最后,利用中斷返回指令來實現自待運行進程的私有堆棧中彈出psw值和自待運行進程的私有堆棧中彈出pc值的功能。

  這是一個完整的軟中斷處理過程,只不過在保護現場和恢復現場工作中,保護的是被中止 運行進程的現場,恢復的是待運行進程的現場,這一切都依賴于堆棧指針的切換。

  進程切換時,被中止進程保護斷點和待運行進程保護斷點的示意圖如圖所示。

  圖 調度器進行進程切換的動作

  歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)



相關IC型號

熱門點擊

 

推薦技術資料

DFRobot—玩的就是
    如果說新車間的特點是“靈動”,FQPF12N60C那么... [詳細]
版權所有:51dzw.COM
深圳服務熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網安備44030402000607
深圳市碧威特網絡技術有限公司
付款方式


 復制成功!
育儿| 天长市| 凌海市| 江安县| 迁西县| 历史| 荃湾区| 康乐县| 定结县| 茶陵县| 莱州市| 滦南县| 奉节县| 吴江市| 广元市| 斗六市| 沾化县| 六盘水市| 嘉荫县| 浦城县| 海口市| 巍山| 平山县| 莱阳市| 萍乡市| 铜陵市| 文登市| 东平县| 休宁县| 同心县| 乐亭县| 丽江市| 信阳市| 平定县| 晴隆县| 临海市| 灵台县| 新宁县| 肃北| 汝州市| 印江|