Increased MEMORY_MAX to 768.
Added constants to denote kernel mode and user mode.
Initialized _Mode to KERNEL_MODE upon system boot.
Modified the read/write methods to first check if the CPU is in
kernel mode before executing the IO. If it is, then it skips checking whether the currently executing process has access to the specified range.
Modified all CPU I/O instructions to adhere to the updated MMU interface.
Modified system calls to toggle the mode bit appropriately.
Added a global variable '_ActiveProcess' to track the currently executing process.
Modified 'krnNewProcess' to assign integer PIDs sequentially.
Modified 'krnDispatchProcess' to update the '_ActiveProcess' global variable.
Added an interrupt request code for a memory manager interrupt.This allows the memory manager to generate  a software interrupt when an a memory related error occurrs. Added an interrupt routine to handle MMU IRQs.
Modified the MMU as follows:
	Replaced magic numbers with constants.
	When an access violation or out-of-memory access error occurs the MMU generates a software interrupt rather than trapping to the kernel.

Modified the shellLoad command to parse the text in the program input text area and pass it to the kernel. Previously, shellLoad wrote the source to main memory before calling the krnNewProcess command. This caused a potential issue when the load command was called when there was no memory available. It would simply overrwrite main memory...very bad.
Replaced magic number with a constant.
Created scheduler.js for the CPU scheduler.
Modifed the MMU to interpret the addresses passed to read/write requests as logical addresses rather than absolute addresses.
Changed the implementation of the resident lis from an array to a map. This prevents bugs that occur when assigning PIDS based on the length of the resident list. Previously, the PID was used to index the resident list, but this was error prone because processes are not removed from the ready list in any particular order, so the value of the PID would not always qualify as a valid index. The PID is now a separate variable and it is used as a key into the resident list map. Also, the resident list has been renamed from _KernelPCBList to _KernelResidentList.
Added a global variable _Quantum to represent the amount of CPU time the scheduler allocates per process.
Added a constant PARTITION_SIZE to represent the maximum address space for a process.
Added a constant CONTEXT_SWITCH_IRQ to allow the scheduler to request a context-switch.
Added a global variable _Scheduler to represent the CPU scheduler.
Modified krnOnCPUClockPulse to delegate CPU related processing to the CPU scheduler.
Modified the kernel interrupt handler to check for context switch interrupts generated by the CPU scheduler.
Created a krnCPUContextSwitch routine to be called by the kernels interrupt handler when the scheduler requests a context-switch.
Relaced a magic number with the PARTITION_SIZE constant in krnNewProcess.
Created a new kernel routine called krnScheduleProcess whose sole resposibility is placing a PCB on the ready queue to be exected by the CPU scheduler.
Created scheduler.js which contains an implementation of a CPU scheduler that uses a round-robin scheduling scheme.
Added the scheduler.js file to index.html
Added scheduler initialization code to krnBootstrap.
Modified the shell's executeProcess routine to call the new krnScheduleProcess kernel routine.
Fixed a bug that occurred during context switches that caused processes to output unexpected results when run concurrently. The cause of the bug was that the doDispatch routine did not fully restore the CPU state.
Added a routine 'quantum' that allows the user to specify the quantum value.
Added a routine 'ps' that lists all active processes.
Added a routine 'runall' that schedules all resident processes for execution.
Renamed the global 'PARTITION_SIZE' to 'ADDRESS_SPACE_MAX' to represent the maximum address space size per process.
Renamed the global 'MEMORY_MANAGER_IRQ' to 'MEMORY_ERROR_IRQ'.
Changed the value of MAX_PROCESSES to 3.
Changed the value of ACCESS_VIOLATION_ERROR to -2.
Changed the value of OUT_OF_MEMORY_ERROR to -1.
Modified all inequality expressions to use the '===' operator rather than '=='.
Fixed a bug in the BNE CPU instruction where the branch address was miscalculated in certain cases.
Modified the MMU allocate function to return a negative value if the allocation failed. This allows the kernel to handle out-of-memory errors appropriately.
Updated references to the global 'MEMORY_MANAGER_IRQ' to reflect the new name of 'MEMORY_ERROR_IRQ'.
Modified the console's putText method to handle word-wrapping.
Implemented the interrupt handler routine for memory related interrupt errors.
Modified krnNewProcess to check for an OUT_OF_MEMORY_ERROR and handle it appropriately.
Modified the shell's loadProgram routine to output an error message if the load failed due to an out-of-memory error.
Added the skeleton for the kill command.
Modified the shell's runAll command to use constants instead of magic numbers.
Modified the scheduler's doExecute method to set the _ActiveProcess to null while performing a context switch.
Fixed a bug in the shell's PS routine that would cause a process to be listed twice in certain cases.
Implemented the shell's kill routine.