first-come first-served 선도착 선처리.
선입 선처리 스케줄링 (First-Come, First-Served / FCFS)
- 선입 선처리 정책의 구현은 선입선출(FIFO) 큐로 쉽게 관리할 수 있다. 프로세스가 준비 완료 큐에 진입하면, 이 프로세스의 프로세스 제어 블록(PCB)을 큐의 끝에 연결한다.
- 선입 선처리를 위한 코드는 작성하기 쉽고 이해하기 쉽다. 그러나 선입 선처리 정책 하에서 평균 대기 시간은 종종 대단히 길 수 있다.
- 그러므로 선입 선처리 정책 하에서 평균 대기 시간은 일반적으로 최소가 아니며, 프로세스 CPU 버스트 시간이 크게 변할 경우에는 평균 대기시간도 상당히 변할 수 있다.
- 선입 선처리 스케줄링 알고리즘은 비선점형이다. 이는 특히 시분할 시스템에서 문제가 되는데, 그 이유는 시분할 시스템에서는 각 사용자가 규칙적인 간격으로 CPU의 몫을 얻는 것이 매우 중요하기 때문이다.
소스 코드
public class process {
public static void main(String args[]){
new Scheduling();
}
}
///////////////////////////////////////////////////////////
public class FCFS {
private int number;
private int arrive_time;
private int burst_time;
private int wait_time;
public FCFS(){
}
public FCFS(int number,int arrive,int burst){
this.number=number;
this.arrive_time=arrive;
this.burst_time=burst;
this.wait_time=0;
}
public int getNumber(){
return number;
}
public int getArrive(){
return arrive_time;
}
public int getBurst(){
return burst_time;
}
public int getWait(){
return wait_time;
}
public void setArrive(int arrive){
this.arrive_time=arrive;
}
public void setBurst(int burst){
this.burst_time=burst;
}
public void setWait(int wait){
this.wait_time=wait;
}
}
///////////////////////////////////////////////////////////
import java.io.BufferedReader;
import java.io.BufferedWriter;
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<FCFS> processList = new ArrayList<FCFS>();
int count;
int processcount=0;
int headcount;
Scheduling() {
System.out.println("생성자 시작");
int nextArrival = 0;
int processIndex = 0;
int waittime = 0;
int temp;
FCFS currentProcess = null;
try {
setFile("test\\1.inp.txt");
}catch(NumberFormatException e){
}catch (IOException e) {
System.out.println("IOException!!");
}
waittime=processList.get(0).getBurst();//첫도착시간
for(int i=1;i<processcount;i++){
System.out.println(" "+i);
// if(processList.get(i).getArrive()==-1)//종료
// break;
if(processList.get(i).getArrive()>waittime){
temp=processList.get(i).getArrive()-waittime;
if(temp<0)
temp*=-1;
waittime+=temp;
System.out.println("if temp111 "+temp);
temp=processList.get(i).getBurst()-processList.get(i-1).getBurst();
if(temp<0)
temp*=-1;
waittime+=temp;
System.out.println("if temp222 "+temp);
}else{
temp=processList.get(i).getBurst()-processList.get(i-1).getBurst();
if(temp<0)
temp*=-1;
waittime+=temp;
System.out.println("else temp"+temp);
}
waittime+=count;
headcount=i;
System.out.println("head : "+processList.get(headcount).getBurst());
System.out.println("waittime : "+waittime);
}
try {
printProcess(waittime, processList.get(headcount).getBurst());
System.out.println(waittime);
} catch (IOException e) {
System.out.println("IOException!!");
}
}
private void printProcess(int waitingTime ,int head) 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();
}
private void setFile(String filename) throws NumberFormatException,IOException {
String str;
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
count = Integer.parseInt(br.readLine());//요청시간(3)
System.out.println("요청시간 = " + count);
for (int i = 0;; i++) {
String[] item = br.readLine().split(" ");
if(Integer.parseInt(item[1])==-1 && Integer.parseInt(item[2])==-1){//종료 조건
System.out.println("끝내라");
break;
}
processcount++;
System.out.println("Number//Arrive//Burst");
System.out.println(""+i+" "+Integer.parseInt(item[1])+" "+Integer.parseInt(item[2]));
FCFS process = new FCFS(i,Integer.parseInt(item[1]),Integer.parseInt(item[2]));//입력
processList.add(process);
}
br.close();
fr.close();
}
}
'IT 공부 > 자료구조' 카테고리의 다른 글
SRTF (2) | 2012.02.28 |
---|---|
SSTF Scheduling (0) | 2012.02.28 |
SRTF 스케줄링 (0) | 2012.02.25 |
[자료구조] Linked List(링크드리스트) (0) | 2012.02.22 |