- 코드로읽는리눅스디바이스드라이버 강남용

Similar documents
Chapter #01 Subject

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

슬라이드 1

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

03_queue

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

11장 포인터

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

06장.리스트

슬라이드 1

chap 5: Trees

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Chapter 4. LISTS

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Lab 3. 실습문제 (Single linked list)_해답.hwp

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - 08-chap06-Queue.ppt

좀비프로세스 2

Microsoft PowerPoint - 08-Queue.ppt

제11장 프로세스와 쓰레드

1장. 유닉스 시스템 프로그래밍 개요

슬라이드 1

Chapter ...

Microsoft Word - FunctionCall


PowerPoint 프레젠테이션

Chapter 4. LISTS

Abstract View of System Components

슬라이드 1

KEY 디바이스 드라이버

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

텀블러514

PowerPoint Template

슬라이드 1

GoogleTV Update Procedure

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

11장 포인터

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

1장. 리스트

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - additional01.ppt [호환 모드]

02장.배열과 클래스

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

쉽게 풀어쓴 C 프로그래밍

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

Algorithms

<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E >

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint 프레젠테이션

메시지큐를이용한 IPC 프로그램구현과제보고서 1. 과제의목적 1 리눅스가지원하는프로세스간통신방식중다수의프로세스사이에구조화된데이터블럭, 즉메시지를전달하는데주로사용되는메시지큐방식에대하여무엇인지, 어떻게사용하는지공부한다. 2 공부한내용을점검하기위해기작성된 epda 프로세스관

Microsoft PowerPoint - Chapter_09.pptx

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

리눅스 프로세스 관리

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Chap 6: Graphs

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Microsoft PowerPoint - chap10-함수의활용.pptx

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

Chapter 4. LISTS

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

ABC 10장

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - 10-EmbedSW-11-모듈

사용자수준의스레드 : 사용자의라이브러리에의해운영, 속도는빠르나, 구현이복잡하다. 커널수준의스레드 : 운영체제커널에의해운영, 속도는느리나, 구현이단순하다. 스케줄링 (Scheduling) 1) 스케줄링의정의 프로세스가생성되어실행될때필요한시스템의여러자원을해당프로세스에게할당

본 강의에 들어가기 전

Frama-C/JESSIS 사용법 소개

슬라이드 1

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint Driver-Time-7.ppt

교육지원 IT시스템 선진화

PowerPoint 프레젠테이션

PS4000-¼³¸í¼�

운영체제 실습 - Introduction -

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Chapter_02-3_NativeApp

<4D F736F F F696E74202D C465F4B6F F6E662DB8AEB4AABDBABFA1BCADC0C7BDC7BDC3B0A3C1F6BFF8>

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

ABC 11장

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

제9장 프로세스 제어

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - 제4장-스택과큐.pptx

망고100 보드로 놀아보자 -13

The Pocket Guide to TCP/IP Sockets: C Version

제1장 Unix란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20322DBDC7BDC3B0A320BFEEBFB5C3BCC1A6>

기초컴퓨터프로그래밍

Transcription:

- 코드로읽는리눅스디바이스드라이버 - 2011.1.3 강남용 (nykang@ssu.ac.kr)

커널스레드 스레드란? 스레드종류 도우미인터페이스 연결리스트 해시리스트 작업큐 통지연쇄 완료인터페이스 kthread 도우미 오류처리지원 ( 원시코드살펴보기 ) 2

스레드란? - 하나의프로그램내에서실행되는함수를의미 - 일반적인프로세서의경우는한순간에하나의함수만실행되지만, 스레드를사용하면동시에여러함수를실행가능 3

스레드의종류 : 사용자스레드, 커널스레드 사용자스레드 - 사용자스레드는커널영역의상위에서지원되며일반적으로유저레벨의라이브러리를통해구현되며라이브러리는커널의지원없이유저공간에서스레드의생성과, 스케줄링, 관리를지원한다. - 장점 : 생성과관리가빠르다. - 단점 : 여러개의사용자스레드중하나의스레드가시스템호출등으로중단되면나머지모든스레드역시중단되는단점이있다 4

스레드의종류 : 사용자스레드, 커널스레드 커널스레드 - 커널스레드는운영체제가지원하는스레드기능으로구현되며, 커널이스레드의생성및스케줄링등을관리한다 - 장점 : 스레드가시스템호출등으로중단되더라도, 커널은프로세스내의다른스레드를중단시키지않고계속실행시켜준다. - 단점 : 사용자스레드에비해생성및관리하는것이느리다 5

연결리스트 usr/src/kernel/{version}/include/linux/list.h struct list_head { // 이중연결리스트자료구조를만들어내는구조체 }; struct list_head *next, *prev; 6

연결리스트 LIST_HEAD(list_name) : 리스트를새로만듬 list_add(n,p) : p 가가리키는요소다음에 n 을가리키는요소삽입 list_add_tail(n,h) : 첫번째요소의주소인 h 로지정한리스트의맨끝에 n 이가리키는요소삽입 list_del(p) : p 가가리키는요소삭제 list_empty(p) : 첫번째요소의주소로지정한리스트가비어있는지검사 list_entry(p, t, f) : 이름이 f 고주소가 p 인 list_head 필드를포함한 t 타입자료구조의주소반환 list_for_each(p,h) : 첫번째요소의주소 h 로지정한리스트에있는요소를차례로 \ 검색 7

해시리스트 usr/src/kernel/{version}/include/linux/list.h 8

작업큐 workqueue_struct, work_struct 커널내부에서작업을지연시켜주는수단 ( 오류인터럽트에반응한네트워크어댑터재시동 ) struct workqueue_struct *test; create_singlethread_workqueue(const char *name); //workque 를생성 struct work_struct *work; // 작업구성요소를생성한다. INIT_WORK(work, func, data); // 초기화 queue_work(test, work); // 큐에작업을넣는다. 9

작업큐 위치 설명 work_struct include/linux/workqueue.h 커널내부에서작업을지연하는방식인작업큐를 구현하는구조체 DECLARE_WAITQUEUE () include/linux/wait.h 대기큐를선언한다 add_wait_queue() kernel/wait.c 태스크를대기큐에밀어넣는다. 이태스크는다른 스레드나인터럽트처리기가깨울떄까지잔다. remove_wait_queue() kernel/waint.c 대기큐에서잠자고있는태스크를빼낸다. wake_up_interruptible() include/linux/wait.h kernel/sched.c 대기큐내부에서잠자고있는태스크를꺠워스케줄러실행큐로옮긴다 schedule() kenel/sched.c 프로세서를양보해커널의다른부분이실행하게허 용한다. set_current_state() include/linux/sched.h 프로세서실행상태를설정한다. 10

통지연쇄 상태변화메시지들을코드영역에전달할때사용 사망통지 : 커널함수가 oops, 페이지폴트가발생했을때전달된다. 네트워크디바이스통지 : 네트워크인터페이스가올라오고내려갈때생성된다.(ifconfig eth0 up) CPU 주파수통지 : 프로세서주파수에변화가있을떄생성된다. 인터넷주소통지 : 네트워크인터페이스 IP 주소가바뀔때생성된다. 11

통지연쇄 위치 설명 notifier_block include/linux/notifier.h 요청한코드영역에상태변경내용을전달하기위해 쓰이는구조체 register_die_notifier() arch/your-arch/kernel/traps.c 사망통지를등록한다. register_netdevice_notifie r() net/core/dev.c 넷디바이스통지를등록한다. register_inetaddr_notifier( ) net/ipv4/devinet.c inetaddr 통지를등록한다 BLOCKING_NOTIFIER_ HEAD() blocking_notifier_chain_r egister() ATOMIC_NOTIFIER_HE AD() atomic_notifier_chain_reg ister() include/linux/notifier.h 사용자정의차단통지를생성한다. kernel/sys.c 차단통지를등록한다. include/linux/notifier.h 원자적인통지를생성한다. ( 원자적 : 중단됨이없이한번에실행되는것을의미 ) kernel/sys.c 원자적인통지를등록한다. 12

완료인터페이스 커널스레드가수행되고완료가되게끔 도와주는역할 드라이버모듈은커널스레드를사용한다. rmmod 로모듈을제거하면커널영역에서모듈코드를제거하기전에 release() 함수를호출한다. 이방식은스레드에게스스로종료하게요청하고, 스레드가완료될때까지기다린다. kthread 도우미 스레드생성작업과관리를용이하게해준다. daemonize( thread_name ); kernel_thread(my_thread, NULL, CLONE_FS CLONE_FILES CLONE_SIG HAND SIGCHLD); kthread_create(my_thread, NULL, %s, my_thread) 13

완료인터페이스와 kthread 도우미 위치 설명 completion include/linux/completion.h 독자적인스레드로활동을시작하고활동이끝날때 까지기다리기위해사용하는구조체 complete() kernel/sched.c 완료를알린다. wait_for_completion() kernel/sched.c 완료객체가끝날때까지기다린다. complete_and_exit() kernel/exit.c 원자적으로완료와종료시그널을보낸다. kthread_create() kernel/kthread.c 커널스레드를생성한다. kthread_stop() kernel/kthread.c 커널스레드에게멈추도록요청한다. kthread_should_stop() kernel/kthread.c 커널스레드는다른스레드가 kthread_stop() 으로 중단을요청했는지감지하기위해사용한다. 14

오류처리지원 IS_ERR() : 반환값이오류코드인지를점검한다. PTR_ERR() : 오류코드를알려준다. buf = malloc(100, GFP_KERNEL); if(is_err(buf)){ printk( Error returned is %d! \n, PTR_ERR(buf)); } Error returned is -12! (/usr/include/asm/errno.h, #define ENOMEM 12 /* Out of memory */) 15