Subversion Repositories programming

Rev

Rev 413 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
412 ira 1
/*******************************************************************************
2
 * FCFSScheduler.java
3
 *
4
 * This file holds the implementation of the First Come First Serve Scheduler
5
 * class.
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
 
28
import java.util.*;
29
import java.lang.ClassCastException;
30
 
31
class FCFSScheduler implements Scheduler
32
{
33
    private class FCFSProcess implements Comparable
34
    {
35
        public final Process proc;
36
        public final int add_time;
37
 
38
        public FCFSProcess (Process proc, int add_time)
39
        {
40
            this.proc = proc;
41
            this.add_time = add_time;
42
        }
43
 
44
        // negative if this < rhs
45
        // positive if this > rhs
46
        public int compareTo (Object o)
47
        {
48
            if (! (o instanceof FCFSProcess))
49
                throw new ClassCastException();
50
 
51
            FCFSProcess rhs = (FCFSProcess)o;
52
 
53
            return this.add_time - rhs.add_time;
54
        }
55
    }
56
 
57
    private Vector<FCFSProcess> processes;
58
 
59
    public FCFSScheduler ()
60
    {
61
        processes = new Vector<FCFSProcess> ();
62
    }
63
 
64
    public void addProcess (Process proc, int add_time)
65
    {
66
        processes.add (new FCFSProcess (proc, add_time));
67
    }
68
 
69
 
70
    public void run ()
71
    {
72
        int starttime = 0;
73
        int endtime = 0;
74
 
75
        /* Sort the process list by time added */
76
        Collections.sort (processes);
77
 
78
        for (FCFSProcess p : processes)
79
        {
80
            endtime = starttime + p.proc.timeslice;
81
            System.out.printf ("%s start=%d end=%d\n", p.proc.name, starttime, endtime-1);
82
            starttime = endtime;
83
        }
84
    }
85
}
86
 
87
/* vim: set ts=4 sts=4 sw=4 expandtab: */
88