2 분 소요

1. 쓰레드(Thread)

CPU 이용의 기본 실행 단위

단일 쓰레드(Single threaded) Processes

전통적인 프로세스 - 한 개의 실행 단위로 구성

다중 쓰레드(Multithreaded) Process

여러 개의 실행 쓰레드를 갖는 프로세스 → 한 프로세스가 동시에 하나 이상의 작업 수행 가능 전통적인 프로세스의 확장

image

Thread 사용 자원

  • 같은 프로세스에 속한 다른 thread들과 code, data, OS자원들을 공유함
  • stack, CPU register 저장공간은 thread 전용공간 사용

image

쓰레드 제어 블록(TCB)

쓰레드에 대한 정보를 보관

  • thread ID, thread 실행상태
  • program counter, register set → thread context
  • thread specific 메모리 공간 (static 메모리)

동기

단일 응용 프로그램이 여러 개의 작업을 동시에 실행할 필요가 있음

  • word processor : 화면 출력 + 키보드 입력 + 스펠링 검사 …
  • web browser : 화면 출력 + 네트워크에서 데이터 수신 …
  • web server : 여러 개(수천 개도 가능)의 client의 요청 처리
  • OS kernel : 장치 관리, 인터럽트 처리 등의 여러 작업 …

해결책

  • 다중 프로세스 → 프로세스 생성 오버헤드
  • 다중 쓰레드 프로세스 → 쓰레드 생성에 필요한 자원이 적어서, 효율적

image

장점

응답성

프로그램의 일부가 block되거나, 긴 작업을 수행하여도, 대화형 작업의 계속 진행을 허용 → 사용자에 대한 응답성 증가

자원 공유

  • 기본적으로 프로세스의 메모리와 자원을 공유함
  • 같은 주소 공간에서 여러 개의 다른 작업을 수행하는 thread 허용
    • 커널 서비스 호출없이 thread 간에 통신 가능

경제성

  • thread 생성, 종료, context switch에 소요되는 오버헤드가 process에 비해서 적음 - 자원, 시간 절약
  • (예) Solaris : 생성 → 30배 빠름, context switching → 5배 빠름
규모 확장성, 적응성

다중 프로세서 구조에서 thread들을 병령 처리 가능

2. 멀티코어 프로그래밍

병렬과 병행

  • 병렬시스템은 동시에 2개 이상의 작업 수행
  • 병행시스템은 2개 이상의 task를 지원하여 모든 작업이 진행되게 함

Amdahl’s Law

N개의 프로세서를 사용하여 얻을 수 있는 가능한 성능 이득

image

병렬 실행의 유형

  • data parallel - 데이터의 부분 집합에 대해서 동일 연산 수행
  • task parallel - 각 프로세서마다 고유 연산 수행
  • 대부분 두 병렬 실행 방법이 혼용된다.

3. 다중 쓰레드 모델

User threads : 커널 지원 없이 사용자 수준에서 제공

  • thread library에 의해서 지원됨

Kernel threads : OS 커널에서 직접 지원되고 관리됨

모든 현대 운영체제는 kernel threads를 지원함

사용자 프로그램의 쓰레드와 커널 쓰레드 간에 여러 연관 관계가 존재

image

Many-to-One 모델

  • 다수의 user-level thread가 한 개의 kernel thread (process)에 연관
  • thread 스케줄링과 동기화가 사용자 공간의 thread library에서 수행

image

장점

context 스위칭과 동기화 overhead가 작아서 효율적

단점

  • 한 thread가 blocking system call을 호출하여 커널 내에서 block되면 전체 process가 block됨 ← 커널이 user-level thread의 존재를 알지 못함
  • Multiprocessor 시스템에서 thread들의 병렬 실행 불가

예:

  • Solaris Green Threads
  • GNU Portable Thread

One-to-One 모델

각 user-level thread가 각각 하나의 kernel thread에 연관

image

장점

한 thread가 blocking system call을 호출하여 block되더라도 같은 process의 다른 thread로 스케줄링되어 실행 가능

단점 : 쓰레드 생성 및 context 스위칭 오버헤드

  • 커널 시스템 호출을 사용하여 커널 쓰레드 생성해야 함
  • 커널에서 thread context switching이 이루어짐
  • 많은 수의 thread는 성능에 부담, 최대 thread 수에 제한이 있을 수 있음

Many-to-Many 모델

다수의 user-level thread가 다수의 kernel thread에 연관

  • kernel thread의 수는 user-level thread의 수와 작거나 같음
  • kernel thread들을 user-level thread들이 multiplex하여 사용
  • kernel thread 개수는 응용 프로그램이나 machine에 따라서 결정됨
    • core 수를 고려하여 kernel thread 수를 결정

image

장점

one-to-one 모델과 같은 병행/병렬성

  • 필요한 만큼의 kernel thread와 연관되는 경우
  • blocking system call을 호출하여 block되었을 때에 같은 process의 다른 thread를 스케줄 가능

user-level thread 개수에 제한이 없음 ←user-level thread 개수보다 적은 수의 kernel thread를 사용가능

Two-level 모델

  • many-to-many 모델의 변형 모델
  • 일부 user-level thread에 대해서 one-to-one 연관 허용

image

태그: ,

카테고리:

업데이트:

댓글남기기