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
소통을 중요하게 여기며, 정보의 공유를 통해 완전한 학습을 이루어 냅니다.

0개의 댓글