Subversion Repositories programming

Rev

Rev 415 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
412 ira 1
/*******************************************************************************
2
 * SJFScheduler.java
3
 *
4
 * This file holds the implementation of the SJFScheduler class, which is a
5
 * Shortest Job First Scheduler, non-preemptive.
6
 *
7
 * Copyright (c) 2006, Ira W. Snyder (devel@irasnyder.com)
8
 *
9
 * Permission is hereby granted, free of charge, to any person obtaining a copy
10
 * of this software and associated documentation files (the "Software"), to deal
11
 * in the Software without restriction, including without limitation the rights
12
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
 * copies of the Software, and to permit persons to whom the Software is
14
 * furnished to do so, subject to the following conditions:
15
 *
16
 * The above copyright notice and this permission notice shall be included in
17
 * all copies or substantial portions of the Software.
18
 *
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
25
 * IN THE SOFTWARE.
26
 ******************************************************************************/
27
 
415 ira 28
/**
29
 * A Shortest Job First Scheduler
30
 *
31
 * @class CS431 Fall 2006
32
 * @author Ira W. Snyder (devel@irasnyder.com)
33
 */
34
public class SJFScheduler extends Scheduler
412 ira 35
{
413 ira 36
    /**
415 ira 37
     * Find the Process with the shortest timeslice in the run queue.
38
     *
39
     * @return the Process with the shortest timeslice
40
     */
413 ira 41
    private Process findShortest ()
412 ira 42
    {
413 ira 43
        Process shortest = new Process ("fake", Integer.MAX_VALUE);
44
 
45
        for (Process p : run_queue)
46
            if (p.timeslice < shortest.timeslice)
47
                shortest = p;
48
 
49
        return shortest;
412 ira 50
    }
413 ira 51
 
415 ira 52
    /**
53
     * Emulate a single time unit in a Shortest Job First scheduler.
54
     *
55
     * @return false if the scheduler is finished, true otherwise
56
     */
413 ira 57
    protected boolean step ()
58
    {
59
        /* Leave if we are truly done */
417 ira 60
        if (schedulerFinished ())
413 ira 61
            return false;
62
 
417 ira 63
        /* Pull in any new processes */
64
        queueWaitingProcesses ();
413 ira 65
 
66
        /* If there is no process, then get one! */
67
        if (cur_proc == null)
68
            startProcess (findShortest ());
69
 
70
        /* If the current process is set to run, do so, return false */
71
        if (cur_proc.time_left > 0)
72
            scheduleCurrent ();
73
        else
74
            completeCurrent ();
75
 
76
        return true;
77
    }
412 ira 78
}
79
 
80
/* vim: set ts=4 sts=4 sw=4 expandtab: */
81