[OS] Operating System - Thread & Concurrnecy

2024. 1. 4. 00:40CS/OS

Thread

스레드

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스 내에서 실제로 작업을 수행하는 주체이다
  • 구성
    • ThreadID
      • 스레드 고유 식별자 
      • 운영체제는 이 ID를 사용하여 각 스레드를 구별한다
    • Program Counter (PC)
      • 스레드가 현재 실행 중인 코드의 주소를 가리키는 역할
      • 스레드가 다음에 어떤 명령을 실행할지 결정하는 데 사용
    • register set
      • 스레드의 현재 작업에 필요한 데이터와 명령을 저장하는 레지스터들의 집합
      • 스레드의 현재 상태를 나타내며, 스레드 전환 시 저장 및 복원
    • stack
      • 스레드의 함수 호출, 지역 변수, 반환 주소 등을 저장하는 메모리 영역
      • 각 스레드는 독립적인 스택을 가지며, 이는 스레드 간 데이터 충돌을 방지하는 역할
  • 특징
    • 프로세스보다 생성과 관리가 더 경량화되어 있다.
      • 스레드 간의 문맥 교환이 프로세스 간의 문맥교환보다 빠르고 효율적이기 때문이다
    • 자원 공유
      • 같은 프로세스 내의 스레드들은 메모리와 자원을 공유
      • 데이터를 공유하고 통신하기 쉽게 만들지만, 동시성 관리의 필요성이 생김
    • 병렬 처리
      • 멀티코어 프로세서에서 스레드는 병렬 처리를 가능하게 하여 성능을 향상한다
      • 각 스레드는 동시에 다른 코어에서 실행 가능하다

 

 

MultiThreading - 멀티 스레딩

멀티 스레딩

  1. 클라이언트가 서버에 요청을 보냄
  2. 서버는 받은 요청을 처리하기 위해 새로운 스레드 생성
  3. 서버는 추가적인 클라이언트 요청을 계속 듣기 위해 원래 상태로 복귀

클라이언트 요청은 별도의 스레드에 의해 독립적으로 처리되며, 서버는 다른 요청을 동시에 처리할 수 있게 된다. 

--> 효율성과 응답성을 향상하는 멀티스레딩 접근방식

 

  • 장점
    • 응답성
      • 지속적인 실행이 가능해짐
      • 프로세스의 일부가 차단되어도 지속적인 실행이 가능하다
    • 자원 공유
      • 프로세스의 자원을 공유
      • 공유 메모리나 메시지 전달 방식으로 프로세스 간의 전달 방식보다 훨씬 효율적이다
    • 경제성
      • 프로세스 생성비용보다 적게 든다
      • 스레드의 전환은 콘텍스트 전환보다 오버헤드가 낮다
    • 확장성
      • 프로세스가 멀티 프로세서 아키텍처의 이점을 활용할 수 있다.

 

Multicore Programming - 멀티코어 프로그래밍

 

멀티 코어 프로그래밍

멀티코어 프로그래밍의 목적

  • Identifying tasks - 작업 식별
    • 분리 가능한 다양한 작업 영역을 찾아야 한다
  • Balance - 균형
    • 모든 작업이 동등한 가치의 일을 동일하게 수행하도록 해야 함
  • Data splitting - 데이터 분할
    • 데이터 또한 별도의 코어에서 실행될 수 있도록 나눠야 함
  • Data dependency
    • 데이터 의존성을 고려해서 작업 실행이 동기화되도록 해야 함

data / task parallelism

  • 데이터 병렬성
    • 데이터를 여러 조각으로 나눠서 각 코어가 동일한 작업을 서로 다른 데이터 조각들과 동시에 수행하도록 하는 방식
  • 작업 병렬성
    • 다른 종류의 작업을 동시에 수행할 수 있도록 데이터가 아닌 작업 단위로 코어에 할당

 

MultiThreading Models

 

스레드의 경우 두 개의 모드가 존재한다.

user / kernel

  • 유저 스레드
    • 사용자 수준의 라이브러리에서 관리되는 스레드
      • 커널 위에서 지원되며 커널의 도움 없이 관리
    • 운영체제 커널에 의해 직접적으로 인식되지 않으며, 스레드 관리 기능은 사용자 영역에서 수행
  • 커널 스레드
    • 운영체제 커널에 의해 직접 관리
    • 커널에서 해당 스레드들을 개별적으로 스케줄링
    • 멀티 프로세서 환경에서 명령 실행 지원

user and kernel thread

  • Many to One
    • 여러 개의 유저 스레드가 하나의 커널 스레드에 연결
    • 하나의 커널 스레드가 블록 되면 해당 커널에 연결된 모든 유저 스레드들도 작업을 수행할 수 없음
      • I/O작업, 시스템 호출로 인해 커널 스레드가 대기 상태가 되는 경우, 연결된 모든 유저 스레드가 실행 중지
  • One to One
    • 각 유저 스레드가 개별적인 커널 스레드에 연결
    • 병렬처리 가능하다는 장점
    • 스레드 생성에 더 많은 자원 소모 발생
  • Many to Many
    • 여러 유저 스레드를 여러 커널 스레드에 할당
    • 유연성 제공 및 블록 된 스레드가 존재하더라도 스레드의 실행을 방해하지 않음