u nix p roject 2

12
11 조 061736 조조조 063581 조조조 083771 조조조

Upload: peta

Post on 19-Jan-2016

51 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: U nix  P roject 2

11 조061736 이지은063581 이희은083771 고연정

Page 2: U nix  P roject 2

* open, close, read, write kernel 모듈 작성* 각각의 모듈을 test device 내에서 user program 을

사용하여 실험* I/O 는 512B, 1KB, 4KB 의 블록 단위로 수행이 되도록

하여 16M 의 데이터를 write/read 하기 위한 시간을 측정

Character device 생성

Page 3: U nix  P roject 2

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 만큼 복사

Page 4: U nix  P roject 2

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 로 넣음 )

Page 5: U nix  P roject 2

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);

Page 6: U nix  P roject 2

Character device 생성

Memorybuffer

16MB Data(512B,1KB,4KB 입력 )

User

2.Read(copy_to_user)

1.Write(copy_from_user)

Kernel

Page 7: U nix  P roject 2

시간분석 (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

Page 8: U nix  P roject 2

프로젝트 실행

* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=(512/1024/4096)- User program 실행 (./app)

* dmesg >>

Page 9: U nix  P roject 2

* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)

* 512K 로 실행 >>

프로젝트 실행

Page 10: U nix  P roject 2

* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)

* 1KB 로 실행 >>

프로젝트 실행

Page 11: U nix  P roject 2

* 실행하기- mknod /dev/calldev c 240 1- insmod call_dev.ko value=512- User program 실행 (./app)

* 4KB 로 실행 >>

프로젝트 실행

Page 12: U nix  P roject 2

QNA