운영체제 - Concurrency

eucartio·2024년 6월 12일

운영체제

목록 보기
17/19

Thread

  • 단일 실행 Process에 대한 추상화
  • Program을 여러 수행 단위로 나누어서 실행 가능할 때, 하나의 수행 단위Thread라고 한다.

Example

Multi-Threaded Process

  • Thread는 일종의 경량 Process이다.
    ⠀⠀
  • Process는 두 개 이상의 Thread를 갖는다.
    • Thread가 하나라면 Single-Threaded Process이다.
    • Context Switching Unit은 Thread이다.
    • 각 Thread마다 실행 상태가 존재한다. (PC, Register, Stack)
      ⠀⠀
  • 실행 Thread 변환 시 (T1 → T2)
    • T1의 실행 상태는 TCB에 복사된다.
    • T2의 실행 상태를 TCB에서 불러온다.
    • TCB = Thread Control Block
    • Address Space는 동일하게 유지된다.

Address Space of Multi-Threaded Process

  • Process의 모든 Thread는 주소 공간을 공유한다.
    • 각 Thread마다 자신의 Stack이 존재한다.

  • Process 생성 (Single-Threaded Process)
    → Child Process는 Parent Process의 모든 Address Space를 복사한다.
    ⠀⠀
  • Thread 생성 (Multi-Threaded Process)
    Program Code, Heap은 공유하고 Stack만 새로 할당한다.

PCB VS TCB

Why Use Multi-Threaded Process

  • 뛰어난 성능
    • Process는 여러 개의 CPU를 통해 실행될 수 있다.
    • I/O와 계산 작업은 동시에 수행될 수 있다.

  • Parallelism → 동시에 하나의 Process 내의 여러 Thread를 수행
  • Overlap → I/O나 계산 작업을 하여 CPU를 사용하지 않을 때 다른 Thread를 수행

Problem 1

  • 실행 순서는 OS Scheduler에 의해 비결정적으로 결정된다.
    • 어느 순간에 어떤 Thread가 실행될 지 알기 어렵다.
    • Debug하기 힘들다.

Problem 2

  • 여러 Thread가 공유 데이터를 동시에 최신화 하는 경우
    • 비결정적 실행 순서로 인해 결과를 예측할 수 없다.

  • 여러 Thread가 Critical Section에 들어가 공유 데이터를 최신화 한다.
    • 두 Thread(T1, T2)와 하나의 전역 변수 (counter 0x8049a1c)
    • 두 Thread는 동일한 코드를 실행한다.

  • 실행할 때마다 달라지는 불확실한 결과
    • 두 개의 Thread를 실행한 후 Counter의 값은 "+2"로 예상된다.

Critical Section

  • 두 개 이상의 Thread에 의해 수행되어서는 안되는 코드 영역
    • Critical Section을 실행하는 여러 Thread로 인해 문제가 발생할 수 있다.
    • Critical Section에 대한 Atomicity를 지원해야 한다.
      • Atomicity는 어떤 작업이나 연산이 더 이상 나눌 수 없는 단위로 수행된다는 것을 의미한다.

Solution: Super Instruction

  • Hardware는 명령어가 분리되지 않고 실행되게끔 해야한다.

  • 좌측의 세 가지 명령을 XADD 명령어 (Super Instruction) 하나로 수행 → 중단되지 않고 진행

0개의 댓글