For the first phase, I coded in processes to be created in Kernel mode. Each process will be unique by having an ID. These processes will be used later to store information, removing, or whatever role they are given. Once my processes are coded, then I have to code in locks and conditions. This allow me to use threads to allow certain processes to be run first before other, aka mutual exclusion and critical section. You can view how I code this part in my project page
Now that I had working processes, my next task is for user processes to call kernel processes. This would allow system calls. to handle kernel processes like calling 'Wait' for a proccess to hault, 'Terminate' to delete a process, 'GetPid' to get the process' ID, and 'GetTimeOfDay' to get the time of the day set on the CPU. All of these handlers are stored inside an array of Interrupt Vectors. Depending if it is an Illegal Interrupt or System Call, it will call certain handlers to deal with the issue. Since these handlers are very important, they will be proccesses run at number 1 priority over any other processes. Furthermore, now that I have handlers set up, I can code in Disk write and read. User processes can call Kernel processes to handle writing and reading of disks. This will build up the code to manage memory in virtual space for my last part. View Phase2A-Phase2D for this part.
When it came to storing data into memory, I used virtual addresses in order to give them a position in the storage space. I approached it through paging in frames. These frames are giving a process ID to distinguish it from other processes, page boolean to see if it's set up, and a free boolean to see if that area is free to be accessed or not. I set up an array size of pages called Page Table. This is where all the pages would be allocated into. Check phase3A-Phase3B for this part.