首页 文章

vxworks中的任务

提问于
浏览
3

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

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

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

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

请帮忙

5 回答

  • 7

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

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

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

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

    出于您的目的,您可以将任务视为一个线程 .

  • 0

    任务是OS设计中的抽象概念 . 任务是单个执行上下文 . 任务具有在其存储数据和代码的地方操作的存储空间 . 该存储空间可以与其他任务共享,也可以不共享 . 任务具有状态(例如,运行,停止,被杀......),它(通常)具有堆栈 . 任务优先于其他任务 .

    在这样的任务的例子中,是VxWorks任务 . 另一个是Linux线程 .

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

    一个大的,OS调度程序调度任务而不是进程 . 这个过程是一个对流的抽象,让程序员一起思考一组相关的线程 .

    我希望有所帮助 .

  • 0

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

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

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

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

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

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

    只是为你总结一下:

    任务在系统上具有相同的内存空间 .

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

    受MMU保护的进程内存空间 .

  • 0

    除了现有的anwers之外:如果您需要在VxWorks系统上创建POSIX线程(可以通过在内核配置中包含POSIX并调用pthread_create()),您会注意到这些线程将在您的任务中显示为任务list(在C shell中输入'i') .

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

  • 3

    任务和线程类似于进程 . 但不同的是线程没有单独的内存空间,因为它们在进程本身的pcb(堆栈)下运行 . 但是,task有自己的堆栈区域并且是一个轻量级的进程,即,与之相比,tcb要小得多pcb所以上下文切换或任务切换可以更快地发生 . 由于vxworks处理rtos并且切换延迟应该非常少,因此它处理任务 .

相关问题