[OS] 스레드 Thread

뚜비·2023년 6월 9일
0

OS

목록 보기
4/4

스레드와 멀티스레딩

스레드

  • 프로세스의 실행 가능한 가장 작은 단위
  • 프로세스는 여러 스레드를 가질 수 있음

    스레드는 코드, 데이터, 힙은 서로 공유하고 스택과 같은 그 이외의 영역은 각각 생성

멀티스레딩

  • 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법
  • 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.
    EX) 웹 요청 처리 : 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비
  • 중단되지 않은 빠른 처리가 가능
    한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running) 상태일 수 있음
  • 동시성에 큰 장점

    🤔 동시성?
    서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것

  • 한 스레드에 문제가 생기면 다른 스레드에 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있다는 단점이 있음

🤔예시 웹 브라우저의 Renderer Process
메인 스레드, 워커 스레드, 컴포지터 스레드, 레스터 스레드 존재



공유 자원과 임계 영역

공유 자원(shared resource)

  • 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 자원이나 변수 등
    EX) 모니터, 프린터, 메묄, 파일, 데이터 등
  • 경쟁 상태(race condition)
    : 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황
    : 동시에 접근을 시도할 때 접근 타이밍 혹은 순서 등이 결과에 영향을 줄 수 있는 상태

임계 영역(critical section)

  • 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역
  • 해결방법
    : 1. 뮤텍스, 2. 세마포어, 3.모니터
    : 모두 상호 배제, 한정 대기, 융통성 조건 만족
    : 메커니즘 == 잠금(lock) EX) 화장실

🤔잠깐

  • 상호배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다
  • 한정 대기 : 특정 프로세스가 영원히 임께 영역에 들어가지 못하면 안 된다.
  • 융통성 : 한 프로세스가 다른 프로세스의 일을 방해해서는 안 된다.

뮤텍스(mutex)

  • 공유 자원을 사용하기 전에 설정하고 사용한 후 해제하는 잠금
  • 잠금 설정 시 다른 스레드는 잠긴 코드 영역에 접근할 수 없음
  • 하나의 상태(잠금 or 잠금해제)만 가짐
  • 동기화 대상이 하나일 때

세마포어(semaphore)

  • 일반화된 뮤텍스
  • 간단한 정수 값과 두 가지 함수 wait(P함수) 및 signal(V 함수)로 공유 자원 접근 처리
  • wait() : 자신의 차례가 올 때까지 기다리는 함수, 프로세스가 공유 자원에 접근시 세마포어는 wiat() 작업 수행
    signal() : 다음 프로세스로 순서를 넘겨주는 함수, 프로세스가 공유 자원을 해제시 세마포어는 signal() 작업 수행
  • 동기화 대상이 하나 이상일 때
  • 바이너리 세마포어
    : 0과 1의 두 가지 값만 가질 수 있는 세마포어
    : 뮤텍스가 바이너리 세마포어라고 할 수 있음
  • 카운팅 세마포어
    : 여러 개의 값을 가질 수 있는 세마포어, 여러 자원에 대한 접근을 제어하는 데 사용

뮤텍스 vs 세마포어
뮤텍스는 리소스에 대한 접근을 동기화하는 데 사용되는 잠금 메커니즘,
세마포어는 신호를 기반으로 상호 배제가 일어나는 신호 메커니즘


모니터(monitor)

  • 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 잇도록 공유자원을 숨기고 해당 접근에 대해 인터페이스만 제공
  • 모니터 큐를 통해 공유 자원에 대한 작업을 순차적으로 처리
  • 모니터는 상호 배제가 자동인 반면 세마포어에서는 상호 배제를 명시적으로 구현해야 함


교착 상태(deadlock)


두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태
예를 들어 프로세스 1이 프로세스 2의 어떤 자원을 요청할 때 프로세스 2도 프로세스 1이 점유하고 잇는 자원을 요청


원인

  1. 상호 배제 : 한 프로세스가 자원 독점 시 다른 프로세스 접근 불가
  2. 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
  3. 비선점 : 다른 프로세스 자원 강제로 가져올 수 없음
  4. 환형 대기 : 프로세스 1은 프로세스 2의 자원 요구, 프로세스2는 프로세스 1의 자원 요구 즉, 서로가 서로의 자원을 요구하는 상황

해결 방법

  1. 자원 할당 시 애초에 조건이 성립되지 않도록 설계

  2. 교착 상태 가능성 없을 때 자원 할당, 은행원 알고리즘 사용

    은행원 알고리즘
    총 자원의 양과 현재 할당된 자원의 양을 기준으로 안정, 불안정 상태로 나누고 안정 상태로 가도록 자원 할당

  3. 교착 상태 발생 시 사이클 확인, 관련 프로세스 제거

  4. 교착 상태 발생 시 사용자가 작업 종료 (현재 운영체제의 방법, 교착 상태를 처리하는 비용이 더 크기 때문 )


참고자료

면접을 위한 CS 전공지식노트
operating system concepts 10th
[운영체제] Mutex 뮤텍스와 Semaphore 세마포어의 차이
Mutex vs Semaphore

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글