Date: Wed, 26 Jun 1996 21:44:23 +0200 (DFT) From: "Garrido Freire, Fco. Javier ((R)JA.GAR. SOFT)" Reply-To: Garrido Freire To: djgpp AT delorie DOT com Subject: Multitasking in DOS (fwd) Message-Id: Organization: Infoalum Mail Gateway Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1764323942-1360270983-835125931=:10866" Content-Id: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime AT docserver DOT cac DOT washington DOT edu for more info. ---1764323942-1360270983-835125931=:10866 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Several month ago, I got out DJGPP v2.0. I hoped it supported multitasking, but it didn't. I wonder why, because DOS has a elementary support for multitasking built-in since v3.0. MULTITASKING IN DOS? Yeah!! Just, have a look at the well-known debug program. DOS can run two programs, debug itself, and that one which debug is debugging. You decide when DOS must run debug's code and when child's code by means of 'T'rap and 'G'o debug's commands. You work as a scheduler. If so, it shouldn't be too difficult to write a routine based in Trap which can execute more than a child. I remember you, trap command has an argument, 'value', indicating how many instructions must be executed. Of course, this's not enough, I know, to implement multitasking. One of the most important things is to manage Input/Output devices. There should be a lot to say just about this: keyboard, screen, disk, memory, ... And functions: pipe, exec, dup, dup2, kill, getpid, getpgrp, popen, exit, chdir, ... and surely fork and wait, :) I'd like improve DJGPP with multitasking by myself, but DJGPP is too BIG for me (alone?) and I don't know protected-mode programming very well. However, as "el movimiento se demuestra andando", I've written a very easy demo. This program works as a monitor and takes a list of programs to run concurrently. Unfortunatly, I couldn't make INT 01h method work (I don't know why). So, children use 'cooperative' method. I don't like it very much, but, it WORKS!!. Still, I'm working on it. BTW, information for making the monitor comes from "Monitor for IBM-PC v1.0" by Tim Paterson, "Undocumented DOS", June 1991, chap 7. This information has been invaluable. I emailed to Ralf Brown asking him if I could release this piece of code from Monitor. I haven't answer yet ... Another good source of information is "Operating Sistems: Design and Implementation" by Andrew S. Tanenbaum. He gets a much better, authentic 'preentive' multitasking at a *8088*!! I'm waiting for comments about this. Please, flames be soft. PS: I'm still waiting for permission from Ralf Brown and/or Tim Paterson. Ah!, please, excuse my 'bad' English! ------------------------------------------------------------------- F. Javier Garrido F. (R)JA.GAR. SOFT Dpto. de Computacion e IA MINIX User. (USENET comp.os.minix & SCS) Facultad de Informatica Email: Francisco-Javier DOT Garrido AT cs DOT us DOT es y Estadistica de Sevilla URL: http://www.cs.us.es/~garridof (SPAIN) "The light that burns twice as bright, burns half as long ... ... and you have burned so very, very brightly, Roy." TYRREL from Blade Runner ---1764323942-1360270983-835125931=:10866 Content-Type: APPLICATION/ZIP; name="multi.zip" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: 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 ---1764323942-1360270983-835125931=:10866--