라운드로빈 문제점 좀 봐주세요~
다이
질문 제목 : 라운드로빈(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;
}
}
-
슬아s
태그는 꼭 필요한 부분 몇 개만 있으면 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |