Thread (스레드)

이유석·2022년 2월 8일
0

CS - Operating System

목록 보기
7/20

Thread


정의

  • 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
  • 프로그램(프로세스)의 실행의 단위
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.

스레드는 독립적인 작업 수행을 위해 각자의 스텍과 PC 레지스터 값을 갖고 있다.

  • 스택을 독립적으로 할당하는 이유

    • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
    • 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 가능하다는 것 이다.
    • 따라서, 독립적인 실행 흐름을 위한 최소 조건 으로 독립된 스택을 할당한다.
  • PC 레지스터를 독립적으로 할당하는 이유

    • PC 값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타나게 된다.
    • 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다.
    • 그렇기 때문에 명령어가 연속적으로 수행되지 못하고, 어느 부분까지 수행했는지 기억할 필요가 있다.
    • 따라서 PC 레지스터를 독립적으로 할당한다.

Multi-thread

정의

  • 두 개 이상의 스레드를 가지는 프로세스
  • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해 줌

장•단점

  • 장점

    • Responsiveness (응답성) : 하나의 스레드가 정지 되어도, 나머지 스레드는 계속 실행됩니다.
    • Resource Sharing (자원 공유) : 스레드들은 공유 메모리 또는, 메시지 전달 보다 더 쉽게 자원을 공유합니다.
    • Economy (경제성) : 스레드 생성 및 스레드 스위칭 이 프로세스 생성 및 문맥 전환 보다 더 저렴합니다.
    • Scalability (규모적응성) : 멀티 코어 구조에서 코어 하나당 스레드 하나씩 할당 되어 병렬로 처리됨 → 효율성 향상
  • 단점
    안전성 문제
    하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)

    Critical Section 기법을 통해 대비함
    (하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정)

모델

Many-to-One

  • 다수의 user thread : 하나의 kernel thread
  • 특정 시간에 오직 1개의 스레드만이 kernel에 존재한다.

One-to-One

  • 하나의 user thread : 하나의 kernel thread
  • 병렬 처리 가능
  • overhead 비용 증가

Many-to-Many

  • 다수의 user thread : 다수의 kernel thread
  • 스레드 동시 수행 가능
  • One-to-One 보다 비용이 저렴하다.

Thread VS Process

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

profile
https://github.com/yuseogi0218

0개의 댓글