1. Write a program that will emulate the Multiple Level Feedback scheduling algorithm (see lecture 11).Your program should have the option via a menu to either request the user to input the no. of processes N and then for each process the arrival time AT, the no. of units of CPU time required NUT, and for each run prompt the user for the unit of time UT(quanta) allowed for access to the CPU via a data file called data.txt. Or allow the program to generate a data file using a random number generation function with the relevant data. Your program should then display each process status one per line. The process status labels displayed should beW waitingR runningF completed. A typical display; say for 3 processes, labelled A, B and C.Where A requires 2 units of time NUT = 2, and arrival time AT = 0.B requires 3 units of time NUT = 3, and arrival time AT = 0.C requires 2 units of time NUT = 2, and arrival time AT = 3. Note when two or more processes have an equivalent arrival times then queue them in the order they arrive i.e. 1st come 1st on the queue. Assume at the end of a time-cycle the new processes are added 1st and then the current running process is migrated from the qi to qi+1 Your program should then display T A B C0 R(q0) W(q0) 1 W(q1) R(q0) 2 R(q1) W(q1) 3 F W(q1) R(q0)4 F R(q1) W(q1)5 F W(q2) R(q1)6 F R(q2) F7 F F F Each run should stop when all processes have F status; where T shows each unit cycle of time. Finally your program should display the stats associated with each processes throughput, namely arrival time, start time, wait time, completion time, NUT, penalty ratio. Your program should limit the size of the data values so that the simulation does not run for a long time; best way is to prompt the user for limits as well as have a default set of settings when using the automated data file generation option. Your program should be implemented using linked lists The above programs should all be written in C and work using the Linux operating system where they will be assessed.