当我们执行taskSpawn时,任务正在vxworks中创建。什么是实际任务。是否与线程有任何关系。
据我所知,vxworks是基于线程的操作系统。
有人可以帮我解决实际情况中任务/线程/进程之间的真正区别。
在某处,我看到任务是执行一组指令。如果是这样,那么线程也有一些指令集,所以我们可以将线程称为任务。
请帮忙
答案 0 :(得分:7)
Thread是一个通常用于支持流程模型(Unix / Linux / Windows)的操作系统的概念,您可以在其中运行流程 这个过程可以有一个执行线程(就像一个简单的C程序)。或者您可以创建多个线程以在当前进程内存空间中并行执行某些操作。
对于较旧的vxWorks,没有流程模型。一切都会在同一个内存空间中运行。 vxWorks任务提供了系统代码执行的上下文。所有代码(中断处理程序除外)都将在Task的上下文中执行。
任务是独立的执行单位。他们可以共享资源,拥有共同的内存等......但是调度程序根据非常具体的标准执行任务。通常,系统中最高优先级的任务是在任何给定时间执行的任务。
任务完成/睡眠/阻塞等待资源后,系统中的下一个最高优先级任务将运行。
出于您的目的,您可以将任务视为一个主题。
答案 1 :(得分:3)
任务是OS设计中的抽象概念。任务是单个执行上下文。任务有一个存储空间,它在存储数据和代码的地方运行。该存储空间可以与其他任务共享,也可以不共享。任务具有状态(例如,运行,停止,被杀......),它(通常)具有堆栈。任务优先于其他任务。
在此类任务的示例中,是VxWorks任务。另一个是Linux线程。
在Linux中(我也相信最新版本的VxWorks btw),存在一组相关任务的概念。属于同一组的任务共享存储空间和若干其他资源(例如文件处理程序)。 Linux进程就是这样一组任务。
一个大的,OS调度程序调度任务而不是进程。这个过程是一个对流的抽象,让程序员一起思考一组相关的线程。
我希望有所帮助。
答案 2 :(得分:0)
在vxWorks中,任务是一个可运行的单元。
任务具有TCB(任务控制块),具有唯一的任务空间和特定优先级(如您在taskSpawn函数中定义的那样)。
vxWorks调度程序只能运行任务,这是最小的可运行单元(调度程序可以运行内核本身,中断可以在系统中运行)。
决定运行哪个任务将基于任务状态(必须处于READY状态)和任务优先级(在vxWorks中,最高优先级是较低的数字)。
请注意,多个任务可能具有相同的优先级,然后内核将根据您配置的方案(FIFO或循环法)运行不同的任务。
在vxWorks中,所有任务都具有相同的内存空间(包括内核内存空间)。这就是WindRiver从vxWorks 6.x添加“Process like”机制的原因。进程有自己的“虚拟内存空间”,受MMU保护。
只是为你总结一下:
任务在系统上具有相同的内存空间。
线程在其进程中具有相同的内存空间。
受MMU保护的进程内存空间。
答案 3 :(得分:0)
除了现有的anwers: 如果您需要在VxWorks系统上创建POSIX线程(可以通过在内核配置中包含POSIX并调用pthread_create()),您会注意到这些线程将在任务列表中显示为任务(类型'我在C shell中。)
因此,任务和线程非常相似。 VxWorks甚至将POSIX线程包装为任务,因此它们可以与现有的本机任务并行处理。
答案 4 :(得分:0)
任务和线程类似于进程。但不同的是线程没有单独的内存空间,因为它们在进程本身的pcb(堆栈)下运行。但是,task有自己的堆栈区域,并且是一个轻量级的进程,即,与之相比,tcb要小得多pcb所以上下文切换或任务切换可以更快地发生。 由于vxworks处理rtos并且切换延迟应该非常少,因此它处理任务。