Create_Task(進程描述符指針, 任務名字符串, MyTask()函數, 參數個數, 參數表指針, 堆棧指針, 堆棧大小 優先級 ...)假如整個系統只創建了一個Task,而且非常簡單,只有void MyTask(){while(1);}1 這個Task的狀態會是什么? 是Running,還是Idle,Block,Wait 等等?2 書上經常說“當CPU(或者OS)發現沒有任務在執行時,會進入睡眠(或省電)模式”,“沒有任務在執行”是靠什么算法得出來的? 是看PC指針移動的活躍度?還是有別的算法?謝謝!
2 回答

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
1、沒有其他進程和MyTask爭奪資源,而它又一直不退出,所以一直在running。
2、操作系統會維護一個“任務隊列”,按照某種策略從隊列中取一個任務,給他分配了資源和時間片,就認為它是在執行的,不會去管這個任務的細節。所以只要任務隊列不為空就認為肯定有任務在執行。

holdtom
TA貢獻1805條經驗 獲得超10個贊
執行用戶任務--用戶態,進入睡眠狀態--核心態,這個切換需要用戶進程“同意”嗎?進入核心態是無條件的。進入睡眠狀態前,操作系統頂多是不再接收新任務;保存任務隊列;保存running進程的參數、狀態(對操作系統來講,這些也無需關心任務細節,只要保存了當時寄存器的情形就行),以便再恢復;這些做完就可以關機了,何須再去判斷每個進程是什么狀態呢?計算機軟件系統是分層次的,每層調用上層提供的接口干好自己的事情就行,不能干涉下層的細節,舉例說,進程的狀態只是它自己需要的,操作系統做出什么舉動,不需要關心某個用戶進程是什么狀態的,它只做他該做的事情就行,比如保存寄存器狀態,保存任務隊列等。
- 2 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消