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

+ Recent posts