13. 블로킹 I/O 김진홍 jhkim3624@etri.re.kr 2015.12.02..

Slides:



Advertisements
Similar presentations
3 학년 -54 명 4 학년 -53 명 3.4 학년 총인원 -107 명 교사 -21 명 초 등 부 총인원 -128 명 2008 년 1 월 인원보고.
Advertisements

경 성 대 학 교. 경성대학교 학사관리팀 1 경성스마트체크 ( 전자출결 앱 ) 앱 설치하기 안드로이드폰 아이폰 스마트폰이 아닌 학생 출석인정 방법 경성대학교 교육연구처.
중등특수교육과 엄승현 이영재 이지수 속요에 대하여.
복지정책 9 조 with 신동면 prof. 기초노령연금 기초노령연금 기초노령연금의 이해 기초노령연금에 대한 쟁점 현 기초노령연금의 문제점.
한옥과 신한옥의 개념.
제10장 디바이스 드라이버.
우리나라 소개 조원: 박영준 김경훈 이동석 정재린 박아론.
내용: 북스타트 후속프로그램으로 영,유아에 맞는 그림책을 읽어주고 다양한 활동을 한다.
학교안전7대 표준안 편성 운영 광주수창초등학교 교사 김용현.
제 3 호 농촌 어메니티 관광개발 정보 -농어촌체험 ∙ 휴양마을 지정제도- 농 촌 진 흥 청 농촌자원과.
Black Consumer 김인수 권보람 전소희 진소정
7~9월 프로그램 광산구드림스타트 호 소식지 신체 / 건강 인지/언어 정서/행동
제4회 안전보건교육훈련 경진대회 ‘안전생활 정착’을 위한 사고예방 매뉴얼 새마을운동중앙연수원 박 래 현.
2015년 사역계획서 멀티미디어위원회 발 표 1. 멀티미디어위원회 조직도 위원장 / 조은진 장로
쯔쯔가무시 예방수칙을 실천하세요! 한국산업안전보건공단 광주지역본부.
교재:C언어로 쉽게 풀어 쓴 자료구조 (생능출판사, 천인국저)
28강 JAVA 입출력(I/O) 알아보기 - 입출력(I/O) 이란? - JAVA 입출력 API(Input~, Output~)
제 4 장 프로세스 Section 1 프로세스의 개념 Section 2 프로세스 스케줄링
2017년 스타트Up-청년취Up 매칭사업 개요 □ 사업목적 □ 지원내용 □ 청년인재 정의 □ 스타트업 정의
정보통신실습 및 특강(5)
커뮤니케이션 스킬 UP -전화매너- ..
쌓지 말고 해소하자 이 주휘 이 진영 전 민석 전 혜림.
주택형 : 59m²(24py), 75m²(30py), 84m²(34py) 견본주택 : 18年 05月 18日 OPEN
Linux System Programming
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
14. 입출력 다중화 김진홍
디바이스 드라이버 개요 가상 디바이스드라이버 실습
Ch 14. System Thread.
Unix Project-Final <test character device 생성>
1. 화면 및 메뉴소개 ▣ 온라인사업지원시스템 소개 ▶ 온라인사업지원시스템이란
SunnyKwak (sunnykwak.egloos.com) 2005년 2월 1일
레이스 컨디션 컴퓨터공학과 4학년 이교욱.
(ioctl, mmap, fsync&flush)
해양생태계 이상현상 대응관리 남이현.
1. 화면 및 메뉴소개 ▣ 온라인사업지원시스템 소개 ▶ 온라인사업지원시스템이란
2.1 재배정 재배정요구등록 재배정승인취소 재배정부서연결 재배정단위업무연결
성희롱성폭력 온라인 예방교육 이수 방법 포스텍 학생상담센터 성희롱성폭력 상담실.
2017년 1학기 국가근로장학금 장학생 교육 1.
리눅스 디바이스 드라이버 (Linux Device Driver)
2016. 다문화 탈북교육 정책 이해 경남교육청 학교혁신과 장학사 구현숙.
하이컴AS PC판매점 메뉴얼.
10 장 데이터 링크 제어(Data Link Control)
수직선 위의 점의 좌표와 순서쌍 점의 좌표 원점 수직선 위의 한 점에 대응하는 수 A 수직선 위의 좌표가 0인 점
1 [100인의 멘토] 학교로 찾아가는 진로교육 □ 목적 인천지역 자유학기제 대상 청소년에게 건설관련 전문분야에 대한 진로탐색을 통해 체계적인 진로교육을 실시 □ 개요 ○ 참가대상: 18개 학교(학교당 1학급 기준) *협의가능 ○ 활동장소 : 각 선정 학교.
병행 프로세서 과목 : 운영체제 학번 : 이름 : 조장호.
실전 직무능력향상!! 취업스펙 UP!! 2017년 취업역량 강화 프로그램 생산현장관리사 자격 취득 과정 제안.
법인객실 예약 메뉴얼 하이원리조트 중부사무소.
속요 국어국문학과 김보민 국어국문학과 조나현 제목 창의적으로 바꿔야 함.
제 2장 프로세스 관리와 CPU 스케줄링 2.1 프로세스의 개념 2.2 CPU 스케줄링의 목적과 유형
Homework #7 (1/4) 다음 프로그램을 작성하고, 프로그램과 실행 결과를 함께 제출한다.
운영체제 (Operating System) (하드웨어와 응용 프로그램 사이의 인터페이스 역할을 담당하는 시스템 소프트웨어)
Q&A로 정복하는 TPM 왜 “2004 POWER KTPM시리즈” 책에 없는 KNOW-HOW 공개 어려운가!
1st 과제 Puzzle 개선 강원대학교 김순태.
성립전예산 요구등록 (사업담당자) 사업관리카드 1 2
교수학습과정안 우리 돼지고기 ‘한돈’ 알아보기 영양교육 이시원.
강의 교안 학년-학기 과목명 의료사회사업론 주차명 7주차. 의료사회복지사의 역할 담당교수 신 상 수.
주간 콜센터 운영현황 보고 주간 인입콜 동향 주간 주요 Focus 고객민원 (콜+게시판) 요청사항 금주 진행 사항 차주 계획
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
신상품 안내 적재물배상책임보험 Workshop 기업보험부 화재특종팀.
화 일 구 조 Chapter 3 화일의 입출력 제어.
북한학 과목소개 최 장 옥 교 수 연평도 앞 월래도 시찰.
저출산 극복을 위한 우리공단의 추진과제 경인 제4권역 Mind up 100분 토론.
2019 광주희망교실 찾아가는 컨설팅.
세부담 증가의 사례연구 1 기본가정 변동사항 목적 금융소득의 구성은 다음과 같음 1. 금융소득 중 배당소득은 비상장 법인
2019. 학생인문독서연구회 READ TOGETHER 책모임 안내 모임 구성 및 신청서 작성 후 제출!!! * 제출일
Part6 개혁개방 박서 아.
인생의 멘토가 되어주는 2017 광주희망교실 예산 집행.
의료사고 문제 프로젝트설계실습Ⅰ 의료사고 문제와 해결 ppt 윤리적 삶의대한 성찰 사고 문제 의료
3장 – 병행 프로세스 A 김정문.
30강 기사 분석 및 과제물 평가(8).
Presentation transcript:

13. 블로킹 I/O 김진홍 jhkim3624@etri.re.kr 2015.12.02.

목차 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 매크로 목차

개요 개요 응용 프로그램은 시리얼 포트 디바이스에서 수신된 데이터를 이용하여 외부에서 전달된 명령이나 데이터를 처리 함 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 개요 응용 프로그램은 시리얼 포트 디바이스에서 수신된 데이터를 이용하여 외부에서 전달된 명령이나 데이터를 처리 함 이때 응용 프로그램이 하드웨어에 읽기/쓰기를 요청함 요청 시점과 실제 하드웨어가 처리하는 시점의 차이를 극복하기 위해 블로킹 I/O 기능을 지원함 블로킹 I/O 응용프로그램에서 요구한 처리를 수행하기 위해 하드웨어가 준비될 때 까지 프로세서를 잠들게 함 장점 여러 프로세스가 동작할 때 효율을 높임

1. 프로세스의 사용 효율성과 잠들기 구조

프로세스의 사용 효율성과 잠들기 구조 다중 프로세스와 시분할 처리 다중프로세스 환경 프로세스의 sleep과 시스템의 효율성 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 다중 프로세스와 시분할 처리 다중프로세스 환경 여러 응용 프로그램들이 서로 협조하거나 단독으로 수행됨 프로세스의 sleep과 시스템의 효율성 처음 프로세스를 설계할 때 가급적 프로세스가 잠들게 구현한다면 시스템 효율성을 높일 수 있음 프로세스의 잠든 상태 첫번째 자신에게 할당된 시간을 모두 써서 잠든 경우 두번째 특정 사건을 기다리기 위해 잠시 대기하는 경우 프로세스를 깨우기 위해 외부에서 발생하는 입력 상태는 event라고 함

2. 블록킹 I/O의 구현

블록킹 I/O의 구현 개요 블록킹 I/O는 하드웨어가 처리를 마치지 못했을 때 프로세스의 진행을 멈추고 기다리는 것을 의미 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 개요 블록킹 I/O는 하드웨어가 처리를 마치지 못했을 때 프로세스의 진행을 멈추고 기다리는 것을 의미 처리를 위해 대기 큐라는 개념을 이용 함

블록킹 I/O의 구현 블록킹 I/O 강제로 재우는 방법 1. 프로세스의 사용 효율성과 잠들기 구조 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 블록킹 I/O 강제로 재우는 방법 sleep() select(), poll() sched_yield() 외부 입력 상태의 변화를 기다리기 위해 잠드는 것

블록킹 I/O의 구현 블록킹 I/O 일반적으로 HW들은 인터럽트와 조합하여 입출력을 처리 함 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 블록킹 I/O 일반적으로 HW들은 인터럽트와 조합하여 입출력을 처리 함 입력과 출력 처리에 대한 동기를 맞춤 디바이스 드라이버에 입출력 조건이 발생할 때 까지 프로세서를 재우는 루틴이 필수적

블록킹 I/O의 구현 블록킹 모드와 프로세스 처리 과정 프로세스가 디바이스 드라이버에 의해 잠드는 과정 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 블록킹 모드와 프로세스 처리 과정 프로세스가 디바이스 드라이버에 의해 잠드는 과정 프로세스가 디바이스 파일을 O_NDELAY를 포함하지 않는 블로킹 모드로 open() 프로세스가 디바이스 파일에 접근, 예를들어 read() 프로세스에 의해 호출된 드라이버는 read() 함수가 처리할 데이터가 있는지 검사 만약 데이터가 있다면 데이터를 프로세스 공간에 전달하고 처리를 종료 함 만약 데이터가 없다면 하드웨어에서 데이터가 발생할 때 까지 프로세스를 재움 스케줄러에 의해 잠들어 있는 다른 프로세스에 처리 시간을 할당 함 입력 데이터의 처리가 인터럽트에 의해 발생 된다면 인터럽트 서비스 함수가 데이터를 처리 하고 프로세스를 깨움 프로세스에 할당된 시간이 끝났기에 다른 프로세스에 처리시간을 할당 하고 잠든 프로세스를 깨움 깨어난 프로세스는 read() 함수에서 탈출 하고 다음 처리 흐름을 진행

블록킹 I/O의 구현 프로세스 관련 함수와 변수 함수 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 프로세스 관련 함수와 변수 함수 변수 선언 및 초기화 wait_queue_head_t init_waitqueue_head DECLARE_WAIT_QUEUE_HEAD 프로세스 재움 interruptible_sleep_on() interruptible_sleep_on_timeout() 프로세스 깨움 wake_up_interruptible()

블록킹 I/O모드로 열기 블록킹 I/O 모드로 열기 응용 프로그램에서 디바이스 파일을 열때 블록킹I/O 모드는 선택사항임 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 블록킹 I/O 모드로 열기 응용 프로그램에서 디바이스 파일을 열때 블록킹I/O 모드는 선택사항임 int dev dev = open(“/dev/xxx”, O_RDWR); 프로세스를 잠들지 않게 하려면 O_NDELAY를 사용 int dev dev = open(“/dev/xxx”, O_RDWR|O_NDELAY); 디바이스 드라이버에 블록킹 I/O가 구현 되지 않았다면 잠들지 않음

대기 큐와 wait_queue_head_t 구조체 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 대기 큐 목적 잠들거나 깨우기 위한 조건을 관리 여러 프로세스의 접근을 관리 변수 wait_queue_head_t 구조체로 선언 대기 큐는 필요한 조건마다 선언하고 사용함 읽기 전용 대기 큐 쓰기 전용 대기 큐 만드는 방법 wait_queue_head_t 구조체로 변수를 선언하고, init_waitqueue_head()로 초기화 DECLARE_WAIT_QUEUE_HEAD 매크로 함수로 초기화 wait_queue_head_t 구조체와 init_waitqueue_head()를 호출하는 매크로

대기 큐와 wait_queue_head_t 구조체 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 만드는 방법 wait_queue_head_t 구조체로 변수를 선언하고, init_waitqueue_head()로 초기화 wait_queue_head_t Wait Queue; init_waitqueue_head(&WaitQueue); DECLARE_WAIT_QUEUE_HEAD 매크로 함수로 초기화 wait_queue_head_t 구조체와 init_waitqueue_head()를 호출하는 매크로 DECLARE_WAIT_QUEUE_HEAD(WaitQueue); 읽기 : DECLARE_WAIT_QUEUE_HEAD(ReadWaitQueue); 쓰기 : DECLARE_WAIT_QUEUE_HEAD(WriteWaitQueue);

프로세스 재우기(sleep)와 깨우기(wake up) 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 재우기와 깨우기 재우기 DECLARE_WAIT_QUEUE_HEAD(WaitQueue_Read); : interruptible_sleep_on(&WaitQueue_Read); 재우기 전에 2가지를 검사해야 함 사건을 기다릴 필요가 있는가 논 블로킹 모드로 열렸는가 그렇다면 interruptible_sleep_on 대신 EAGAIN 에러를 반환하고 응용프로그램에게 다시 요청 해야함 깨우기 wake_up_interruptible(&WaitQueue_Read);

wait_event_interruptible 매크로 1. 프로세스의 사용 효율성과 잠들기 구조 2. 블로킹 I/O의 구현 3. 인터럽트 발생 시간 체크 예제 4. wait_event_interruptible 자주쓰는 함수의 매크로화 wait_event_interruptible(wq, condition); wq : 대기큐 condition : 함수 탈출 조건식 DECLARE:_WAIT_QUEUE_HEAD(WaitQueue_Read); : wait_event_interruptible(WaitQueue_Read, count>30); 현재 프로세스를 Wait_Queue_Read 대기 큐에 등록하고 잠듬

Q&A