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 关注
- 109 浏览
添加回答
举报
0/150
提交
取消