简笔画大全水果的:非优先权与优先权式的多任务是?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 11:18:32
能否举例详细说明,不是很看得懂Programming Windows里面的介绍.

我们一般说是抢先式多任务和协作式多任务. 因为这是操作系统的事, 所以不能举程序例子. 举操作系统的例子, Windows 3.1是协作式多任务的, 而Windows 2000就是抢先式多任务的操作系统.

像Windows这样的操作系统是多任务的你应该理解了吧, 其实就是可以多个程序一起执行. 那么系统怎么分配它们, 在某一个时刻该哪个程序运行呢?

协作式多任务(比如老的Windows 3.1)是某一个程序在完成一个任务后自动把程序控制权交给系统. 别的程序处理完自己的事性后也把控制权交给操作系统. 这样操作系统就可以轮流在各个程序间切换了. 这最大的一个问题就是, 如果某个程序没有交出控制权, 系统就不能正常运转了. 一个程序没有交出控制权, 有两种情况: 一个是该程序不想交出(一般只要不是恶意的程序, 谁也不会这样吧?), 另一个是该程序出现故障. 所以这种协作式的多任务只要有一个程序"死机", 整个系统就都"死"了, 只能重起.

它要求每个程序都得是 "守法公民", 即, 都得有协作精神, 系统才能正常运转.

但抢先式多任务就不是这样了, 系统会强制在各程序之间进行切换. 所以一个程序如果死机了, 你只要把它关闭就可以了, 对其它程序, 以及整个系统, 通常不会造成影响.

所以 "抢先", 是指操作系统可以抢在应用程序之先去处理事务, 所以可以不受单个程序的影响.

可以举个编写程序的例子, 每个Windows程序都有一个主循环, 如:

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;

它就可以实现协作. 调用GetMessage时就把控制权交给了Windows. 所以在编写复杂的程序时别忘了这个循环, 它通常是在主程序中, 但如果你有很耗时的操作, 就应该自己在这个耗时的操作中加入类似的循环. 如果在Windows3.1中不用这个循环, 就死机了. 而在抢先式多任务的环境中, 你不用这个循环, 你的程序是"死"的, 整个系统不会"死"