【问题标题】:OS task scheduling emulator [closed]操作系统任务调度模拟器[关闭]
【发布时间】:2014-11-21 01:17:38
【问题描述】:

我正在尝试找到一个可以以抢先方式处理任务(或线程)的 c 或 c++ 库。我需要一种机制,可以像在 RTOS 中一样逐个管理任务。创建任务(作为任务的入口点)、时间切片、切换等......

可以写在用户空间吗?

【问题讨论】:

  • 我认为,如果没有一些特定于平台的东西,那就很难了。据我所知,没有(C++ 特定的)机制可以在线程执行时中断它。你需要一个计时器来实现抢占。
  • 您使用哪个平台进行开发?
  • 目前(用于模拟目的)它是 x86 和 linux。真正的 RTOS(我认为它将是 RTEMS)将用于 ARM。
  • 你可以试试 Linux 调度 api,比如 sched_{get,set}scheduler 来操作任务的优先级/策略。
  • 如果你使用的是windows,你可以使用SetThreadPriority(),但是优先级的数量是有限的。对于我过去从事的嵌入式项目,一个常见的限制是 16 个线程,每个线程都有不同的优先级(这种设置没有时间切片)。

标签: c++ c task simulation rtos


【解决方案1】:

最简单的解决方案可能是在虚拟机或处理器模拟器中运行真实 RTOS。任何带有 x86 端口的 RTOS 都可能被说服在 PC 虚拟机中运行,但您也可以使用 QEMU。

例如,您可以运行RTEMS on QUEMU,而 QUEMU 本身可以模拟 ARM 目标 - 尽管这可能无关紧要,i386 模拟可能会满足您的需求并且会更快。

【讨论】:

    【解决方案2】:

    RTOS 调度/调度以高效方式处理线程需要硬件中断才能与外围硬件(KB、鼠标、磁盘、NIC、计时器等)进行有效通信。标准 C 没有处理中断的方法,所以你不能这样做。

    如果您的内存管理硬件定义了单独的用户和内核内存访问权限,那么不会 - 硬件中断会改变硬件状态,因此无论您是否愿意,您都将离开用户空间。

    您应该知道,抢占式调度程序的主要设计目的不是在定时器中断时在需要 CPU 的任务之间切换 - 它们首先旨在通过从不需要的任务中移除 CPU 来提供高效、高性能的 I/O这是因为他们的 I/O 请求无法立即得到满足。

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2014-05-12
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多