This is an implementation of a preemptive Round-Robin scheduling algorithm with priorities, run on a specified mix of processes. The input to the program will specify scheduler parameters such as the time slice and the length of time that a process is unavailable to run when it blocks. Input will also include a list of processes to be scheduled.
The program accepts three arguments on the command line:
- The input file name
block_duration: the decimal integer time length that a process is unavailable to run after it blockstime_slice: the decimal integer length of the time slice for the Round-Robin scheduler
The input file, specified as the first command line argument, contains the list of processes to schedule.
All numeric values in the input file are decimal integers. The time unit doesn't matter; you can think of it as milliseconds.
This input file will contain 1 line per process. Lines will be sorted in increasing order of arrival time in the system. Each line will have the following format:
name priority arrival_time total_time block_interval
nameis a sequence of non-blank characters representing the name of the processpriorityis the priority level for the process, from 0 to 9. A higher number indicates a process should take precedence over lower-numbered priority processes (these are absolute priorities).arrival_timeis the time at which the process arrives in the systemtotal_timeis the total amount of CPU time which will be used by the processblock_intervalis the interval at which the process will block for I/O. When a process blocks, it is unavailable to run for the time specified by the command line argument block_duration.
All output is written to standard output. A set of lines is written consisting of:
- A single line containing the
block_durationandtime_sliceas specified on the command line. Values are separated by spaces. - One line for each interval during which a process is running or the system is idle. The line consists of a single space, followed by the current simulation time (starting at 0), followed by the process
name(or "(IDLE)" if no process is running), the length of the interval, and a status code indicating why the interval ended:Bfor blocked,Sfor time slice ended,Tif the process terminated, orIfor an idle interval. The fields are separated by the tab character, '\t'. - After all jobs have terminated, a line is written consisting of a single space, the simulation time at which the last job terminated, a tab character, the string "(END)", another tab character, and the average turnaround time of all processes (floating point value).
Sample input and output files are supplied in inputData. The two .txt files are input (use only one input file for any execution of the program). Corresponding sample output files are given for different combinations of block_duration and time_slice.
Here is a sample input file, program1_joblist1.txt:
A 0 0 100 25
B 5 1 50 20
C 2 2 90 45
Here is a sample output from running this sample with block_duration = 20 and time_slice = 10 (program1_joblist1_20_10.out):
20 10
0 A 10 S
10 B 10 S
20 B 10 B
30 C 10 S
40 C 10 S
50 B 10 S
60 B 10 B
70 C 10 S
80 C 10 S
90 B 10 T
100 C 5 B
105 A 10 S
115 A 5 B
120 (IDLE) 5 I
125 C 10 S
135 C 10 S
145 C 10 S
155 C 10 S
165 C 5 T
170 A 10 S
180 A 10 S
190 A 5 B
195 (IDLE) 20 I
215 A 10 S
225 A 10 S
235 A 5 B
240 (IDLE) 20 I
260 A 10 S
270 A 10 S
280 A 5 T
285 (END) 184
Here's a sample output from the same process list, with a block_duration of 50 and a time_slice of 10 (program1_joblist1_50_10.out):
50 10
0 A 10 S
10 B 10 S
20 B 10 B
30 C 10 S
40 C 10 S
50 C 10 S
60 C 10 S
70 C 5 B
75 A 10 S
85 B 10 S
95 B 10 B
105 A 5 B
110 (IDLE) 15 I
125 C 10 S
135 C 10 S
145 C 10 S
155 B 10 T
165 C 10 S
175 C 5 T
180 A 10 S
190 A 10 S
200 A 5 B
205 (IDLE) 50 I
255 A 10 S
265 A 10 S
275 A 5 B
280 (IDLE) 50 I
330 A 10 S
340 A 10 S
350 A 5 T
355 (END) 232.333