【问题标题】:Simple and efficient scheduling implementation for ARM single coreARM单核简单高效的调度实现
【发布时间】:2013-09-20 15:42:53
【问题描述】:

我想设计和实现一个裸机,OS-likesimple and safe scheduler

该机制应处理 IRQ 上下文(USB 和 SDH),其中 3-4 个主子例程同时操作 USB 和 SDH 控制器,并且都具有一定的 CPU 使用率。

对于 ARM cortex A12 单核,最好和最有效的方向是什么,以实现安全的调度机制,运行所有子例程(全部在特权模式下)并且可以处理 IRQ 上下文?

【问题讨论】:

  • 你写过代码吗?你有更具体的问题吗?有很多免费的实时高管可供您参考。
  • 我正在尝试找出正确的设计,然后尝试自己实现它,但我不确定我是否考虑了所有正确的考虑。我已经实现了所有子例程和 irq 处理程序,长代码,但我想包装它们并以正确的方式调度它们。谢谢
  • 这绝对需要意见。一个明确的设计标准是先发制人与非先发制人。同样,我会假设没有 MMU?如果它是非抢占式(或合作式),则无需在上下文切换上保存任何寄存器并在汇编器中编写 ISR;这使得调度程序非常高效。我认为 best 是您需要解决的问题的超载部分。
  • 也许Simon Tatham coroutines 对您来说很有趣。如果你有的话,也可以看看 Coroutine at wikipedia 或 Donald Knuth 的书。
  • 基本上,你有一个处理USB协程线程。当没有更多数据要处理时,它yield 并且SDH 用户线程或更高层的USB 例程运行。您的 ISRfeed 协同例程。我猜 routines 正在处理不同的层。当你有足够大的块时,你可以继续下一层。这有助于 缓存局部性,如果结构正确,您应该会获得更好的 I/O 性能。

标签: c arm scheduling irq bare-metal


【解决方案1】:

如果协作线程对你来说已经足够了,你可以试试Lua language,它原生支持协程,并且可以轻松地与 C 代码交互。还有一个用于嵌入式处理器的端口:请参阅eLua

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2016-05-22
    • 2011-06-19
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多