스레드(Thread)

스레드의 개념

프로세스의 작업 과정

  1. 프로세스의 생성: OS는 코드와 데이터를 메모리에 가져오고, PCB를 생성하고 작업에 필요한 메모리를 확보
  2. CPU 스케줄러가 프로세스가 해야하는 일을 CPU에 전달하고 실제 작업을 수행한다.
    • 이때, CPU에 전달 하는 일 하나를 스레드라고 한다.
  • 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
  • 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있음
  • 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유
  • 다른 프로시저 호출, 다른 실행 기록(별도 스택 필요)
  • 관련 자원과 함께 메모리 공유 가능하므로 손상된 데이터나 스레드의 이상 동작 고려
  • 같은 프로세스의 스레드들은 동일한 주소 공간 공유

스레드의 정의

  • 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위
  • CPU 스케줄러가 CPU에 전달하는 일 하나
  • CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드
    • OS입장에서의 작업단위는 프로세스
    • CPU입장에서의 작업단위는 스레드

프로세스와 스레드의 차이

프로세스

  • 실행중인 프로그램이 디스크로부터 메모리에 적재되어 CPU의 할당을 받은 것을 말함

스레드

  • 스레드는 프로세스의 실행 단위라고 할 수 있습니다.

  • 한 프로세스 내에서 동작되는 여러 실행 흐름으로프로세스 내의 주소 공안이나 자원을 공유할 수 있습니다.

  • 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 구성됩니다.

  • 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유합니다.

스레드 병렬 수행

  • 프로세스 하나에 포함된 스레드들은 공동의 목적 달성을 위해 병렬 수행
  • 프로세스가 하나인 서로 다른 프로세서에서 프로그램의 다른 부분 동시 실행

스레드 병렬 수행의 이점

스레드별로 실행 환경 정보가 따로 있지만 서로 많이 공유하므로, 프로세스보다 동일한 프로세스의 스레드에 프로세서를 할당하거나 스레드 간의 문맥 교환이 훨씬 경제적

  • 사용자 응답성 증가
  • 프로세스의 자원과 메모리 공유 가능
  • 경제성 좋음
  • 다중 처리(멀티 프로세싱)로 성능과 효율 향상

스레드 관련 용어

멀티 스레드

  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것

  • 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법

  • 운영체제가 소프트웨어적으로 프로세스를 작은 단위의 스레드로 분할하여 운영하는 기법

멀티 태스킹

  • 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배정하는 기법

멀티 프로세싱

  • 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법

  • CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경으로 이는 병렬 처리에서 슈퍼 스칼라 기법과 같다.

  • 멀티 프로세싱은 하나의 컴퓨터에 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어(core)에 스레드를 배정하여 동시에 작동시키는 것

  • 네트워크로 연결된 서로 다른 컴퓨터에 여러 개의 스레드가 나누어져 협업하는 분산 시스템도 멀티 프로세싱이라 부른다.

CPU 멀티 스레드

  • 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용해 동시에 여러 스레드를 처리할 수 있도록 만든 병렬 처리 기법
  • 하드웨어적인 방법으로 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬 처리 기법

스레드 제어 블록TCB, Thread Control Block

  • 정보 저장
  • 프로세스 제어 블록은 스레드 제어 블록의 리스트
  • 스레드 간에 보호 하지 않음

TCB의 내용

  • 실행 상태
    • 프로세서 레지스터, 프로그램 카운터, 스택 포인터
  • 스케줄링 정보
    • 상태(실행, 준비, 대기), 우선순위, 프로세서 시간
  • 계정 정보
    • 스케줄링 큐용 다양한 포인터
    • 프로세스 제어 블록PCB을 포함하는 포인터

멀티스레드 구조

스레드는 멀티태스킹의 낭비 요소를 제거하기 위해 사용된다. 비슷한 일을 하는 2개의 프로세스를 만드는 대신, 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 하는 것이다.

프로세서는 크게 정적인 영역과 동적인 영역으로 구분된다.

정적인 영역은 코드 전역 데이터 파일등 프로세스가 실행되는 동안 바뀌지 않는 영역

동적인 영역은 스레드가 작업을 하면서 값이 바뀌거나 새로 만들어지거나 사라지는 영역

  • 레지스터 값, 스택, 힙 등이 있다

장점

  • 응답성 향상
  • 자원 공유
  • 효율성 향상
  • 다중 CPU 지원

단점

  • 모든 스레드가 자원을 공유하기 때문에 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미침

멀티스레드 모델

커널 스레드: 커널이 직접 생성하고 관리하는 스레드

사용자 스레드: 라이브러리에 의해 구현된 일반적인 스레드

사용자 레벨 스레드(N to 1 모델)

  • 사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결
  • 스레드 라이브러리를 이용하여 작동
    • 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없음
  • 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 됨
  • 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없음

장점

  • 이식성 높음
    • 커널에 독립적 스케줄링을 할 수 있어 모든 운영체제에 적용
  • 오버헤드 적음
    • 스케줄링, 동기화 위해 커널 호출 않으므로 커널 영역 전환 오버헤드 감소
  • 유연한 스케줄링 가능
    • 커널이 아닌 스레드 라이브러리에서 스레드 스케줄링 제어하므로 응용 프로그램에 맞게 스케줄링 가능

단점

  • 시스템의 동시성 지원하지 않음
    • 스레드가 아닌 프로세스 단위로 프로세서 할당하여 다중 처리 환경을 갖춰도 스레드 단위로 다중 처리 불가능 동일한 프로세스의 스레드 한 개 가 대기 상태가 되면 이 중 어떤 스레드도 실행 불가
  • 확장 제약이 따름
    • 커널이 한 프로세스에 속한 여러 스레드에 프로세서를 동시에 할당 할 수 없어 다중 처리 시스템에서 규모 확장 곤란
  • 스레드 간 보호 불가능
    • 스레드 간 보호에 커널의 보호 방법 사용 불가
    • 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호 가능

커널 레벨 스레드(1 to 1 모델)

  • 하나의 사용자 스레드가 하나의 커널 스레드와 연결
  • 독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있음
  • 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있음
  • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속 할 수 있음

멀티 레벨 스레드(M to N 모델)

  • 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식
  • 커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 레벨 스레드보다 유연하게 작업을 처리할 수 있음
  • 커널 레벨 스레드를 같이 사용하기 때문에 여전히 문맥 교환 시 오버헤드가 있어 사용자 레벨 스레드만큼 빠르지 않음
  • 빠르게 움직여야 하는 스레드는 사용자 레벨 스레드로 작동하고, 안정적으로 움직여야 하는 스레드는 커널 레벨 스레드로 작동

Reference

IT CookBook, 운영체제(개정3판)』, 구현회 집필, 한빛아카데미

IT CookBook, 쉽게 배우는 운영체제』, 조성호 집필, 한빛아카데미

운영체제 : 내부구조 및 설계원리 (6판)』, WILLIAM STALLINGS 저, PEARSON HALL

'OS' 카테고리의 다른 글

05. 상호배제와 동기화 [2/2]  (0) 2019.12.15
05. 상호배제와 동기화 [1/2]  (0) 2019.12.15
04. 병행 프로세스  (0) 2019.12.15
02. 프로세스  (0) 2019.12.14
01. 운영체제의 개요  (0) 2019.12.13