(ioctl, mmap, fsync&flush)

Slides:



Advertisements
Similar presentations
문화연구방법 꽃보다 아름다운 그곳에 사는 사람들. 노송동 1 조 김은진 박하늬 나인정. 목차 조사구역 - 중앙시장. 경험지도 노송동 - 중앙시장 사람들의 삶. 진행상황 앞으로의 계획.
Advertisements

제10장 디바이스 드라이버.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
6 레이스 컨디션.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
13장 소켓.
Linux System Programming
Department of Computer Engineering
Signal & Inter-Process Communication
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
디바이스 드라이버.
이식성과 데이터형 서로 다른 프로세서 상에서의 이식성을 위해 가급적 리눅스 커널이 제공하는 데이터형을 사용하는 것이 좋다.
PCI가 어렵울 거라는 생각을 지금부터 버리도록 합시다.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
Department of Computer Engineering
Network Lab. Seoung Hyeon, Lee
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
Unix Project2 <test character device 생성>
Unix Project-Final <test character device 생성>
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
14장 소켓.
제 12장 I/O멀티플렉싱(Multiplexing)
FND (Flexible Numeric Display)
Department of Computer Engineering
25장. 메모리 관리와 동적 할당.
Department of Computer Engineering
AVR - Chapter 15 황 지 연.
Step Motor Device Driver
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
12장 파이프.
fork로 생성한 자식 프로세스에서 exec 함수군을 호출
멀티쓰레드 기반의 서버구현 School of Electronics and Information.
레이스 컨디션 컴퓨터공학과 4학년 이교욱.
Department of Computer Engineering
9장 파일 입출력.
링크 파일 생성[1] 링크 하드링크 생성 : link(2) 이미 있는 파일이나 디렉토리에 접근할 수 있는 새로운 이름
Linux/UNIX Programming APUE (Files & Directories)
Term Project Team Member
시스템 호출 read , write의 효율성 lseek test example – test1.c 실습 – 연습문제 2.8
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
8 메모리 매핑.
Advanced Socket Programming
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
4장 파일.
임베디드 실습 # LED, 7’Segment 제어
6장 파일 및 레코드 잠금.
Department of Computer Engineering
FILE I/O 번째주 Dept. of Computer Science & Engineering
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
문자 디바이스 드라이버 임베디드 시스템.
Signal & Inter-Process Communication
Linux Programming Spring 2008
Memory & Data Management.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
19. 함수 포인터와 void 포인터.
리눅스 디바이스 드라이버 (Linux Device Driver)
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Stepper Motor 디바이스 드라이버
조 병 규 Software Quality Lab. 한국교통대학교
13. 블로킹 I/O 김진홍
Department of Computer Engineering
18장. 다차원 배열 그리고 포인터.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
IO FND 소스분석 & 실행결과.
argc, argv 의 사용방법 #include <stdio.h>
Signal & Inter-Process Communication
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
3장 파일 다루기 한빛미디어(주).
Presentation transcript:

(ioctl, mmap, fsync&flush) 내용 보충 (ioctl, mmap, fsync&flush) 김 진 홍 jhkim3624@etri.re.kr 2015.10.11

ioctl mmap 목차 fsync와 flush

ioctl(chapter 10) 디바이스 제어 : ioctl() read(), write() 함수만으로 제어가 불가능 할때 mmap 디바이스 제어 : ioctl() read(), write() 함수만으로 제어가 불가능 할때 이용하는 방법은 디바이스 파일에 따라 모두 다름 man ioctl_list 이용 e.g. ioctl 명령을 이용해서 프린트 포트의 핀의 상태를 요청하는 코드 #include  <sys/type.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>    #include <linux/lp.h>  <----- 프린트 포트 관련 명령이 담겨있는 헤더파일    int main( int argc, char ** argv) {  int fd;  int prnstate;  int lp;  unsigned char buff[128];  fd = open("/dev/lp0", O_RDWR | O_NDELAY); <----- 프린트 포트 디바이스 열기 fsync와 flush  if( fd< 0)  {  perror("open error"); <----- 열기 실패시 에러 메세지 출력   exit(1);  }  while(1)  {   ioctl(fd, LPGETSTATUS ,&prnstate);  <----- 프린트 포트의 상태를 요청   (프린트 포트에 대한 명령은 LPGETSTATUS, 프린트 포트의 상태는 prnstate변수에 저장됨)     if(prnstate & LP_PSELECD) printf("ON\n");  else         printf("OFF\n");   usleep(50000);  }  close(fd);  return 0; }

mmap(chapter 18) 프로세스 메모리 매핑 ioctl mmap 프로세스 메모리 매핑 read(), write(), ioctl()등은 메모리와 커널 공간 사이의 메모리 전달과정이 수반되기에 비효율적 특히, 많은 용량의 데이터가 전달되어야 하는 장치에 사용되면 성능이 저하됨 <read(), write() 함수의 데이터 전달 과정> read(fd, buff, size) write(fd, buff, size) 시 스 템 콜 인터 럽트 메모리 복사 함수 put_user, copy_to_user I/O 제어 함수 readb, readw, readl … get_user, copy_from_user writeb, writew, writel … 하 드 웨 어 파 일 오 퍼 레 이 션 커널 응용 fsync와 flush

mmap 프로세스 메모리 매핑 mmap을 통해 메모리 복사 없이 하드웨어의 I/O 주소공간을 직접 사용 ioctl mmap 프로세스 메모리 매핑 mmap을 통해 메모리 복사 없이 하드웨어의 I/O 주소공간을 직접 사용 응용 프로그램이 디바이스 파일을 대상으로 mmap() 호출 커널이 매핑에 대한 사전 작업 수행 커널이 디바이스 파일의 file_operation 구조체에 선언된 mmap() 함수를 호출 드라이버에 정의된 mmap()함수는 매핑을 수행 fsync와 flush

mmap 프로세스 메모리 매핑 물리 주소를 가상 주소로 매핑하는 방법 ioctl mmap mmap() 함수 사용 ioremap() 함수를 사용 fsync와 flush mmap ioremap 물리 주소를 지정하는 프로세스 가상주소 물리 주소 영역 물리 주소를 지정하는 커널 가상 주소 응용 프로그램 하드웨어 디바이스 드라이버

ioremap 물리 주소 공간과 커널 가상 주소 공간 매핑 원형 사용 ioctl mmap 물리 주소 공간과 커널 가상 주소 공간 매핑 원형 void *ioremap(unsigned long offset, unsigned long size); 매개변수 물리 주소의 시작주소와 크기 size는 MMU의 PAGE_SIZE의 n배수 사용 char *videoptr; videoptr = ioremap(0x000b0000, 0x1000); if(videoptr !=NULL){ *videoptr = ‘A’; } fsync와 flush

ioremap fsync와 flush 디바이스 파일에 저장된 데이터는 드라이버의 구현 방식에 따라 달라짐. ioctl mmap fsync와 flush 디바이스 파일에 저장된 데이터는 드라이버의 구현 방식에 따라 달라짐. 실제 하드웨어에 저장 드라이버 내부에 저장 fsync 용도 드라이버 내부 버퍼에 있는 데이터를 모두 디바이스에 씀 주의점 디바이스 파일에 따라 실행 시간이 길어지거나 함수 종료가 되지 않을 수도 있음 flush 응용 프로그램에서 디바이스를 닫기 전에 드라이버 내부에 쓸 버퍼의 내용을 하드웨어에 모두 적용하도록 함 fsync와 flush

Qna