@@ -35,8 +35,11 @@ void processInput() {
35
35
System .out .println ("[1] FCFS (First Come First Serve)" );
36
36
System .out .println ("[2] SSTF (Shortest Seek Time First)" );
37
37
System .out .println ("[3] SCAN " );
38
- System .out .println ("[4] Exit " );
39
- System .out .print ("Enter your choice? [1-4]: " );
38
+ System .out .println ("[4] C-SCAN " );
39
+ System .out .println ("[5] LOOK " );
40
+ System .out .println ("[6] C-LOOK " );
41
+ System .out .println ("[7] Exit " );
42
+ System .out .print ("Enter your choice? [1-7]: " );
40
43
switch (s .nextInt ()) {
41
44
case 1 : {
42
45
FCFS ();
@@ -51,14 +54,30 @@ void processInput() {
51
54
break ;
52
55
}
53
56
case 4 : {
57
+ CSCAN ();
58
+ break ;
59
+ }
60
+ case 5 : {
61
+ LOOK ();
62
+ break ;
63
+ }
64
+ case 6 : {
65
+ CLOOK ();
66
+ break ;
67
+ }
68
+ case 7 : {
54
69
return ;
55
70
}
56
71
default :
57
- System .out .println ("Wrong Choice, Please enter a number between 1 and 4 . " );
72
+ System .out .println ("Wrong Choice, Please enter a number between 1 and 5 . " );
58
73
}
59
74
}
60
75
}
61
76
77
+ void printAverageSeekTime (int totalHeadMovement , int totalLength ) {
78
+ System .out .println ("\n \n \t Average Seek Time: " + (totalHeadMovement ) + " / " + (totalLength ) + " = " + ((double )totalHeadMovement / (double )totalLength ));
79
+ }
80
+
62
81
void FCFS () {
63
82
int [] orderOfProcessing = new int [requestQueue .length ];
64
83
int totalHeadMovement = 0 ;
@@ -88,6 +107,7 @@ void FCFS() {
88
107
for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
89
108
System .out .print ( " -> " + orderOfProcessing [i ]);
90
109
}
110
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
91
111
System .out .println ();
92
112
}
93
113
@@ -136,6 +156,7 @@ void SSTF() {
136
156
for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
137
157
System .out .print ( " -> " + orderOfProcessing [i ]);
138
158
}
159
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
139
160
System .out .println ();
140
161
}
141
162
@@ -231,21 +252,289 @@ void SCAN() {
231
252
for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
232
253
System .out .print ( " -> " + orderOfProcessing [i ]);
233
254
}
255
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
234
256
System .out .println ();
235
257
}
236
258
237
259
void CSCAN () {
260
+ // "requestQueue.length + 2" since, both the extra ends will be added to the queue;
261
+ int [] orderOfProcessing = new int [requestQueue .length + 2 ];
262
+ int totalHeadMovement = 0 ;
263
+ int currentHead = globalCurrentHead ;
264
+
265
+ ArrayList <Integer > firstHalf = new ArrayList <Integer >();
266
+ ArrayList <Integer > secondHalf = new ArrayList <Integer >();
267
+
268
+ for (int i = 0 ; i < requestQueue .length ; ++i ) {
269
+ if (currentHead > requestQueue [i ])
270
+ firstHalf .add (requestQueue [i ]);
271
+ else
272
+ secondHalf .add (requestQueue [i ]);
273
+ }
274
+ Collections .sort (firstHalf );
275
+ Collections .sort (secondHalf );
276
+ System .out .print (firstHalf );
277
+ System .out .println (secondHalf );
278
+
279
+ System .out .print ("\n Traverse to the inner track or the outer track? \n [0] Inner Track\n [1] Outer Track \n Your Choice? " );
280
+ int outer = s .nextInt ();
281
+
282
+ System .out .println ();
283
+ System .out .println ("\t \t +----------------------------------------+" );
284
+ System .out .println ("\t \t |Output for C-SCAN Disk Scheduling Policy|" );
285
+ System .out .println ("\t \t +----------------------------------------+" );
286
+ System .out .println ("\n \t Head currently at: " + currentHead );
287
+
288
+ System .out .println ("\n Iteration \t Current Head \t Disk Movement \t Total Disk Movement" );
289
+ System .out .println ("------------------------------------------------------------------------" );
290
+
291
+ int j = 0 ;
292
+ // Inner Track First
293
+ if (outer == 0 ) {
294
+ for (int i = firstHalf .size () - 1 ; i >= 0 ; --i ) {
295
+
296
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
297
+ totalHeadMovement += currentDiskMovement ;
298
+ orderOfProcessing [j ] = firstHalf .get (i );
299
+ currentHead = firstHalf .get (i );
300
+
301
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
302
+ }
303
+
304
+ // going to 0;
305
+ totalHeadMovement += (currentHead - 0 );
306
+ orderOfProcessing [j ] = 0 ;
307
+ System .out .println ( "\t " + (++j ) +"\t \t " + 0 + "\t \t " + (currentHead - 0 ) + "\t \t " + totalHeadMovement );
308
+ currentHead = 0 ;
238
309
239
- }
310
+ // going to 199;
311
+ totalHeadMovement += Math .abs (currentHead - 199 );
312
+ orderOfProcessing [j ] = 199 ;
313
+ System .out .println ( "\t " + (++j ) +"\t \t " + 199 + "\t \t " + 199 + "\t \t " + totalHeadMovement );
314
+ currentHead = 199 ;
315
+
316
+ for (int i = secondHalf .size () - 1 ; i >= 0 ; --i ) {
317
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
318
+ totalHeadMovement += currentDiskMovement ;
319
+ orderOfProcessing [j ] = secondHalf .get (i );
320
+ currentHead = secondHalf .get (i );
321
+
322
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
323
+ }
324
+ }
240
325
326
+ // Outer Track First;
327
+ else {
328
+ for (int i = 0 ; i < secondHalf .size (); i ++) {
329
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
330
+ totalHeadMovement += currentDiskMovement ;
331
+ orderOfProcessing [j ] = secondHalf .get (i );
332
+ currentHead = secondHalf .get (i );
333
+
334
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
335
+ }
336
+
337
+ // going to 199;
338
+ totalHeadMovement += Math .abs (currentHead - 199 );
339
+ orderOfProcessing [j ] = 199 ;
340
+ System .out .println ( "\t " + (++j ) +"\t \t " + 199 + "\t \t " + Math .abs (currentHead - 199 ) + "\t \t " + totalHeadMovement );
341
+ currentHead = 199 ;
342
+
343
+ // going to 0;
344
+ totalHeadMovement += Math .abs (currentHead - 0 );
345
+ orderOfProcessing [j ] = 0 ;
346
+ System .out .println ( "\t " + (++j ) +"\t \t " + 0 + "\t \t " + 199 + "\t \t " + totalHeadMovement );
347
+ currentHead = 0 ;
348
+
349
+ for (int i = 0 ; i < firstHalf .size (); i ++) {
350
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
351
+ totalHeadMovement += currentDiskMovement ;
352
+ orderOfProcessing [j ] = firstHalf .get (i );
353
+ currentHead = firstHalf .get (i );
354
+
355
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
356
+ }
357
+ }
358
+ System .out .println ("------------------------------------------------------------------------" );
359
+
360
+ System .out .println ("\n \t Total Head Movement: " + totalHeadMovement );
361
+ System .out .print ("\n \t Order of Processing: " + (orderOfProcessing [0 ]));
362
+ for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
363
+ System .out .print ( " -> " + orderOfProcessing [i ]);
364
+ }
365
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
366
+ System .out .println ();
367
+ }
368
+
241
369
void LOOK () {
242
-
370
+ // "requestQueue.length" since, no extra ends will be added to the queue;
371
+ int [] orderOfProcessing = new int [requestQueue .length ];
372
+ int totalHeadMovement = 0 ;
373
+ int currentHead = globalCurrentHead ;
374
+
375
+ ArrayList <Integer > firstHalf = new ArrayList <Integer >();
376
+ ArrayList <Integer > secondHalf = new ArrayList <Integer >();
377
+
378
+ for (int i = 0 ; i < requestQueue .length ; ++i ) {
379
+ if (currentHead > requestQueue [i ])
380
+ firstHalf .add (requestQueue [i ]);
381
+ else
382
+ secondHalf .add (requestQueue [i ]);
383
+ }
384
+ Collections .sort (firstHalf );
385
+ Collections .sort (secondHalf );
386
+ System .out .print (firstHalf );
387
+ System .out .println (secondHalf );
388
+
389
+ System .out .print ("\n Traverse to the inner track or the outer track? \n [0] Inner Track\n [1] Outer Track \n Your Choice? " );
390
+ int outer = s .nextInt ();
391
+
392
+ System .out .println ();
393
+ System .out .println ("\t \t +--------------------------------------+" );
394
+ System .out .println ("\t \t |Output for LOOK Disk Scheduling Policy|" );
395
+ System .out .println ("\t \t +--------------------------------------+" );
396
+ System .out .println ("\n \t Head currently at: " + currentHead );
397
+
398
+ System .out .println ("\n Iteration \t Current Head \t Disk Movement \t Total Disk Movement" );
399
+ System .out .println ("------------------------------------------------------------------------" );
400
+
401
+ int j = 0 ;
402
+ // inner track first
403
+ if (outer == 0 ) {
404
+ for (int i = firstHalf .size () - 1 ; i >= 0 ; --i ) {
405
+
406
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
407
+ totalHeadMovement += currentDiskMovement ;
408
+ orderOfProcessing [j ] = firstHalf .get (i );
409
+ currentHead = firstHalf .get (i );
410
+
411
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
412
+ }
413
+
414
+ for (int i = 0 ; i < secondHalf .size (); i ++) {
415
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
416
+ totalHeadMovement += currentDiskMovement ;
417
+ orderOfProcessing [j ] = secondHalf .get (i );
418
+ currentHead = secondHalf .get (i );
419
+
420
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
421
+ }
422
+ }
423
+ else {
424
+ for (int i = 0 ; i < secondHalf .size (); i ++) {
425
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
426
+ totalHeadMovement += currentDiskMovement ;
427
+ orderOfProcessing [j ] = secondHalf .get (i );
428
+ currentHead = secondHalf .get (i );
429
+
430
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
431
+ }
432
+
433
+ for (int i = firstHalf .size () - 1 ; i >= 0 ; --i ) {
434
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
435
+ totalHeadMovement += currentDiskMovement ;
436
+ orderOfProcessing [j ] = firstHalf .get (i );
437
+ currentHead = firstHalf .get (i );
438
+
439
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
440
+ }
441
+ }
442
+ System .out .println ("------------------------------------------------------------------------" );
443
+
444
+ System .out .println ("\n \t Total Head Movement: " + totalHeadMovement );
445
+ System .out .print ("\n \t Order of Processing: " + (orderOfProcessing [0 ]));
446
+ for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
447
+ System .out .print ( " -> " + orderOfProcessing [i ]);
448
+ }
449
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
450
+ System .out .println ();
243
451
}
244
-
452
+
245
453
void CLOOK () {
454
+ // "requestQueue.length" since, no extra ends will be added to the queue;
455
+ int [] orderOfProcessing = new int [requestQueue .length ];
456
+ int totalHeadMovement = 0 ;
457
+ int currentHead = globalCurrentHead ;
458
+
459
+ ArrayList <Integer > firstHalf = new ArrayList <Integer >();
460
+ ArrayList <Integer > secondHalf = new ArrayList <Integer >();
461
+
462
+ for (int i = 0 ; i < requestQueue .length ; ++i ) {
463
+ if (currentHead > requestQueue [i ])
464
+ firstHalf .add (requestQueue [i ]);
465
+ else
466
+ secondHalf .add (requestQueue [i ]);
467
+ }
468
+ Collections .sort (firstHalf );
469
+ Collections .sort (secondHalf );
470
+ System .out .print (firstHalf );
471
+ System .out .println (secondHalf );
472
+
473
+ System .out .print ("\n Traverse to the inner track or the outer track? \n [0] Inner Track\n [1] Outer Track \n Your Choice? " );
474
+ int outer = s .nextInt ();
475
+
476
+ System .out .println ();
477
+ System .out .println ("\t \t +----------------------------------------+" );
478
+ System .out .println ("\t \t |Output for C-LOOK Disk Scheduling Policy|" );
479
+ System .out .println ("\t \t +----------------------------------------+" );
480
+ System .out .println ("\n \t Head currently at: " + currentHead );
481
+
482
+ System .out .println ("\n Iteration \t Current Head \t Disk Movement \t Total Disk Movement" );
483
+ System .out .println ("------------------------------------------------------------------------" );
484
+
485
+ int j = 0 ;
486
+ // inner track first
487
+ if (outer == 0 ) {
488
+ for (int i = firstHalf .size () - 1 ; i >= 0 ; --i ) {
489
+
490
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
491
+ totalHeadMovement += currentDiskMovement ;
492
+ orderOfProcessing [j ] = firstHalf .get (i );
493
+ currentHead = firstHalf .get (i );
494
+
495
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
496
+ }
246
497
498
+
499
+ for (int i = secondHalf .size () - 1 ; i >= 0 ; i --) {
500
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
501
+ totalHeadMovement += currentDiskMovement ;
502
+ orderOfProcessing [j ] = secondHalf .get (i );
503
+ currentHead = secondHalf .get (i );
504
+
505
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
506
+ }
507
+ }
508
+ else {
509
+ for (int i = 0 ; i < secondHalf .size (); i ++) {
510
+ int currentDiskMovement = Math .abs (currentHead - secondHalf .get (i ));
511
+ totalHeadMovement += currentDiskMovement ;
512
+ orderOfProcessing [j ] = secondHalf .get (i );
513
+ currentHead = secondHalf .get (i );
514
+
515
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
516
+ }
517
+
518
+ for (int i = 0 ; i < firstHalf .size (); ++i ) {
519
+ int currentDiskMovement = Math .abs (currentHead - firstHalf .get (i ));
520
+ totalHeadMovement += currentDiskMovement ;
521
+ orderOfProcessing [j ] = firstHalf .get (i );
522
+ currentHead = firstHalf .get (i );
523
+
524
+ System .out .println ( "\t " + (++j ) +"\t \t " + currentHead + "\t \t " + currentDiskMovement + "\t \t " + totalHeadMovement );
525
+ }
526
+ }
527
+ System .out .println ("------------------------------------------------------------------------" );
528
+
529
+ System .out .println ("\n \t Total Head Movement: " + totalHeadMovement );
530
+ System .out .print ("\n \t Order of Processing: " + (orderOfProcessing [0 ]));
531
+ for (int i = 1 ; i < orderOfProcessing .length ; ++i ) {
532
+ System .out .print ( " -> " + orderOfProcessing [i ]);
533
+ }
534
+ printAverageSeekTime (totalHeadMovement , requestQueue .length );
535
+ System .out .println ();
247
536
}
248
-
537
+
249
538
}
250
539
251
540
class DiskSchedulingPolicy {
0 commit comments