Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is a preemptive multitasking OS possible on the interruptless DCPU-16?

I am looking into various OS designs in the hopes of writing a simple multitasking OS for the DCPU-16. However, everything I read about implementation of preemptive multitasking is centered around interrupts. It sounds like in the era of 16-bit hardware and software, cooperative multitasking was more common, but that requires every program to be written with multitasking in mind.

Is there any way to implement preemptive multitasking on an interruptless architecture? All I can think of is an interpreter which would dynamically switch tasks, but that would have a huge performance hit (possibly on the order of 10-20x+ if it had to parse every operation and didn't let anything run natively, I'm imagining).

like image 248
Andrew Gorcester Avatar asked Apr 09 '12 04:04

Andrew Gorcester


People also ask

What is a preemptive multitasking in operating system?

Preemptive multitasking is task in which a computer operating system uses some criteria to decide how long to allocate to any one task before giving another task a turn to use the operating system. The act of taking control of the operating system from one task and giving it to another task is called preempting.

What are the difference between preemptive and cooperative multitasking OS?

Preemptive multitasking is a task used by the OS to decide for how long a task should be executed before allowing another task to use the OS. Cooperative multitasking is a type of computer multitasking in which the operating system never initiates a context switch from a running process to another process.


1 Answers

Preemptive multitasking is normally implemented by having interrupt routines post status changes/interesting events to a scheduler, which decides which tasks to suspend, and which new tasks to start/continue based on priority. However, other interesting events can occur when a running task makes a call to an OS routine, which may have the same effect.

But all that matters is that some event is noted somewhere, and the scheduler decides who to run. So you can make all such event signalling/scheduling occur only only on OS calls.

You can add egregious calls to the scheduler at "convenient" points in various task application code to make your system switch more often. Whether it just switches, or uses some background information such as elapsed time since the last call is a scheduler detail.

Your system won't be as responsive as one driven by interrupts, but you've already given that up by choosing the CPU you did.

like image 97
Ira Baxter Avatar answered Sep 20 '22 03:09

Ira Baxter