• 검색 결과가 없습니다.

APUE (Thread Program-ming)

N/A
N/A
Protected

Academic year: 2021

Share "APUE (Thread Program-ming)"

Copied!
25
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Linux/UNIX Programming

APUE (Thread Program- ming)

문양세

강원대학교 IT 대학 컴퓨터공학과

(2)

Operating Systems by Yang-Sae Moon

Page 2

스레드 (Threads) 란 ?

프로세스 내의 제어 흐름 (a flow of control within a process)

앞서 공부한 프로세스는 단일 스레드 프로세스로 볼 수 있다 .

다중 스레드 프로세스에서는 하나의 프로세스 내에 여러 제어 (control) 가 존재한다 .

스레드는 CPU 이용의 기본 단위로서 아래 정보들로 구성된다 .

스레드 ID, 프로그램 카운터 , 레지스터 집합 , 스택 등

동일 프로세스의 여러 스레드는 코드 영역 , 데이터 영역 , 운영체제 자 원 ( 예 : 열린 파일 , 시그널 ) 을 공유한다 .

프로세스가 다수의 제어 스레드를 가진다면 , 프로세스는 동시에 하나 이 상의 작업을 실행할 수 있다 .

APUE (Thread Programming)

(3)

Operating Systems by Yang-Sae Moon

Page 3

단일 vs 다중 스레드 프로세스

APUE (Thread Programming)

(4)

Operating Systems by Yang-Sae Moon

Page 4

다중 스레드 프로그램 (1/2)

현대 운영체제의 대다수 소프트웨어 패키지는 다중 스레드를 지원한다 .

웹 브라우저의 스레드 이용 예

이미지와 텍스트를 표시 (display) 하는 스레드 1 개

네트워크로부터 데이터를 읽어는 스레드 1 개

워드 프로세서의 스레드 이용 예

그래프를 표시 (display) 하는 스레드 1 개

사용자의 키 스트로크에 응답하는 스레드 1 개

스펠링 , 문법 검사를 수행하는 스레드 1 개

APUE (Thread Programming)

(5)

Operating Systems by Yang-Sae Moon

Page 5

웹 서버

단일 스레드 웹 서버 : 한 클라이언트 요청에 대한 서비스를 완료할 때까지 다른 클라이 언트 요청에 대한 서비스를 기다려야 한다 .

다중 프로세스 웹 서버 : 스레드가 일반화되기 전에 사용되었으며 , 새로운 프로세스를 생성하여 추가적인 클라이언트 요청을 처리한다 .  프로세스 생성 오버헤드 발생

다중 스레드 웹 서버 : 프로세스에 비해 오버헤드가 작은 스레드를 생성하여 여러 클라이 언트에 대해 동시에 서비스한다 .

많은 운영체제 커널들이 현재 다중 스레드 기반이다 .

여러 스레드들이 커널 내에서 동작한다 .

각 스레드는 장치를 관리하거나 인터럽트를 처리하는 등 특정 작업을 수행한다 .

다중 스레드 프로그램 (2/2)

APUE (Thread Programming)

(6)

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)

(7)

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)

(8)

UNIX System Programming by Yang-Sae Moon

Page 8

Simple Example 1 (1/4)

스레드 기능 : 1 에서 n 까지의 합을 구함

APUE (Thread Programming)

���=

�=1

  

(9)

UNIX System Programming by Yang-Sae Moon

Page 9

Simple Example 1 (2/4)

APUE (Thread Programming)

(10)

UNIX System Programming by Yang-Sae Moon

Page 10

Simple Example 1 (3/4)

APUE (Thread Programming)

(11)

UNIX System Programming by Yang-Sae Moon

Page 11

Simple Example 1 (4/4)

APUE (Thread Programming)

���=

�=1

  

(12)

UNIX System Programming by Yang-Sae Moon

Page 12

Simple Example 2 (1/4)

스레드 10 개를 생성하고 , 각각은 Hello world! 를 출력함

APUE (Thread Programming)

(13)

UNIX System Programming by Yang-Sae Moon

Page 13

Simple Example 2 (2/4)

APUE (Thread Programming)

(14)

UNIX System Programming by Yang-Sae Moon

Page 14

Simple Example 2 (3/4)

APUE (Thread Programming)

(15)

UNIX System Programming by Yang-Sae Moon

Page 15

Simple Example 2 (4/4)

APUE (Thread Programming)

(16)

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

(17)

UNIX System Programming by Yang-Sae Moon

Page 17

More Example 1 (1/3)

동일 함수인데 서로 다른 메시지를 출력하는 두 개의 스레드

APUE (Thread Programming)

(18)

UNIX System Programming by Yang-Sae Moon

Page 18

More Example 1 (2/3)

APUE (Thread Programming)

(19)

UNIX System Programming by Yang-Sae Moon

Page 19

More Example 1 (3/3)

APUE (Thread Programming)

(20)

UNIX System Programming by Yang-Sae Moon

Page 20

Pthreads 동작 절차

APUE (Thread Programming)

앞서 두 개의 스레드가 생성되는 경우의 예제

(21)

UNIX System Programming by Yang-Sae Moon

Page 21

More Example 2 (1/3)

네 개의 스레드가 다소 복잡한 수학 계산을 수행하는 예제

APUE (Thread Programming)

(22)

UNIX System Programming by Yang-Sae Moon

Page 22

More Example 2 (2/3)

APUE (Thread Programming)

(23)

UNIX System Programming by Yang-Sae Moon

Page 23

More Example 2 (3/3)

APUE (Thread Programming)

(24)

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) 을 참조하세요 .

(25)

UNIX System Programming by Yang-Sae Moon

Page 25

Homework#13

APUE (Thread Programming)

참조

관련 문서