2011-10-12 29 views
2

当我们在执行taskSpawn时,正在vxworks中创建任务。什么是一项任务。与线程有任何关系吗?vxworks中的任务

在我的理解中,vxworks是基于线程的操作系统。

有人可以帮助我真正的场景中的任务/线程/过程之间的真正区别。

某处我看到的任务是执行指令集。如果是这样,那么线程也有一些指令集,所以我们可以将线程称为任务。

请帮

回答

6

线程通常与OS支持的流程模型(在Unix/Linux/Windows的),您运行过程中使用的概念。
这个过程可以有一个执行线程(就像一个简单的C程序)。或者,您可以创建多个线程在当前进程内存空间内并行执行某些操作。

对于较早的vxWorks,没有过程模型。一切都会在同一个内存空间中运行。 vxWorks任务提供了系统代码执行的上下文。所有代码(除中断处理程序外)都将在任务的上下文中执行。

任务是独立执行单元。他们可以共享资源,拥有共同的内存等等,但是调度器根据非常具体的标准执行任务。通常,系统中最高优先级的任务是在任何给定时间执行的任务。

一旦任务完成/睡眠/阻塞等待资源,系统中下一个最高优先级的任务将运行。

为了您的目的,您可以将任务想象成一个线程。

2

任务是OS设计中的抽象概念。任务是单个执行环境。任务有一个存储空间,用于存储数据和代码。这个内存空间可能会或可能不会与其他任务共享。一个任务有一个状态(例如运行,停止,死亡......),它(通常)有一个堆栈。任务优先于其他任务。

在这样一个任务的例子,是一个VxWorks的任务。另一个是Linux线程。在Linux中(我也相信最新版本的VxWorks btw),存在一组相关任务的概念。属于同一组的任务共享内存空间和其他一些资源(例如文件处理程序)。 Linux进程就是这样一组任务。

大的OS调度程序调度任务而不是进程。该过程是程序员将对相关线程组合起来进行思考的对流抽象。

我希望有所帮助。

0

在vxWorks中,任务是一个可运行的单元。

任务具有唯一任务空间和特定优先级(如您在taskSpawn函数中定义的)的TCB(任务控制块)。

vxWorks调度程序只能运行任务,这是最小的可运行单元(调度程序可以运行内核本身,中断可以在系统中运行)。

决定运行哪个任务将基于任务状态(必须在READY中),并且任务优先级(在vxWorks中,最高优先级是较低的数字)。

请注意,几个任务可能具有相同的优先级,然后内核根据您配置的方案(FIFO或循环)运行不同的任务。

在vxWorks中,所有任务都有相同的内存空间(包括内核内存空间)。这就是WindRiver从vxWorks 6.x中添加“类似进程”机制的原因。进程有自己的“虚拟内存空间”,由MMU保护。

只是以夏日为你:

任务具有对系统相同的内存空间。

线程在其进程中具有相同的内存空间。

MMU保护的进程内存空间。

+0

实际上,您可以使用SMP并行运行多个任务 – mjs

0

除了现有anwers: 如果你需要创建您的VxWorks系统上的POSIX线程(这是可能的,包括POSIX的内核配置和调用在pthread_create()),你会发现,这些线程将出现作为任务列表中的任务(在C shell中键入'i')。

因此,任务和线程非常相似。 VxWorks甚至将POSIX线程包装为任务,以便可以与现有的本地任务并行处理它们。

0

任务和线程与进程类似。但不同之处在于线程没有独立的内存空间来存放它们自己的内存空间,因此它们在进程本身的pcb(堆栈)下运行。但是,任务具有自己的堆栈区域,并且是轻量级的进程,即tcb与PCB上下文切换或任务切换可以更快地发生。 由于vxworks处理rtos并且切换延迟应该非常小,它会处理任务。