u nix p roject 2
DESCRIPTION
U nix P roject 2 . 11 조 061736 이지은 063581 이희은 083771 고연정. C haracter d evice 생성. * open, close, read, write kernel 모듈 작성 * 각각의 모듈을 test device 내에서 user program 을 사용하여 실험 * I/O 는 512B, 1KB, 4KB 의 블록 단위로 수행이 되도록 하여 16M 의 데이터를 write/read 하기 위한 시간을 측정. - PowerPoint PPT PresentationTRANSCRIPT
11 조061736 이지은063581 이희은083771 고연정
* open, close, read, write kernel 모듈 작성* 각각의 모듈을 test device 내에서 user program 을
사용하여 실험* I/O 는 512B, 1KB, 4KB 의 블록 단위로 수행이 되도록
하여 16M 의 데이터를 write/read 하기 위한 시간을 측정
Character device 생성
Character device 생성 - dev.c
* open & close (release) try_module_get/module_put :
모듈사용횟수증가 /감소 ( 생략 )
buff = kmalloc(value, GFP_KERNEL);/ kfree(buff);메모리할당 /해제
* read for(i = 0; i < count; i++)
if((err = copy_to_user(buf, buff, value)) < 0) return err;
커널 메모리 buff 를 사용자 메모리 buf 로 value 만큼 복사
Character device 생성 - dev.c
* write for(i = 0; i < count; i++){
if((err = copy_from_user(buff, buf+ nOffset, value)) < 0)
return err;nOffset += value;
}
사용자 메모리 buf+nOffset 을 커널 메모리 buff 로 value 만큼 복사(nOffset 의 위치를 value 만큼 이동시켜 다음 값을 buff 로 넣음 )
Character device 생성 - app.c
* #define SIZE = 16777216* fd = open("data", O_RDWR);* buff = (char*)malloc(SIZE);* dev=open(DEVICE_FILENAME,O_RDWR);
* ret = write(dev,buff,SIZE);* ret = read(dev,buff,SIZE);
* ret=close(dev);* close(fd);
Character device 생성
Memorybuffer
16MB Data(512B,1KB,4KB 입력 )
User
2.Read(copy_to_user)
1.Write(copy_from_user)
Kernel
시간분석 (512B,1KB,4KB)
* gettimeofday() 함수 이용 : 시간측정- 현재 system 시간을 가져오는 api ( 마이크로 초 단위까지 체크가능 )
>> 큰 차이가 없음
Write time Read time
512B 0.6 0.3
1KB 0.5 0.3
4KB 0.6 0.3
프로젝트 실행
* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=(512/1024/4096)- User program 실행 (./app)
* dmesg >>
* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)
* 512K 로 실행 >>
프로젝트 실행
* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)
* 1KB 로 실행 >>
프로젝트 실행
* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)
* 4KB 로 실행 >>
프로젝트 실행
QNA