Unix Project-Final <test character device 생성> 041510김준한 041513 김태양 041466 김동철
발표순서 프로젝트 개요 및 개발 환경 역할 분배 프로젝트 상세 설명 – my_dev.c 프로젝트 상세 설명 – my_app.c 결과물과 실행이미지 문제점과 해결
개요 및 개발 환경 kernel 모듈 작성 open, read, write, close, ioctl, lseek 개요 및 개발 환경 kernel 모듈 작성 open, read, write, close, ioctl, lseek 각각의 모듈을 test device내에서 user program을 사용하여 실험 I/O는 512B, 1KB, 4KB의 블록 단위로 수행이 되도록 하여 1M의 데이터를 write/read 하기 위한 시간을 측정 개발 환경 : Vmware + Fedora 11 (Linux Kernel 2.6)
멤버들의 작업분배 공통 : 코드 작성 및 분석 041513 김태양 - Uesr program , 발표 및 발표자료 작성 041510 김준한 - Device program , 시간측정 041466 김동철 - Device program , 자료 수집
My_dev.c Open, write, read 부분의 구현. Copy_to_user() -커널 메모리 블록 데이터를 사용자 메모리 블록 데이터에 써넣는 기능. Copy_from_user() - 사용자 메모리 블럭데이터를 사용자 메모리 블록 데이터에 써넣는 기능
My_dev.c- open() Insmod 에서 블럭단위로 데이터를 이용하기 위해 Buffer size 변수를 선언.
My_dev.c- read() 입력받은 버퍼의 사이즈만큼 User 메모리에 옮겨쓰기위한 순환문. 512k의 경우 [0-512],[513-1024] 순으로 블록데이터가 이동. Read 명령수행이 완료된 시에 “read success” 메시지와 카운트수 출력.
My_dev.c- write() Read ()와 마찬가지로 입력 받은 버퍼의 사이즈만큼 User 메모리에 옮겨 쓰기 위한 순환문. Read 명령수행이 완료된 시에 “read success” 메시지와 카운트수 출력.
My_dev.c-
My_app.c- time측정 Timeb 함수를 써서 소수점이하 세째자리까지 시간을 측정.
My_app.c- main() Buff사이즈를 동적으로 할당 받아서 사용 구현 중 16MB 일때는 실행이 안되는 오류가 있었음. read(), write() 함수 전후로 시간을 측정하여 copy 되는 시간을 측정.
실행 image
실행 image Open, read, write의 성공 Read , Write 의 수행 시간 측정 성공 Count 의 증가와 success 메시지 출력완료.
프로젝트중 문제점과 해결 메모리를 동적으로 할당받때 일정 범위를 넘어가면 에러가 발생. 시간 측정 시 할당받은 메모리가 많지 않아서 정확한 측정 불가 -> timeb 를 사용하여 소수점이하 셋째 자리까지 출력함.