수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

라운드로빈 문제점 좀 봐주세요~

한봄찬

2023.04.01

질문 제목 : 라운드로빈(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;
}
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 로다

    태그는 꼭 필요한 부분 몇 개만 있으면 됩니다.

번호 제 목 글쓴이 날짜
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
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com