제 4 장 . 쓰레드 , SMP, 그리고 마이크로커널
4 장의 강의 목표
• 쓰레드(thread)의 개념을 이해하고, 프로세스와의 차이점 를 구별한다.
• 쓰레드의 장단점을 이해한다 .
• 사용자 수준 쓰레드와 커널 수준 쓰레드의 개념을 이해한 다.
• 대칭적 다중처리(SMP)에 대해서 이해한다.
• 마이크로 커널의 개념과 장단점을 이해한다 .
• Windows, Solaris, Linux의 쓰레드 관리 및 SMP 관리 기법
을 이해한다.
목 차
4.1 프로세스 및 쓰레드(Thread)
4.2 대칭적 다중처리 (Symmetric Multiprocessing, SMP) 4.3 마이크로 커널 (Microkernels)
4.4 Windows 쓰레드 및 SMP 관리 4.5 Solaris 쓰레드 및 SMP 관리 4.6 Linux 프로세스 및 쓰레드 관리
쓰레드, SMP 및 마이크로커널 3
4.1 프로세스와 쓰레드 (thread)
•
프로세스
– 실행 중인 프로그램(A program in execution)
Î자원 소유권(resource ownership)
Î수행/스케줄링(execution/scheduling)개체
– 메모리(코드, 데이터, 스택), 파일, signal, IPC, accounting, … – CPU 레지스터 정보, 스케줄링 정보
• 현대 OS에서 프로세스는 태스크(task) 및 쓰레드(thread)라 는 두 객체(특성)로 분리
– 태스크: Resource Container (사용자 문맥, 시스템 문맥) – 쓰레드: 제어 흐름(실행 정보, 레지스터 문맥)
다중쓰레딩
• 단일 쓰레딩(threading) vs. 다중쓰레딩(Multithreading)
– 단일 프로세스 내에 다중 쓰레드 실행을 지원 가능
쓰레드, SMP 및 마이크로커널 5 4.1 프로세스와 스레드
프로세스와 쓰레드 사례
• MS-DOS는 단일 사용자 프로세스와 단일 쓰레드를 지원
• UNIX 계열의 여러 운영체제는 다중 사용자, 다중 프로세스
를 지원하지만 , 프로세스 당 하나의 쓰레드를 지원한다 .
• Java 수행시간환경(run-time environment)은 하나의 프로 세스가 다중 쓰레드를 지원한다.
• 최신 버전의 UNIX, Windows, Solaris는 다중 쓰레드를 지 원하는 다중 프로세스를 사용한다.
4.1 프로세스와 스레드 다중 쓰레딩
다중쓰레딩 환경
• 태스크 (또는 프로세스) 관련 사항
– 프로세스 이미지를 유지하는 가상 주소 공간
– 처리기, (IPC를 위한) 다른 프로세스, 파일, I/O 자원들에 대한 접 근제어
• 쓰레드 관련 사항
– 실행 상태(수행, 준비, 블록, …)
– 수행 중이 아닐 때 저장되는 쓰레드 문맥 – 실행 스택
– 지역 변수 저장을 위해 각 쓰레드가 사용하는 어떤 정적 저장소 (storage)
– 자신 프로세스의 메모리 및 자원들에 대한 접근 공유
• 한 프로세스 내의 모든 쓰레드들은 그 프로세스의 자원들 을 공유
쓰레드, SMP 및 마이크로커널 7
4.1 프로세스와 스레드 다중 쓰레딩
쓰레드 모델
• 단일/다중 쓰레드 모델
4.1 프로세스와 스레드 다중 쓰레딩
쓰레드의 장점 (benefits)
• 프로세스에 비해 새로운 쓰레드 생성 시간/비용이 절약
• 프로세스 종료 시간보다 쓰레드 종료 시간이 짧다.
• 한 프로세스 내의 쓰레드들 사이의 교환/교체 시간이 짧다.
• 동일 프로세스 내의 쓰레드들은 메모리 및 파일을 공유하기 때문에 , 이들 쓰레드들은 커널의 개입 없이 서로 통신 가능
• 한 프로그램의 구조(structure)를 단순화
– Module program structure
• 다중처리기(multiprocessor)의 효율적 사용
– 빠른 수행
• 빠른 IPC (메시지 전송이 아닌 공유 메모리 사용 가능)
– 비동기 처리
• 병행 서버 (listening thread and responding threads)
– Foreground and background processing
쓰레드, SMP 및 마이크로커널 9
4.1 프로세스와 스레드 다중 쓰레딩
• 예: 쓰레드를 사용한 원격 프로시져 호출
쓰레드의 기능
4.1 프로세스와 스레드
쓰레드의 기능 ( 계속 )
• 쓰레드 상태
– 수행 / 준비 / 블록/ 종료 – 기본적인 쓰레드 연산:
• 생성(Spawn), 디스패치(Dispatch), 블록(Block), 비블록(Unblock), 종료(Finish)
– 그림 4.4: 단일 처리기 상에서 다중 쓰레딩 예
쓰레드, SMP 및 마이크로커널 11
)보류= Suspend(?)
4.1 프로세스와 스레드
쓰레드 동기화 (synchronization)
• 한 프로세스 내의 모든 쓰레드들은 동일 주소 공간 및 자원 들을 공유
• 공유 자원
– 전역 변수/ 파일
– 동적 할당 메모리: 예)이중 연결 리스트(double linked lists)
• 공유 자원에 대해 동시 접근 시(특히, 갱신 시), 일관성 유지 기법 필요
– 예) 한 공유 변수에 대해 읽기 연산은 동시 접근이 가능하나, 쓰기 연산은 한 순간에 하나만 가능
– 동기화 관련 내용은 제5장 및 제 6장에서 다룸
쓰레드의 기능 4.1 프로세스와 스레드
사용자 수준 쓰레드와 커널 수준 쓰레드
• User-Level Thread(ULT) vs. Kernel-Level Thread(KLT)
Kernel-supported thread Lightweight process
쓰레드, SMP 및 마이크로커널 13 4.1 프로세스와 스레드
• 사용자 수준 쓰레드
– 응용이 모든 쓰레드 관리를 책임짐:쓰레드 라이브러리가 쓰레드 생성, 제거, 데이터 전송, 동기화, 스케줄, 문맥교환을 수행
– 커널은 쓰레드의 존재를 모름
– 쓰레드 라이브러리 예:cthread,pthread등
• 커널 수준 쓰레드
– 커널이 프로세스 및 쓰레드에 대한 문맥 정보를 관리 – 쓰레드에 대한 스케줄링이 커널 수준에서 수행됨 – 예: Windows
• 결합된 접근 방법 (Combined approach)
– 예: Solaris
사용자 수준 쓰레드와 커널 수준 쓰레드 ( 계속 )
4.1 프로세스와 스레드
사용자 수준 쓰레드
•
사용자 수준 쓰레드의 장점
– 쓰레드 교환/교체 시에 커널 모드 권한이 불필요
• 두 번의 모드 전이 오버헤드를 절약 가능 – 특정 응용에 적합한 스케줄링 적용 가능 – 모든 OS에서 수행 가능
•
사용자 수준 쓰레드의 단점
– 한 쓰레드가 블록 상태를 유발하는 시스템 호출을 수행할 경우, 자신은 물론 그 프로세스 내의 모든 다른 쓰레드들도 블록됨 – 다중처리기의 장점을 살리지 못함.
쓰레드, SMP 및 마이크로커널 15
4.1 프로세스와 스레드 사용자 수준 쓰레드와 커널 수준 쓰레드
• 사용자 수준 쓰레드 상태와 프로세스 상태 사이의 관계
사용자 수준 쓰레드
4.1 프로세스와 스레드 사용자 수준 쓰레드와 커널 수준 쓰레드
스레드2가 입출력 시스템 호출
프로세스와 쓰레드 간의 관계
쓰레드, SMP 및 마이크로커널 17 4.1 프로세스와 스레드
4.2 대칭적 다중처리
• 전통적으로 컴퓨터는 순차적 실행 기계임
– 처리기 하나는 한 시점에 한 명령어 만을 처리할 수 있음 – Each instruction is a sequence of operations
• 병렬성(parallelism) 지원을 위한 두 가지 방법
– 대칭적 다중처리(Symmetric MultiProcessors: SMP) – Clusters (chapter 16)
SMP 구조
•
컴퓨터 시스템의 분류 (by Flynn)
– Single Instruction Single Data (SISD) stream
• 단일 처리기가 한 메모리에 저장된 데이터를 처리하기 위해 단일 명령 스트림을 수행
– Single Instruction Multiple Data (SIMD) stream
• 각(동일) 명령이 서로 다른 데이터 집합에 대하여 서로 다른 처리기에
의해 수행
• 벡터 및 배열 처리기(vector and array processors)
• Pentium 처리기의superscalar 구조
– Multiple Instruction Single Data (MISD) stream
• (같은) 일련의 데이터가 처리기들의 집합에 전송되고, 각 처리기는 서로 다른 명령을 수행
• 지금까지 구현된 적이 없음
– Multiple Instruction Multiple Data (MIMD) stream
• 다수의 처리기가 서로 다른 데이터 집합에 대하여 서로 다른 일련의 명 령어들을 동시에 수행
쓰레드, SMP 및 마이크로커널 19 4.2 대칭적 다중처리
병렬 처리기들의 분류 (Categories of Parallel Processors)
4.2 대칭적 다중처리 SMP 구조
SMP 구성
쓰레드, SMP 및 마이크로커널 21 4.2 대칭적 다중처리
• 캐시 일관성 문제
SMP 를 위한 OS 설계 시 고려 사항
•
목적: 사용자가 다중프로그래밍 단일처리기 시스템
(multiprogramming uniprocessor system)과 동일한 관점을 가 질 수 있게 자원을 관리
•
동시적 병행 (simultaneous concurrent) 프로세스 또는 쓰레드
– 재진입(reentrant) 커널 코드, 분리된(separated) 커널 자료 구조
•
SMP 를 위한 스케줄링
– 전역 큐/ 지역 큐, 집단 스케줄링(gang scheduling), 친화성(affinity)
•
동기화
– 상호배제(mutual exclusion), 사건 순서화(event ordering)
•
메모리 관리
– 다중포트 메모리(multiport memory): dualport memory
•
신뢰성 및 결함 허용 (fault tolerance)
– 이주(migration)
4.2 대칭적 다중처리
4.3 마이크로 커널 (Microkernel)
• OS 는 초대형 프로그램
– OS/360의 첫 번째 버전: 백만 줄 이상의 코드로 구성 – Multics는 2천만 줄의 코드로 구성
→ 모듈화 프로그래밍 기술 필요
• 커널 구조
– 단일체 (monolithic) 운영체제
• 계층적(Layered) 커널
– 각 계층은 상당한 기능을 포함하고 인접 계층 간에 많은 상호 작용 – 한 계층의 변화는 인접한 계층에 여러 영향을 미침
– 마이크로 커널(Microkernel)
쓰레드, SMP 및 마이크로커널 23
단일체 커널 (Monolithic Kernel)
• Monolithic Architecture
– Every component contained in kernel
• Any component can directly communicate with any other – Tend to be highly efficient
– Disadvantage is difficulty determining source of subtle errors
4.3 마이크로 커널
마이크로 커널의 구조
• 마이크로 커널: 스케줄링, 보호, 메시지 교환 등등의 필수적인 핵심OS 기능/함수들만 유지
– 서비스: 장치 드라이버(driver), 파일 시스템, 가상 메모리 관리자, 윈도우 시스템, 보안 서비스 등과 같은 기능들을 제공
쓰레드, SMP 및 마이크로커널 25 4.3 마이크로 커널
마이크로커널 구성의 이점 (benefits)
• 일관된 인터페이스(uniform interface)
– 메시지 전달에 의해 제공되는 커널 및 사용자 수준 서비스
• 확장성(extensibility)
– 새로운 서비스의 삽입이 용이
• 유연성(flexibility, 융통성)
– 서비스의 삽입 및 삭제가 용이하여 응용에 최적인 운영체제 구성 가능
• 이식성(portability)
– 새로운 구조의 시스템에 커널 포팅이 용이
• 신뢰성(reliability)
– 모듈 단위로 설계된 커널보다, 작은 마이크로 커널이 더 철저히 검증될 수 있다.
• 분산 시스템 지원에 적합
– 마이크로커널은 근본적으로 클라이언트-서버 모델
– 마이크로커널 수준에서, 프로세스는 해당 서비스가 어떤 목표(대상) 시스템에서 처리되는 지를 파악할 필요 없이 메시지를 전송
• 객체지향 운영체제와 잘 부합
– 마이크로커널은 객체 지향의 원리를 반영 4.3 마이크로 커널
마이크로커널의 성능
• 일관된 인터페이스(uniform interface)에 의한 요청 처리
– 메시지 전송 방식으로 모든 서비스를 제공
– 커널 수준 서비스 및 사용자 수준 서비스 사이의 차이점 구별이 없음
• 성능 상의 고려사항 (performance consideration)
– 1세대 마이크로 커널– 단일체 커널에서 단일 시스템 호출 처리
시간보다, 마이크로커널에서 메시지를 통한 서비스 요청 및 응 답 처리 시간이 더 걸림
– 2세대 마이크로커널(예: L4) – 12KB의 코드와7개의 시스템 호
출로 구성되어, 계층화된OS에 비해 성능이 떨어지지 않음
쓰레드, SMP 및 마이크로커널 27 4.3 마이크로 커널
마이크로커널의 설계
• 마이크로커널에서 제공할 서비스
– 저수준 메모리 관리(Low-level Memory Management) – IPC (Interprocess Communication): 메시지, 포트, … – I/O 및 인터럽트 관리
– 저수준 메모리 관리
• 가상 페이지 각각을 물리적 프레임으로 사상시켜주는 기능 포함
• 주소공간 보호, 페이지 교체, 페이징 논리는 메모리 관리 서버로 구현
• 예) 그림4.11
– Mach의 외부 페이지(external pager)가 페이지폴트(page fault)를 처 리하는 예
4.3 마이크로 커널
• 프로세스간 통신
– 포트를 기반으로 한 메시지 사용
• I/O와 인터럽트 관리
– 하드웨어 인터럽트를 메시지로 처리
쓰레드, SMP 및 마이크로커널 29
마이크로커널의 설계 ( 계속 )
4.3 마이크로 커널
사례 연구(Case Studies)
• Windows, Solaris, Linux
• 서로 다른 운영체제 환경에 의해 지원되는 프로세스 구 조와 기능 표현 방법
– 프로세스의 이름 부여 방법
– 프로세스 내에서 쓰레드의 지원 여부 – 프로세스의 표현 방법
– 프로세스 자원의 보호 방법
– 프로세스간 통신과 동기화를 위해서 사용되는 기법 – 프로세스들이 상호 연관되는 방법
Windows 쓰레드 및 SMP 관리
• Windows 프로세스
– 프로세스와 서비스는 객체로 구현
– 각 프로세스는 하나 이상의 쓰레드 포함
– 각 프로세스와 쓰레드는 내재된 (built-in) 동기화 기법 포함
• SMP 지원
– Threads can run on any processor – But an application can restrict affinity – 연성 친화력(Soft Affinity)
• The dispatcher tries to assign a ready thread to the same processor it last ran on.
• This helps reuse data still in that processor’s memory caches from the previous execution of the thread.
– 경성 친화력(Hard Affinity)
• An application restricts threads to certain processor
쓰레드, SMP 및 마이크로커널 31
Windows 쓰레드 및 SMP 관리
• Windows 프로세스와 자원 (그림 4.12)
Windows 쓰레드 및 SMP 관리
• 프로세스 객체 및 쓰레드 객체 (그림 4.13)
쓰레드, SMP 및 마이크로커널 33
Windows 쓰레드 및 SMP 관리
• 그림 4.14: 6가지 쓰레드 상태
Solaris 쓰레드 및 SMP 관리
• 다단계 쓰레드 구조
– 프로세스: 보통의 UNIX 프로세스
• 사용자 주소공간, 스택, 프로세스 제어 블록(PCB) 등을 포함 – 사용자 수준 쓰레드 (ULT)
• 프로세스 주소공간에서 쓰레드 라이브러리를 통해 구현 – 경량 프로세스 (Lightweight processes ≡ LWP)
• ULT와 커널 쓰레드 사이의 사상(mapping) – 커널 쓰레드 ≡ 커널 수준 쓰레드 (KLT)
• 처리기에 수행되는 기본 개체
→ 그림 4.15 참조
쓰레드, SMP 및 마이크로커널 35
Solaris 쓰레드 및 SMP 관리
• 프로세스와 쓰레드 관계
Solaris 쓰레드 및 SMP 관리
• Solaris 다중쓰레드 구조의 예
쓰레드, SMP 및 마이크로커널 37
Solaris 쓰레드 및 SMP 관리
• 동기 (motivations)
– 어떤 프로그램은 논리적인 병렬성(parallelism)을 가지지만 하드웨 어 병렬성을 요구하지 않는다. Æ 하나의 LWP에 ULT들의 집합 사 상 가능
• 예: 다중 윈도우 환경에서 한 순간에 하나의 윈도우만이 활성화 – 어떤 응용이 (I/O 요청과 같이) 블록될 수 있는 쓰레드를 포함하는
경우에는 다수의 LWP를 이용하는 것이 효과적
– 어떤 응용에서는 ULT를 LWP에 일대일로 사상하는 것이 효과적
• 예: 병렬 배열 계산 (parallel array computation)
– 혼합 형태(Hybrids): bound and unbound ULTs가 공존
• 예: 어떤 쓰레드는 RT 스케줄링을 수행하고, 나머지 쓰레드는 후면 함 수(background functions)을 수행
– 순수 커널 쓰레드
Solaris 쓰레드 및 SMP 관리
• 전통적인 UNIX 및 Solaris에서 프로세스 구조 (그림 4.16)
쓰레드, SMP 및 마이크로커널 39
Solaris 쓰레드 및 SMP 관리
• Solaris thread state
Solaris 쓰레드 및 SMP 관리
• 활성화(active, 수행 중) 상태의 ULT 쓰레드에 대한 상태 전이의 예
– 동기화 필요: 수면(sleeping) 상태로 전이
• 예: 5장에서 기술될 상호배제 필요
– 보류(suspension): 쓰레드를 보류시켜 정지(stopped) 상태로 전 이
– 선점(preemption):
• 활성화 상태의 쓰레드가 수행가능(runnable) 상태로 전이 – 양보(yielding):
• thr_yield() 라이브러리 함수를 호출하면 수행가능 상태로 전이
쓰레드, SMP 및 마이크로커널 41
) Solaris: Interrupts as Threads
• 인터럽트 쓰레드 도입
Linux 프로세스 및 쓰레드 관리
• Linux 태스크 (task_struct 자료구조)
– 상태
• Running, Interruptable, Uninterruptable, Stopped, Zombie – 스케줄링 정보
• 정책: SCHED_RR, SCHED_FIFO, SCHED_OTHER
• O(1) scheduler in Linux 2.6.*
– 식별자(pid, uid, gid) – 프로세스간 통신 (IPC)
– 링크: 부모 프로세스, 준비 상태의 프로세스들, 블록상태의 프로세스들 – 시간과 타이머
– 파일 시스템 – 주소 공간
– 처리기 의존 문맥(processor-specific context) : 레지스터 및 스택 정 보
) Linux: 다른 플래그(flag)를 갖는 clone()
Linux 프로세스 및 쓰레드 관리
• 프로세스/쓰레드 모델 – 정지(stopped)
– 수행 중(executing) – 좀비 (zombie)
∗ 시그널(signal)
∗ 사건(event)
쓰레드, SMP 및 마이크로커널 43
요 약
• 프로세스와 쓰레드
– 자원 컨테이너 대 제어 흐름 – 쓰레드 상태
– 사용자 수준 쓰레드(ULT) 대 커널 수준 쓰레드(KLT)