간단히 말해서, SRTF는
우선순위로 들어온것을 처리하는 것을 말한다.
<<소스코드>>
////process.java
public class process {
public static void main(String[] args) {
new Scheduling();
}
}
//STRF.java
public class STRF {
private int number;
private int arrive_time;
private int wait_time;
private int burst_time;
public STRF(int number,int arrive,int brust){
this.number=number;
this.arrive_time=arrive;
this.burst_time=brust;
this.wait_time=0;
}
public void addwaittime(){
wait_time++;
}
public void deletetime(){
burst_time--;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getArrivalTime() {
return arrive_time;
}
public void setArrivalTime(int arrive) {
this.arrive_time = arrive;
}
public int getBurstTime() {
return burst_time;
}
public void setBurstTime(int burstTime) {
this.burst_time = burstTime;
}
public int getWaitingTime() {
return wait_time;
}
public void setWaitingTime(int waitingTime) {
this.wait_time = waitingTime;
}
}
/////Scheduling.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class Scheduling {
private ArrayList<STRF> processList = new ArrayList<STRF>();
private ArrayList<STRF> waitingList = new ArrayList<STRF>();
Scheduling() {
System.out.println("���� ����");
int nextArrival = 0;
int processIndex = 0;
int waitingTime = 0;
STRF currentProcess = null;
try {
setFile("test\\2.inp.txt");
} catch (IOException e) {
System.out.println("IOException!!");
}
sortProcess();
nextArrival = processList.get(0).getArrivalTime();
int time=0;
for(time =0;;time++){
while(time == nextArrival){
if(currentProcess == null){
currentProcess = processList.get(processIndex);
}else {
waitingList.add(processList.get(processIndex));
}
processIndex++;
if(processIndex == processList.size()){
nextArrival = 0;
} else {
nextArrival = processList.get(processIndex).getArrivalTime();
}
}
if(currentProcess != null) {
if(waitingList.size() != 0) {
sortWaitingList();
if(currentProcess.getBurstTime() > waitingList.get(0).getBurstTime()){
waitingList.add(currentProcess);
currentProcess = waitingList.get(0);
waitingList.remove(0);
}
}
if(currentProcess.getBurstTime() == 0) {
if(waitingList.size() != 0) {
currentProcess = waitingList.get(0);
waitingList.remove(0);
} else if(nextArrival == 0) {
break;
} else {
continue;
}
}
currentProcess.deletetime();
waitingTime += waitingList.size();
}
System.out.println("Ÿ�� �÷���");
}
try {
printProcess(waitingTime);
} catch (IOException e) {
System.out.println("IOException!!");
}
}
void setFile(String filename) throws NumberFormatException, IOException{
int count;
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
count = Integer.parseInt(br.readLine());
System.out.println("count = "+count);
for(int i=0;i<count;i++){
System.out.println("asdf");
String[] item = br.readLine().split(" ");
STRF process = new STRF(Integer.parseInt(item[0]), Integer.parseInt(item[1]), Integer.parseInt(item[2]));
processList.add(process);
}
br.close();
fr.close();
}
void printProcess(int waitingTime) throws IOException {
System.out.println("���� ���");
FileWriter fw = new FileWriter("test\\2.out.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.println(waitingTime);
System.out.println(waitingTime);
pw.close();
bw.close();
fw.close();
}
void sortProcess() {
System.out.println("����� ����");
for(int i=0;i<processList.size()-1;i++){
for(int j=0;j<processList.size()-1-i;j++){
if(processList.get(j).getArrivalTime() > processList.get(j+1).getArrivalTime() ||
(processList.get(j).getArrivalTime() == processList.get(j+1).getArrivalTime() && processList.get(j).getNumber() > processList.get(j+1).getNumber())){
STRF temp = processList.get(j);
processList.remove(j);
processList.add(j+1, temp);
}
}
}
}
void sortWaitingList() {
for(int i=0;i<waitingList.size()-1;i++){
for(int j=0;j<waitingList.size()-1-i;j++){
if(waitingList.get(j).getBurstTime() > waitingList.get(j+1).getBurstTime() ||
(waitingList.get(j).getBurstTime() == waitingList.get(j+1).getBurstTime() && waitingList.get(j).getBurstTime() > processList.get(j+1).getBurstTime())){
STRF temp = waitingList.get(j);
waitingList.remove(j);
waitingList.add(j+1, temp);
}
}
}
}
}
///////////////////////////////////////////////
이것도 소스가 좀 더럽습니다. 이해 해주시기 바랍니다.^^
'IT 공부 > 자료구조' 카테고리의 다른 글
SSTF Scheduling (0) | 2012.02.28 |
---|---|
FCFS (2) | 2012.02.25 |
SRTF 스케줄링 (0) | 2012.02.25 |
[자료구조] Linked List(링크드리스트) (0) | 2012.02.22 |