multitasking - 中断器DCPU-16上是否可以抢先进行多任务处理?

标签 multitasking interrupt dcpu-16

我正在研究各种OS设计,希望为DCPU-16编写一个简单的多任务OS。但是,我所读到的关于抢先式多任务处理的所有内容都围绕中断。听起来像在16位硬件和软件时代,协作多任务处理更为普遍,但是这要求每个程序在编写时都考虑到多任务处理。

有什么方法可以在无中断体系结构上实现抢占式多任务处理?我所能想到的是一个可以动态切换任务的解释器,但是它将带来巨大的性能损失(如果它必须解析每个操作并且不让任何内容 native 运行,那么性能可能会达到10-20x +)。想象)。

最佳答案

抢先式多任务处理通常是通过使中断例程将状态更改/感兴趣的事件发布到调度程序来实现的,该调度程序根据优先级确定要挂起的任务以及要启动/继续的新任务。但是,当正在运行的任务调用OS例程时,可能会发生其他有趣的事件,这可能具有相同的效果。

但是重要的是,某个事件被记录在某个地方,并且调度程序决定谁来运行。因此,您可以使所有此类事件信令/调度仅在OS调用上发生。

您可以在各种任务应用程序代码中的“方便”点向调度程序添加令人讨厌的调用,以使您的系统更频繁地切换。它是仅切换还是使用一些背景信息(例如,自上次调用以来耗时)是调度程序详细信息。

您的系统不会像由中断驱动的系统那样敏感,但是您已经通过选择所使用的CPU放弃了这一点。

关于multitasking - 中断器DCPU-16上是否可以抢先进行多任务处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068847/

相关文章:

android - 实现 float 应用程序......从哪里开始

Javascript 等价于 gevent.sleep(0)

java - Java 是否可以在一个线程中并行运行多个任务?

linux - 调用 0x16 时出现段错误

interrupt - IM0 中的 Z80 多字节命令

c++ - 如何从 C/C++ 在 Linux 中设置 IRQ 优先级?

assembly - 为什么DCPU-16指令的二进制表示中有一个前导1

通过 C++ 互操作或其他方式进行 C# 一流延续?

dcpu-16 - DCPU-16 汇编器 'dat' 是一个字符串,应该为每个字符生成一个字节或单词吗?

dcpu-16 - DCPU-16 中的签名算术/控制流?