Linux/UNIX Programming
APUE (Thread Program- ming)
문양세
강원대학교 IT 대학 컴퓨터공학과
Operating Systems by Yang-Sae Moon
Page 2
스레드 (Threads) 란 ?
프로세스 내의 제어 흐름 (a flow of control within a process)
앞서 공부한 프로세스는 단일 스레드 프로세스로 볼 수 있다 .
다중 스레드 프로세스에서는 하나의 프로세스 내에 여러 제어 (control) 가 존재한다 .
스레드는 CPU 이용의 기본 단위로서 아래 정보들로 구성된다 .
스레드 ID, 프로그램 카운터 , 레지스터 집합 , 스택 등
동일 프로세스의 여러 스레드는 코드 영역 , 데이터 영역 , 운영체제 자 원 ( 예 : 열린 파일 , 시그널 ) 을 공유한다 .
프로세스가 다수의 제어 스레드를 가진다면 , 프로세스는 동시에 하나 이 상의 작업을 실행할 수 있다 .
APUE (Thread Programming)
Operating Systems by Yang-Sae Moon
Page 3
단일 vs 다중 스레드 프로세스
APUE (Thread Programming)
Operating Systems by Yang-Sae Moon
Page 4
다중 스레드 프로그램 (1/2)
현대 운영체제의 대다수 소프트웨어 패키지는 다중 스레드를 지원한다 .
웹 브라우저의 스레드 이용 예
이미지와 텍스트를 표시 (display) 하는 스레드 1 개
네트워크로부터 데이터를 읽어는 스레드 1 개
워드 프로세서의 스레드 이용 예
그래프를 표시 (display) 하는 스레드 1 개
사용자의 키 스트로크에 응답하는 스레드 1 개
스펠링 , 문법 검사를 수행하는 스레드 1 개
APUE (Thread Programming)
Operating Systems by Yang-Sae Moon
Page 5
웹 서버
단일 스레드 웹 서버 : 한 클라이언트 요청에 대한 서비스를 완료할 때까지 다른 클라이 언트 요청에 대한 서비스를 기다려야 한다 .
다중 프로세스 웹 서버 : 스레드가 일반화되기 전에 사용되었으며 , 새로운 프로세스를 생성하여 추가적인 클라이언트 요청을 처리한다 . 프로세스 생성 오버헤드 발생
다중 스레드 웹 서버 : 프로세스에 비해 오버헤드가 작은 스레드를 생성하여 여러 클라이 언트에 대해 동시에 서비스한다 .
많은 운영체제 커널들이 현재 다중 스레드 기반이다 .
여러 스레드들이 커널 내에서 동작한다 .
각 스레드는 장치를 관리하거나 인터럽트를 처리하는 등 특정 작업을 수행한다 .
다중 스레드 프로그램 (2/2)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 6
주요 스레드 라이브러리
Linux/Unix
POSIX Pthreads
Mach C-threads, Solaris Threads Windows: Win32 Threads
JVM: Java Threads
(Thread class, Runnable interface)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 7
POSIX Pthreads
스레드 생성 / 동기화에 대한 POSIX 표준 (IEEE 1003.1c) API 를 제공 한다 .
스레드 동작에 대한 API 명세를 제공할 뿐이며 , 이의 구현은 각 운영체 제에 따라 다르게 구현될 수 있다 .
솔라리스 , Mac OS X 등 여러 Linux/Unix 운영체제에서 공통 지원한 다 .
Pthreads 라이브러리 컴파일 옵션 : -lpthread Pthreads system calls
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 8
Simple Example 1 (1/4)
스레드 기능 : 1 에서 n 까지의 합을 구함
APUE (Thread Programming)
���= ∑
�=1
�
�
UNIX System Programming by Yang-Sae Moon
Page 9
Simple Example 1 (2/4)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 10
Simple Example 1 (3/4)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 11
Simple Example 1 (4/4)
APUE (Thread Programming)
���= ∑
�=1
�
�
UNIX System Programming by Yang-Sae Moon
Page 12
Simple Example 2 (1/4)
스레드 10 개를 생성하고 , 각각은 Hello world! 를 출력함
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 13
Simple Example 2 (2/4)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 14
Simple Example 2 (3/4)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 15
Simple Example 2 (4/4)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 16
Creating Threads – pthread_create()
thread: 생성된 스레드의 식별자를 리턴할 변수 attr: 생성할 스레드의 속성 (default: NULL) start_routine: 스레드가 수행할 함수
arg: 스레드 함수에 주어질 argument
APUE (Thread Programming)
#include <pthread.h>
int pthread_create( pthread_t *thread, pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg);
UNIX System Programming by Yang-Sae Moon
Page 17
More Example 1 (1/3)
동일 함수인데 서로 다른 메시지를 출력하는 두 개의 스레드
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 18
More Example 1 (2/3)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 19
More Example 1 (3/3)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 20
Pthreads 동작 절차
APUE (Thread Programming)
앞서 두 개의 스레드가 생성되는 경우의 예제
UNIX System Programming by Yang-Sae Moon
Page 21
More Example 2 (1/3)
네 개의 스레드가 다소 복잡한 수학 계산을 수행하는 예제
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 22
More Example 2 (2/3)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 23
More Example 2 (3/3)
APUE (Thread Programming)
UNIX System Programming by Yang-Sae Moon
Page 24
데이터 공유와 동기화
APUE (Thread Programming)
스레드간 데이터 공유는 전역 변수 (global variable) 나 공유 메모리 (shared memory) 를 사용하여 가능하다 .
동기화는 ?
mutex, conditional variables, semaphore 등을 사용하여 해결한다 .
관심 있는 학생은 Linux System Programming(Robert Love) 을 참조하세요 .
UNIX System Programming by Yang-Sae Moon