消息==任务?解释一个问题

有同学提问:

最近头晕,稍微看了下这方面的书,发现好多相似之处。
怀疑
1,消息==任务?
2,MSG是一个死循环,TASK也是一个死循环?

他们到底是何方神圣?

 

回复如下:

 

举个例子:
main()
{
  printf("Hello the world!/n");
}

这个简单的程序,在运行时,就是操作系统启动一个task,打印完Hello the world后,task就结束了,程序也就退出了。
原因:你的task是个单线任务,执行完毕后,立即结束。如果要使你的程序一直处于工作状态,那就需要加上while循环,直到你的条件满足退出条件。
如:
main()
{
  while(1)
  {
  printf("Hello the world!/n");
  }
}
这个程序是确实是一个死循环,而且没有输入的死循环,一直打印输出,此时CPU的一个核心(多核CPU)将一直被这个task占用。但是,这个循环达到了一个目的:task可以一直处于工作状态,而不是单线的执行完毕就退出了。而往往我们很多工作任务就需要达到这样的目的。如果希望该任务不会把CPU时间全部占用,可以在while执行体中,加上sleep(10);就可以起到明显的作用。

你提出的MSG含义,应该是一个基于消息机制的任务。
例如:
while(getmsg(...))
{
  switch(idMsg)
  {
  case TIMEROUT:
  ...
  break;
  ...
  }
  ...
}
getmsg的作用就是读取消息,while主体中是用来分析消息并处理该消息输入的内容。一般情况下,getmsg返回非0值。如果getmsg返回0,则该任务就退出工作了。windows系统开发的大多界面任务也就是这种任务。
实质上,MSG的消息机制,是由其它任务或者是操作系统触发的一些事件,需要发送给getmsg的这个任务来执行,如定时器到了,鼠标点击了,等等事件,这些事件用统一的定义规则来设计,并驱动各个任务执行。所以消息驱动的机制一般就是一个任务触发消息给另一个或自身任务来处理的多任务机制。由此看来,getmsg任务是一个阻塞型任务,如果没有消息,那么这个任务就被CPU放入休眠队列,直到有消息触发,getmsg才返回,并继续运行,而不像前面例子那样,把CPU时间全部占用。

试想,如果不用while循环,那么这个任务还会不会达到循环运行的目的呢?

先简单说明这么多,应该可以给你一个清晰的认识了。如果希望深入的研究,你可以多看看资料。

针对您的问题,我推荐查看《VxWorks实时操作系统详解》一书,这将帮助您深入了解VxWorks的任务调度机制以及如何设计高可靠性和可裁剪性的多任务系统。VxWorks的任务调度功能是其核心特性之一,它允许开发者创建多个任务根据它们的优先级和状态进行管理。 参考资源链接:[VxWorks实时操作系统详解](https://wenku.youkuaiyun.com/doc/609wowqch4?spm=1055.2569.3001.10343) 在设计高可靠性的任务调度方案时,首先要考虑任务的优先级分配。VxWorks支持动态优先级调整,可以根据任务的重要性和实时性要求动态调整其优先级,以确保关键任务能够及时响应。另外,还可以通过设置任务间的同步和互斥机制,如信号量和互斥锁,来防止任务间的资源冲突和优先级倒置问题。 在可裁剪性方面,VxWorks允许系统设计者根据应用需求选择需要的功能模块,以减少系统的体积和提高性能。裁剪不必要的功能和服务可以优化内存使用,提高系统的运行效率。同时,通过BSP(板级支持包)可以将VxWorks移植到不同的硬件平台,确保任务调度方案的可移植性。 为了实现可裁剪的多任务调度系统,开发者需要对系统中的每个任务进行详细分析,确定其必要性以及资源消耗。然后,在创建任务时,合理分配任务栈大小,避免不必要的栈溢出,同时考虑到系统的内存管理策略,确保每个任务都有足够的栈空间执行。此外,还需要考虑任务间通信和数据共享的机制,如消息队列、信号量等,这些都是设计稳定可靠任务调度方案的重要方面。 总之,通过阅读《VxWorks实时操作系统详解》,您将能够掌握如何在VxWorks中实现一个既可裁剪又具备高可靠性的多任务调度系统。书中的详细解释和案例分析将为您提供丰富的知识和实践经验,帮助您设计出符合特定需求的实时操作系统解决方案。 参考资源链接:[VxWorks实时操作系统详解](https://wenku.youkuaiyun.com/doc/609wowqch4?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值