Authors: Mikhail Skobov - skobov@wisc.edu Pierce Johnson - pbjohnson2@wisc.edu Shell: For the shell portion of the project, we implemented a shell that is capable of functioning similarly to a regular linux shell. We created custom cd, ls, exit, wait, and pwd commands, as per project specifications. Currently, there is a known issue: it is not capable of taking user input from the "./mysh < file" way. This was not something mentioned in the project specification, so 2/35 tests fail due to that. For grading the interactive mode, please run it manually. Scheduler: For the scheduler, we implemented a MLFQ scheduler mixed with a lottery scheduler for deciding which processes to run. We implemented the queue simply by adding a "priority" field to the proc struct, and the looped over all procs to check the "queues". Since the max # of procs is 64, this was a justifiable solution because it is not very computationally or spacially intensive. For graphing the procs, we added printf statement that printed out the proc #, low_ticks, and high_ticks at every "tick". We the added a program to the user space that forked a process (spin), and set its tickets to 2 (double that of the parent). We then executed make quemu and redirected the output to a .csv file. After removing some extra words/data, we imported the file into matlab and plotted the data for the entire runtime of the spin process. It is clear to see that the process with more tickets ran approx 2x more often in the low_priority queue that the process with less tickets. Graphs: All graphs are plotted with #ticks on the x-axis and proc-tick-count on the y-axis low_total: Shows the entire 800 ticks of the low_tick count for both processes low_zoom: Shows a zoomed in portion to show that each proc executed in increments of 2 straight ticks in the low-pri queue, that they don't overlap, and that there are spaces when they go back up to the high-pri queue. low_high: Shows the total ticks each ran for in both low and high queues high: Shows a "step" graph indicating that each process ran in the high queue for a single tick and spent most time in the low-pri queue.