# Operating-System-Simulator ### OS simulator created for CS480 (Operating Systems) course (Spring 2022) Config file and metadata file upload code and helper functions (`Sim01`) were written by Dr. Michael Leverington, and each character has been typed/debugged by me, myself, and I. `Sim02` consists of the basic structure of the actual **simulator.c** file, involving the creation and management of Process Control Blocks. Operations default to *non-preemptive* **F**irst **C**ome **F**irst **S**erve (`FCFS-N`). `Sim03` implements the `SJF-N` (**S**hortest **J**ob **F**irst) scheduler as well as memory management display and operations. `Sim04` introduces preemptive scheduling, allowing for interrupts. The scheduling algorithms added are `FCFS-P`, `SRTF-P`, and `RR-P`. ------ ### Instructions to run simulation: ## ### Runtime flags There are three flags the simulator is capable of taking in to run the simulation: `-rs` *run simulator*       -> runs the simulator by using data from the config and metadata files given `-dc` *display config*      -> shows all configuration information of the given config file `-dm` *display metadata* -> outputs the op code stream that the simulator is meant to interpret ### Command structure After compiling using the command `make -f Sim0X_mf` where **X** is the number of the simulator, the program can be run by typing: `./Sim0X -rs -dc -dm config.cnf` where config.cnf is the given configuration file The flags are not required, but are necessary for the program to execute in any meaningful way. ### Required files For the simulation to run, a configuration file must be provided. Without one, the program will display a message including the required command structure. Two files in total are required: #### Configuration File Here is an example of a properly formatted configuration file. If the format is incorrect, or if the arguments given are not allowed/specified, the program will not run and will spit out an error. >Start Simulator Configuration File:
>Version/Phase: 1.05
>File Path: metadatafile.mdf
>CPU Scheduling Code: SJF-N
>Quantum Time (cycles): 3
>Memory Available (KB): 11100
>Processor Cycle Time (msec): 10
>I/O Cycle Time (msec): 20
>Log To: Both
>Log File Path: logfile.lgf
>End Simulator Configuration File. The details for specific number ranges allowed can be found in the boolean function **valueInRange** in the **configops.c** file. The order of configuration specifications does not matter, as long as the Start and End lines are ... at the start and end. #### Metadata File The metadata file (that must be specified in the configuration file) includes the actual operations that the program will simulate. There is one `sys start` op code in the beginning and one `sys end` op code at the end of the file. Each `app start` is interpreted as a separate process, and is bounded by an `app end`. The number of `app start` & `app end` commands must be equal, or the program will not run. >Start Program Meta-Data Code: >
sys start >
app start, 0 >
dev in, keyboard, 50 >
cpu process, 7 >
dev out, video signal, 42 >
cpu process, 5 >
dev out, hard drive, 21 >
dev in, usb, 14 >
dev in, keyboard, 50 >
cpu process, 9 >
dev out, hard drive, 30 >
cpu process, 5 >
app end >
app start, 0 >
dev in, video signal, 42 >
dev out, hard drive, 18 >
dev in, hard drive, 15 >
dev in, hard drive, 27 >
cpu process, 9 >
dev out, hard drive, 21 >
cpu process, 7 >
cpu process, 5 >
app end >
app start, 0 >
dev in, usb, 12 >
dev out, video signal, 70 >
dev in, video signal, 35 >
cpu process, 5 >
dev out, monitor, 100 >
dev in, video signal, 63 >
cpu process, 5 >
dev out, video signal, 70 >
cpu process, 8 >
dev in, serial, 36 >
dev out, video signal, 63 >
dev out, sound signal, 30 >
app end >
app start, 0 >
dev in, hard drive, 21 >
cpu process, 5 >
dev out, monitor, 60 >
cpu process, 8 >
dev in, video signal, 56 >
dev in, hard drive, 21 >
dev in, hard drive, 15 >
dev in, video signal, 49 >
dev out, hard drive, 30 >
app end >
sys end >
End Program Meta-Data Code. If the simulator is given the metadata file above, four Process Control Blocks (PCBs) will be created corresponding to the four `app start` op codes given. The simulator will then use the given scheduling code to display and run the corresponding operations accordingly. ## Here is an example of the simulator running with the Shortest Job First Non-preemptive scheduling algorithm: ![](https://github.com/tds325/Operating-System-Simulator/blob/main/Sim04Cropped.gif) ![](https://gitfront.io/r/user-1299430/EH1taeanJhBS/Operating-System-Simulator/raw/Sim04Cropped.gif)