Multiprocessing The one main requirement is the obvious one. You must be able to run multiple (more that TWO) independent processes concurrently. How you command a process to start is up to you. You might decide that whenever your shell is to run a .exe program, it creates a new process to support it, and the process is terminated when the program exits. Or you might decide to provide a command for starting a new process, and have that process be just like the original, running the shell itself and obeying whatever commands it is given. You must have a separate page directory (and process control block) for each process, and a command that lists all current processes and their status. There must be something equivalent to a queue of processes that are ready to run, so that some kind of fairness in sharing CPU time is enforced. Pages allocated to processes must be recycled and returned to the free list when a process ends. **** Because I only recently fixed a problem that was troubling at least (and probably at most, but I'll pretend otherwise) two of you, I am delaying the other obvious requirement for this assignment. It hasn't gone away, the requirement has just been postponed. And this is it: Your OS must provide "pre-emptive" time-sharing. That is, a timer interrupt is used to enforce fully fair sharing of the CPU. Each runnable process gets a fraction of a second to do its work before it is suspended to allow another process to run. And of course, a process must have a way to voluntarily give up its turn on the CPU so you can properly demonstrate concurrent execution.