【问题标题】:Task in vxworksvxworks 中的任务
【发布时间】:2011-12-06 06:52:15
【问题描述】:

当我们执行 taskSpawn 时,正在 vxworks 中创建一个任务。实际上是什么任务。跟线程有关系吗。

据我了解,vxworks 是基于线程的操作系统。

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

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

请帮忙

【问题讨论】:

    标签: linux multithreading operating-system vxworks


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      除了现有的答案: 如果您需要在 VxWorks 系统上创建 POSIX 线程(可以通过在内核配置中包含 POSIX 并调用 pthread_create() 来实现),您会注意到这些线程将作为任务出现在您的任务列表中(在C 外壳)。

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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

        只是为了给你总结一下:

        任务在系统中拥有相同的内存空间。

        线程在它们的进程中拥有相同的内存空间。

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

        【讨论】:

        • 其实可以使用SMP并行运行多个任务
        【解决方案4】:

        任务是操作系统设计中的抽象概念。任务是执行的单个上下文。任务有一个内存空间,它在其中存储数据和代码。此内存空间可能会或可能不会与其他任务共享。一个任务有一个状态(例如正在运行、停止、被杀死......),它(通常)有一个堆栈。任务优先于其他任务。

        关于此类任务的示例,是 VxWorks 任务。另一个是 Linux 线程。

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

        总的来说,操作系统调度程序调度任务而不是进程。进程是程序员一起思考相关线程组的对流抽象。

        希望对你有所帮助。

        【讨论】:

          【解决方案5】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-09
            • 1970-01-01
            相关资源
            最近更新 更多