Study/TIL(Today I Learned)

24.06.05 복습

에린_1 2024. 6. 6. 13:02
728x90

복습

세마포어와 뮤텍스

  • 세마포어와 뮤텍스는 멀티스레딩 환경에서 동기화 문제를 해결하기 위한 도구이다.
  • 여러 스레드가 공유 자원에 동시에 접근하지 못하게 하여 데이터 일관성을 유지하고 경쟁 상태(race condition)를 방지한다.

세마포어(Semaphore)

정의

  • 세마포어는 정수 값을 사용하여 접근을 제어하는 동기화 도구이다.
  • 세마포어는 주로 두 가지 종류가 있다
    • 카운팅 세마포어
      • 임의의 정수 값을 가질 수 있으며, 공유 자원 개수를 관리한다.
    • 이진 세마포어
      • 0과 1의 값만을 가지며, 뮤텍스처럼 작동한다.

주요 연산

  • P(Wait) 연산
    • 세마포어 값을 감소시키는 연산으로, 세마포어 값이 0이면 대기 상태가 된다.
  • V(Signal) 연산
    • 세마포어 값을 증가시키는 연산으로, 대기 중인 프로세스가 있으면 깨운다.

뮤텍스(Mutex)

정의

  • 뮤텍스는 Mutual Exclusion(상호 배제)의 약자로, 공유 자원에 대한 접근을 하나의 스레드만 허용하는 동기화 도구이다.
  • 뮤텍스는 Lock(잠금)과 Unlock(잠금 해제) 두 가지 상태만 가진다.

주요 연산

  • Lock
    • 뮤텍스를 잠가서 다른 스레드가 자원에 접근하지 못하게 한다. 이미 잠겨있다면 대기 상태가 된다.
  • Unlock
    • 뮤텍스를 잠금 해제하여 다른 스레드가 자원에 접근할 수 있게 한다.

차이점

용도

  • 세마포어
    • 주로 여러 리소스를 관리하거나, 생산자-소비자 문제와 같은 복잡한 동기화에 사용된다.
  • 뮤텍스
    • 주로 하낭의 공유 자원을 보호하는 데 사용된다.

초기화 값

  • 세마포어
    • 임의의 정수 값으로 초기화할 수 있다.
  • 뮤텍스
    • 일반적으로 1로 초기화되어, 한 번에 하나의 스레드만 접근할 수 있다.

소유권

  • 세마포어
    • 특정 스레드 소유 개념이 없다. 세마포어를 잠그고 푸는 스레드가 달라도 된다.
  • 뮤텍스
    • 잠금한 스레드만 잠금을 해제할 수 있다. 소유권을 가지고 있다.

기능

  • 세마포어
    • 주로 카운터 역할을 하며, 여러 스레드가 접근할 수 있는 자원 수를 관리한다.
  • 뮤텍스
    • 상호 배제를 보장하여, 한 번에 하나의 스레드만 임계 구역에 접근할 수 있게 한다.

시스템 자원 사용

  • 세마포어
    • 커널 레벨에서 구현되어 시스템 호출을 통해 관리된다.
  • 뮤텍스
    • 사용자 수준에서도 구현될 수 있지만, 대부분 커널 수준에서 관리된다.

레이스 컨디션(Race Condition)

정의

  • 레이스 컨디션은 두 개 이상의 스레드 또는 프로세스가 동시에 공유 자원에 접근하고 이를 변경하려고 할 때 발생하는 문제이다.
  • 레이스 컨디션이 발생하면 프로그램의 동작이 예측할 수 없게 되고, 데이터 일관성이 깨질 수 있다. 이는 특히 멀티스레드 또는 멀티프로세스 환경에서 빈번하게 발생하는 문제다.

해결 방법

  • 레이스 컨디션을 방지하려면 동기화 메커니즘을 사용하여 동시에 공유 자원에 접근하지 않도록 해야 한다. 대표적인 방법으로는 뮤텍스(Mutex), 세마포어(Semaphore), 모니터(Monitor)등이 있다.

데드락(Deadlock)

정의

  • 데드락은 두 개 이상의 프로세스나 스레드가 서로가 소유한 자원을 기다리며 무한히 대기하는 상태를 말한다.
  • 이 상태에서는 어떤 작업도 진행되지 않고 시스템이 정지된 것처럼 보인다.
  • 데드락은 자원 관리와 동기화가 중요한 멀티 스레드 환경에서 특히 주의해야 할 문제이다.

데드락의 필요 조건

  1. 상호 배제(Mutual Exclusion)
    1. 자원은 한 번에 하나의 프로세스만 사용할 수 있다.
  2. 점유 대기(Hold and Wait)
    1. 최소한 하나의 프로세스가 자원을 점유하면서 다른 자원을 기다린다.
  3. 비선점(No Preemption)
    1. 프로세스가 자원을 스스로 해제할 때까지 자원을 강제로 빼앗을 수 없다.
  4. 순환 대기(Circular Wait)
    1. 자원을 기다리는 프로세스 간에 순환 대기가 존재한다. 즉, 프로세스 A가 프로세스 B가 소유한 자원을 기다리고, 프로세스 B는 프로세스 C가 소유한 자원을 기다리고, 프로세스 C는 프로세스 A가 소유한 자원을 기다리는 형태이다.

데드락의 예방과 회피

  1. 데드락 예방(Deadlock Prevention)
    1. 데드락의 필요 조건 중 하나 이상을 제거한다.
    2. 상호 배제
      1. 공유 자원을 동시에 접근할 수 있도록 한다.
    3. 점유 대기 방지
      1. 자원을 요청할 대 모든 자원을 한 번에 할당하거나, 자원을 점유하고 있는 동안 다른 자원을 요청하지 못하게 한다.
    4. 비선점
      1. 자원이 점유된 상태에서 다른 자원이 요청되면 자원을 강제로 회수한다.
    5. 순환 대기 방지
      1. 자원에 순서(순서대로 자원을 할당)를 부여하여 순환 대기를 방지한다.
  2. 데드락 회피(Deadlock Avoidance)
    1. 시스템이 안전 상태를 유지하도록 자원의 할당을 제어한다.
    2. 은행가 알고리즘(Banker’s Algorithm)
      1. 프로세스가 자원을 요청할 때, 시스템이 요청을 허락했을 때의 상태가 안전한지를 미리 검사하여 안전할 경우에만 자원을 할당한다.
  3. 데드락 탐지(Deadlock Detection)와 회복(Recovery)
    1. 시스템에서 주기적으로 데드락을 탐지하고, 발견 시 회복 작업을 수행한다.
    2. 탐지 알고리즘
      1. 자원 할당 그래프를 분석하여 순환 대기를 탐지한다.
    3. 회복 방법
      1. 데드락 상태에 있는 프로세스를 중지하거나 자원을 강제로 회수한다.

컨텍스트 스위칭(Context Switching)

정의

  • 컨텍스트 스위칭은 CPU가 한 프로세스 또는 스레드의 실행 상태를 저장하고, 다른 프로세스 또는 스레드의 실행 상태를 복원하는 과정이다.

컨텍스트 스위칭의 필요성

  • 멀티태스킹
    • 여러 프로세스나 스레드를 동시에 실행하여 CPU 자원을 효율적으로 사용하기 위해 필요하다.
  • 프로세스 우선순위
    • 운영 체제는 우선순위가 높은 작업을 먼저 처리하기 위해 컨텍스트 스위칭을 사용한다.
  • 입출력 대기
    • 프로세스가 I/O 작업을 기다리는 동안 CPU를 다른 프로세스에게 할당할 수 있도록 한다.

컨텍스트 스위칭 과정

  1. 현재 프로세스 상태 저장
    1. 현재 실행 중인 프로세스의 상태 정보를 PCB(Process Control Block)에 저장한다.
    2. 이 정보에는 CPU 레지스터, 프로그램 카운터, 메모리 관리 정보 등이 포함된다.
  2. 스케줄러 호출
    1. 운영 체제의 스케줄러가 다음 실행할 프로세스를 결정한다.
  3. 새 프로세스 상태 복원
    1. 선택된 프로세스의 상태 정보를 PCB에서 읽어와 복원한다.
  4. 프로세스 실행 재개
    1. CPU는 복원된 상태 정보를 바탕으로 새 프로세스의 실행을 재개한다.

컨텍스트 스위칭의 오버헤드

  • 컨텍스트 스위칭에는 일정한 오버헤드가 발생한다. 아래와 같은 이유로 인해 발생한다.
  • 저장 및 복원 시간
    • 프로세스 상태 정보를 저장하고 복원하는 데 시간이 소요된다.
  • 캐시 무효화
    • 컨텍스트 스위칭 시 캐시 메모리가 무효화될 수 있어 캐시 미스가 증가한다.
  • 메모리 관리 비용
    • 메모리 페이지 테이블의 변경으로 인한 추가 작업이 필요할 수 있다.

컨텍스트 스위칭의 종류

  • 프로세스 간 컨텍스트 스위칭
    • 두 개의 다른 프로세스 간의 컨텍스트 스위칭이다.
    • 프로세스의 메모리 공간이 완전히 다르기 때문에 오버헤드가 더 크다.
  • 스레드 간 컨텍스트 스위칭
    • 같은 프로세스 내의 스레드 간의 컨텍스트 스위칭이다.
    • 메모리 공간을 공유하기 때문에 오버헤드가 적다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.06.07 복습  (0) 2024.06.07
24.06.06 복습  (0) 2024.06.07
24.06.04 복습  (0) 2024.06.04
24.06.03 복습  (0) 2024.06.04
24.06.02 복습  (0) 2024.06.01