Upload
dldmsmchddldmschd
View
101
Download
0
Embed Size (px)
Citation preview
고급 시스템 프로그래밍 프로젝트 #1
고급 시스템 프로그램Merge_#2
국민대학교 전자공학부 이은총
고급 시스템 프로그래밍 프로젝트 #1▶ 수정 사항 및 새롭게 시도한 것
1. 버퍼 사이즈 조정 -> setvbuf(file1, NULL, _IOFBF, BUFFER_SIZE); setvbuf(file2, NULL, _IOFBF, BUFFER_SIZE); setvbuf(fout, NULL, _IOFBF, BUFFER_SIZE); 를 통해
stream buffer size 를 제어 해 보았다 .
#define BUFFER_SIZE 1024 코드를 이용하여 1024, 256, 128 로 걸린 시간을 측정해 보았다 .
고급 시스템 프로그래밍 프로젝트 #1
BUFFER_SIZE 를 256 으로 지정했을 때 걸린 시간
BUFFER_SIZE 를 128 로 지정했을 때 걸린 시간1024 로 지정했을 때도 큰 차이가 없는 결과를 얻었기 때문에 BUFFER_SIZE 는 1024 로 지정하였다 .
고급 시스템 프로그래밍 프로젝트 #1▶ 수정 사항 및 새롭게 시도한 것
2. fgetc, fputs 대신 fread 와 fwrite 사용-> fread 를 사용하기 위해 fseek 함수와 ftell 함수를 이용하여 파일의 크기를 측정 .
고급 시스템 프로그래밍 프로젝트 #1▶ 수정 사항 및 새롭게 시도한 것-> fread 로 파일을 읽어 올 버퍼의 메모리 할당을 배열을 이용하여 임의로 주려고 했으나 (malloc 함수보다 안정하고 더 빠른 속도를 얻을 수 있을 것 같았기 때문 ) 생각보다 파일의 메모리가 컸기 때문에 malloc 함수를 사용하여 메모리를 동적 할당 하였다 .
대신 if (buff1 == NULL){ fputs ("error, buff1_malloc\n", stderr); free(buff1); return 1; } 코드를 삽입하여 malloc 함수가 실패했을 경우에 대비하였다 .
고급 시스템 프로그래밍 프로젝트 #1▶ 수정 사항 및 새롭게 시도한 것-> strtok_r 을 이용하여 fread 로 읽어온 파일을 파싱하였다 .
#define DELIM "\n“ 으로 단위를 설정 .
파싱 후에는 개행을 위해 fpuc(0x0a,fout) 를 삽입하였다 .
고급 시스템 프로그래밍 프로젝트 #1▶ 수정 사항 및 새롭게 시도한 것
3. 문자열 뒤집기 함수-> 함수의 내용은 동일하나 기존의 merge 에서는 readaline_and_out 에서 문자열이 반전되는 내용을 처리하였으나이번에는 따로 함수를 만들어 호출하였다 .
고급 시스템 프로그래밍 프로젝트 #1 ▶ 수정된 코드
<line 7~8>#define 을 사용하여 숫자로 대입했던 코드를 알아보기 쉽게 변환
고급 시스템 프로그래밍 프로젝트 #1<line 38~41>Setvbuf 를 이용하여 stream buffer size 제어
<line 45>Readaline_and_out 함수 호출을 약간 수정했다 .
고급 시스템 프로그래밍 프로젝트 #1<line 76~83>Fseek 함수를 이용하여 파일 포인터의 위치를 마지막으로 이동하고 ftell 함수를 이용하여 해당 위치에서의 파일의 바이트값을 반환함으로 , 파일의 크기를 알아내었다 .
마지막으로 Rewind 함수를 이용하여 파일 포인터의의 위치를 초기화 시켰다 .
<line 85~98>Malloc 을 이용하여 fread 로 읽어올 파일을 저장할 buff 의 메모리를 할당하였다 .
고급 시스템 프로그래밍 프로젝트 #1<line 101~111>Fread 를 이용하여 파일 2 개를 각각 읽어왔다 .
<line 112~114>Strtok_r 을 이용하여 파일을 파싱하였다 .
<line 116~130>Fwrite 를 이용하여 reverse_str 함수로 반전된 문자열을 \n단위로 fout 에 저장한다 .Fputc 를 이용하여 개행하였다 .또 line 수를 읽어오기 위해 line 을 배열로 선언하여 함수 내에서 카운트 하도록 하였다 .
<line 132~133>Free 를 이용하여 할당 된 메모리를 해제 하였다 .
고급 시스템 프로그래밍 프로젝트 #1
<line 138~148>문자열 반전 함수
고급 시스템 프로그래밍 프로젝트 #11. merge_final.c 로 수행했을 때 걸린 시간 [sec]
평균 = 32.986980 sec
시행횟수 1 2 3 4 5시간[sec]
33.721643
33.383838
30.300226
34.786477
32.742719
고급 시스템 프로그래밍 프로젝트 #12. 이전의 코드 (merge_array.c) 로 수행했을 때 걸린 시간 [sec]
평균 = 64.748136 sec
3. 제공된 merge.c 로 수행했을 때 걸린 시간
시간 = 97.435656 sec
4. 최종 성능 = (32.986980/ 97.435656) = 기본 merge.c 속도의 0.3386 배
시행횟수 1 2 3 4 5시간[sec]
66.726868
62.765361
64.619779
67.094016
62.534654
읽어 주셔서 감사합니다 .
고급 시스템 프로그래밍 프로젝트 #1