Friday, November 19, 2010

(empo-tymshft) Multitasking in all its glory

I often find myself using a netbook. On this small computer, there are times when I will be running Mozilla Firefox (with multiple tabs), Windows Media Player, the scrobbler, and maybe a solitaire game or something. To my mind, all of these applications appear to be working simultaneously. And unless I'm doing something like playing an HD YouTube video, even my small netbook can handle all of these things happening at once.

I take this for granted, forgetting that early in my business career, this was impossible on many systems that were accessible to most of us.

Multitasking has been implemented in several different ways over the years, as the Wikipedia entry on computer multitasking points out. The Wikipedia authors detail these differences, which include multiprogramming, cooperative multitasking, pre-emptive multitasking, and others.

An early example of a multiprogramming implementation was the LEO III, part of the LEO series of computers. The LEO III allowed three jobs to be run simultaneously. Well, sort of. As the Wikipedia authors describe it:

Several different programs in batch were loaded in the computer memory, and the first one began to run. When the first program reached an instruction waiting for a peripheral, the context of this program was stored away, and the second program in memory was given a chance to run. The process continued until all programs finished running.

Multiprogramming doesn't give any guarantee that a program will run in a timely manner. Indeed, the very first program may very well run for hours without needing access to a peripheral. As there were no users waiting at an interactive terminal, this was no problem....

As computer usage moved to another mode of operation, another solution was needed. One of the more popular solutions that consumers encountered was cooperative multitasking. This could not be implemented until the hardware was powerful enough to support it - in the early days, it was hard enough to get a computer to run one instance of DOS, much less two or more. Breakthroughs in this arena included Windows 386, which Steven Hodson described in a recent post. While the promo video is admittedly silly, it does demonstrate the ability to run one program, start running a second program, and have the first program finish what it was doing. It sounds trivial today, but this was a big deal back in the 1980s.

However, this solution had its own drawbacks. Wikipedia:

Because a cooperatively multitasked system relies on each process regularly giving up time to other processes on the system, one poorly designed program can consume all of the CPU time for itself or cause the whole system to hang.

And it didn't matter whether you were using one of the early Windows operating systems, or one of the early Macintosh operating systems - everyone had this problem.

Well, not the Unix users, who were sitting smugly in a corner. Unix may have had other issues, but memory management wasn't one of them. The pre-emptive multitasking system was more robust than the cooperative model followed in Redmond and Cupertino. Eventually, pre-emptive multitasking became available on other systems:

The earliest preemptive multitasking OS available to home users was Sinclair QDOS on the Sinclair QL, released in 1984. The Commodore Amiga 1000 released in 1985...made use of a preemptive multitasking kernel....

Eventually these crept into the Windows and Mac worlds, with Windows people obtaining this feature in Windows NT and Windows 95. When Mac OS X (which was Unix-based) was released, the adoption of pre-emptive multitasking was complete.

However it, the ability of personal computers, and even mobile phones, to multi-task has given us significant computing capabilities. If you don't believe me, imagine what would happen if multi-tasking were to be suddenly taken away.
blog comments powered by Disqus