Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

FCFS 스케줄링을 위한 C 프로그램

<시간/>

n개의 프로세스, 즉 P1, P2, P3,.......,Pn 및 해당 버스트 시간이 제공됩니다. 과제는 FCFS CPU Scheduling 알고리즘을 사용하여 평균 대기 시간과 평균 처리 시간을 찾는 것입니다.

대기 시간 및 처리 시간이란 무엇입니까?

  • 처리 시간은 프로세스 제출과 완료 사이의 시간 간격입니다.

    처리 시간 =프로세스 완료 – 프로세스 제출

  • 대기 시간은 처리 시간과 버스트 시간의 차이입니다.

    대기 시간 =처리 시간 – 버스트 시간

FCFS 일정이란 무엇입니까?

FIFO(First In, First Out)라고도 하는 FCFS(First Come, First Served)는 CPU가 준비 대기열에 있는 순서대로 프로세스에 할당되는 CPU 스케줄링 알고리즘입니다.

FCFS는 비선점 스케줄링을 따릅니다. 즉, CPU가 프로세스에 할당되면 프로세스가 종료되지 않거나 일부 I/O 인터럽트로 인해 중단될 수 있을 때까지 CPU를 떠나지 않습니다.

예시

예를 들어 아래 표와 같이 해당 실행 시간과 함께 P2, P3, P1의 순서로 4개의 프로세스가 도착한다고 가정해 보겠습니다. 또한 도착 시간을 0으로 설정합니다.

프로세스 도착 순서 실행 시간(밀리초)
P1 3 15
P2 1 3
P3 2 3

시스템에서 프로세스 P1, P2 및 P3의 대기 시간을 보여주는 간트 차트

FCFS 스케줄링을 위한 C 프로그램

위와 같이

프로세스 P2의 대기 시간은 0입니다.

프로세스 P3의 대기 시간은 3입니다.

프로세스 P1의 대기 시간은 6입니다.

평균 시간 =(0 + 3 + 6) / 3 =3msec.

도착 시간을 0으로 설정했으므로 소요 시간과 완료 시간은 동일합니다.

예시

Input-:프로세스 =P1, P2, P3 버스트 시간 =5, 8, 12Output-:프로세스 버스트 대기 턴어라운드1 5 0 52 8 5 133 12 13 25평균 대기 시간 =6.000000평균 턴어라운드 시간 33 14.> 

알고리즘

단계 1 시작-> int waittime(int proc[], int n, int burst_time[], int wait_time[]) 설정 wait_time[0] =0 루프 For i =1 및 i  In function int turnaroundtime( int proc[], int n, int burst_time[], int wait_time[], int tat[] ) 루프 For i =0 및 i  In function int avgtime( int proc[], int n, int burst_time[]) wait_time[n], tat[n], total_wt =0, total_tat =0을 선언하고 초기화합니다. waittime(proc, n, burst_time, wait_time) 호출 turnaroundtime(proc, n, burst_time, wait_time, tat) 호출 i=0 및 i Int main() Declare the input int proc[ ] ={ 1, 2, 3} 선언 및 초기화 n =sizeof proc / sizeof proc[0] 선언 및 초기화 burst_time[] ={10, 5, 8} avgtime(proc, n, burst_time)Stop 호출

예시

#include // 모든 프로세스의 대기 시간을 구하는 함수int waittime(int proc[], int n,int burst_time[], int wait_time[]) { // 첫 번째 프로세스의 대기 시간은 0 대기 시간[0] =0; // 대기 시간 계산 (int i =1; i  

출력

프로세스 버스트 대기 턴어라운드1 5 0 52 8 5 133 12 13 25평균 대기 시간 =6.000000평균 턴어라운드 시간 =14.333333