라운드로빈 문제점 좀 봐주세요~
한봄찬
질문 제목 : 라운드로빈(round robin) 코드작성라운드로빈 스케줄링 소스코드인데, 잘못된 점 좀 수정해주세요~질문 내용 : 라운드로빈 스케줄링 소스를 작성하는데, gantt차트가 안그려지네요ㅠㅠ
근데 뭐가 문제여서인지 잘 모르겠어요... 좀 도와주세요..제발ㅠㅠ
// n개의 프로세스를 입력받아 라운드로빈 스케쥴링에 대한 gantt차트를 그리는 프로그램.
#include stdio.h
//프로세스 구조체 선언.
struct process
{
int name; //이름
int burst_time; //실행시간
int turn_time; //반환시간
int wait_time; //대기시간
int resp_time; //시작시간
}
proc[100], sort[100], temp[1];
//각 프로세스 세부적인 값을 입력받아 저장할 배열.
//proc에는 기본 정보를 입력받을때 쓰고, sort는 입력받은 값을 이용해 결과를 구하는대 사용.
// 함수 원형(함수에 대한 정의는 메인 함수 밑에 한다).
int rr_func(int start_time, int finish_time);// 라운드로빈(round robin) 값 구하는 함수.
int draw(int start_time, int finish_time);// gantt차트 그리기 함수.
void swap(int i, int j); //순서 변경용 함수.
void init(); //초기화용 함수.
void long(); //가장 긴 반환시간 구하는 함수.
int n, ts, lr = 0;
int chart, i, j, turn_sum = 0, wait_sum = 0, burst_sum = 0; //변수선언.;
double turn_avg = 0, wait_avg = 0, burst_avg = 0; //변수선언.
void main()
{
int start_time = 0, finish_time = 0, i, rr_result;
//여기서 사용할 변수들 선언.
printf(총 몇개의 프로세스 입니까? (5개이하) );
scanf(%d, &n);
printf(할당 시간의 크기는 몇입니까? );
scanf(%d, &ts);
for(i = 0; i n; i++) //입력받은 값을 각 구조체에 저장.
{
//값을 입력받아 이름, 실행 시간, 도착 시간을 각 구조체에 저장.
printf(%d번째 프로세스의 실행시간을 입력하세요. : , i+1);
// (i+1)번째 프로세스의 실행시간을 입력받음.
scanf(%d, &proc[i].burst_time);
// 입력받은 실행 시간 배열에 저장.
proc[i].name = i+1;
//프로세스의 이름 저장.
finish_time += proc[i].burst_time;
//현재까지 프로세스의 총 실행시간 저장.
//각 프로세스의 turnaround time, waiting time, response time을 초기화.
proc[i].turn_time = 0;
proc[i].wait_time = 0;
proc[i].resp_time = 0;
sort[i] = proc[i]; //proc배열1에 있는것을 sort1에도 똑같이 저장.
}
//함수 호출.
rr_result = rr_func(start_time, finish_time);
init();
}
//rr_func함수에 대한 정의
int rr_func(int start_time, int finish_time)
{
printf(*****************in round robin process*****************);
//gantt chart를 그린다.
chart = draw(start_time, finish_time);
sort[i] = proc[i];
for(i = 0; i n; i++)
{
burst_sum += sort[i].burst_time;
}
//반환시간,대기시간 구하기
while(1)
{
for(i = 0; i n; i++)
{
long();
if(sort[i].burst_time == 0) continue;
else if(lr == burst_sum) break;
else if(sort[i].burst_time - ts 0)
{
sort[i].resp_time = lr + ts;
sort[i].burst_time -= ts ;
}
else if(sort[i].burst_time - ts 0 && sort[i].burst_time - ts == 0)
{
for(int k = 0; k i; k++)
{
if (i == 0)
{sort[i].resp_time = sort[i].burst_time + lr;}
else
{sort[i].resp_time = sort[i].burst_time + lr;}
}
sort[i].wait_time = sort[i].resp_time - sort[i].burst_time;
sort[i].burst_time = 0 ;
}
else break;
}
}
for(i = 0; i n; i++)
{
for(j = 0; j n; j++)
{
if(proc[i].name == sort[j].name)
{
proc[i].turn_time = sort[j].turn_time;
proc[i].wait_timeait_time = sort[j].wait_time;
proc[i].resp_time = sort[j].resp_time;
}
}
} for(i = 0; i n; i++)
{
turn_sum += sort[i].turn_time;
wait_sum += sort[i].wait_time;
burst_sum += sort[i].burst_time;
}
turn_avg = (double)turn_sum / n;
wait_avg = (double)wait_sum / n;
burst_avg = (double)burst_sum / n;
//표 출력.
printf(프로세스 );
for(i = 0; i n; i++){printf(p%d , i+1);}
printf( 평균\n);
printf(반환 시간 );
for(i = 0; i n; i++){printf(%3d , proc[i].turn_time);}
printf( %.2f\n, turn_avg);
printf(대기 시간 );
for(i = 0; i n; i++){printf(%3d ,proc[i].wait_time);}
printf( %.2f\n, wait_avg);
printf(실행 시간 );
for(i = 0; i n; i++){printf(%3d ,proc[i].burst_time);}
printf( %.2f\n, burst_avg);
printf(\n); return 1;
}
//제일 긴 반환시간 찾는 함수.
void long()
{
for(i = 0; i n; i++)
{
for(j = i +1; j n; j++)
{
if(sort[i].resp_time sort[j].resp_time)
{
lr = sort[i].resp_time;
}
}
}
}
//gantt chart를 출력하는 함수.
int draw(int start_time, int finish_time)
{
int t, i, j = 0;
printf(\n gantt chart \n\n);
//그래프(?) 출력
//gantt 차트의 프로세스 이름을 위치를 고려하여 적어주는 역할.
for(t = 0; t = burst_sum; t++)
{
if(j = n) j = 0;
else if(sort[j].burst_time - ts 0)
{
printf(|p%d, sort[j].name);
for(i = 0; i ts; i++)
{
printf( );
burst_sum--;
}
sort[j].burst_time -= ts;
j++;
}
else if(sort[j].burst_time - ts = 0)
{
printf(|p%d, sort[j].name);
if(sort[j].burst_time != 0)
{
printf( );
sort[j].burst_time--;
burst_sum--;
}
sort[j].burst_time = 0;
j++;
}
else continue;
}
printf(|\n); //gantt chart 밑의 시간을 위치를 고려하여 나타내는 역할.
start_time = 0;
j = 0;
for(t = 0; t = burst_sum; t++)
{
if(sort[j].burst_time - ts 0)
{
if(t == 0 && t == start_time)
{
printf(%d, t);
start_time += sort[j].burst_time;
j++;
}
else if(t 10 && t == start_time)
{
printf( %d, t);
start_time += sort[j].burst_time;
j++;
}
else if(t = 10 && t == start_time)
{
printf( %d, t);
start_time += sort[j].burst_time;
j++;
}
else
{
printf( );
}
}
else if(sort[j].burst_time - ts = 0)
{
if(t == 0 && t == start_time)
{
printf(%d, t);
start_time += ts;
j++;
}
else if(t 10 && t == start_time)
{
printf( %d, t);
start_time += ts;
j++;
}
else if(t = 10 && t == start_time)
{
printf( %d, t);
start_time += ts;
j++;
}
else
{
printf( );
}
}
} (특히 이 부분이 이상한 듯?)
printf(\n\n\n); //프로세스 이름 순서대로 정렬.
for(i = 0; i n; i++)
{
for(j = i +1; j n; j++)
{
if(sort[i].name sort[j].name)
{
swap(i, j);
}
}
}
return 1;
}
//gantt-------------------------------------------------------------------------------------
void swap(int i, int j)
{
int temp;
temp = i;
i = j;
j = temp;
}
void init()
{
int i;
for(i = 0; i n; i++)
{
proc[i].turn_time = 0;
proc[i].wait_time = 0;
proc[i].resp_time = 0;
}
}
-
로다
태그는 꼭 필요한 부분 몇 개만 있으면 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700852 | 링크드 리스트 구현시 malloc 관련 에러 입니다. | 삐용삐용 | 2025-07-08 |
2700828 | 7/4 와 7/4.0 의 차이 | 발랄한그1녀 | 2025-07-08 |
2700771 | 아스키값 질문입니다. (+추가 임베디드 다른것도!) (3) | 찰스 | 2025-07-08 |
2700746 | 코드 오류 질문드립니다 | 차분 | 2025-07-07 |
2700721 | 배열 프로그래밍 입니다. (1) | 크나 | 2025-07-07 |
2700695 | 간단한 메모장 구현을 할려고 하는데요 (9) | 늘솜 | 2025-07-07 |
2700668 | c언어 질문입니다. 도와주세요~ (3) | 가자 | 2025-07-07 |
2700639 | 한글입력받아서 ㄱㄴㄷ순서대로출력하는법좀 | 두빛나래 | 2025-07-06 |
2700610 | 정말 기초적인 더하기,여백 문제 help | 무슬 | 2025-07-06 |
2700562 | 함수포인터에서요 (7) | 소심한여자 | 2025-07-06 |
2700530 | 전처리문 질문입니다. (1) | 아놀드 | 2025-07-05 |
2700510 | c언어를 어케하면 잘할수 있을까요.. | 연연두 | 2025-07-05 |
2700484 | 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) | 날위해 | 2025-07-05 |
2700426 | 인터넷 창 띄우는 질문이요 (1) | 정훈 | 2025-07-04 |
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |