[CS] 멀티스레딩의 이해: 공유자원 관리와 교착상태

최지나·2023년 12월 22일
2

CS

목록 보기
34/55

공유자원과 경쟁 상태, 임계영역

공유자원

  • 시스템 내에서 여러 프로세스나 스레드가 함께 접근할 수 있는 자원. 메모리, 파일, 데이터 등을 포함

경쟁 상태

  • 두 개 이상의 프로세스나 스레드가 동시에 공유자원을 읽거나 쓸 때 발생하는 상태. 접근 타이밍에 따라 결과가 달라질 수 있음

임계 영역

  • 공유자원에 접근하는 코드 영역. 한 번에 하나의 프로세스나 스레드만이 접근할 수 있어야 한다. 이는 데이터의 일관성(정합성)과 무결성을 보장하는데 중요

데이터 정합성, 데이터 무결성

  • 데이터 정합성 : 시스템의 모든 데이터가 일관되게 유지되어야 한다
  • 데이터 무결성 : 정확하고 일관적인 데이터. 신뢰성을 유지하는 데이터 ex 전화번호 필드의 유효성 검사

뮤택스, 세마포어, 모니터

상호배제(한 프로세스가 임계영역에 들어가면 다른 프로세스는 못들어감), 한정대기(어떤 프로세스도 무한정 기다리지 않고 자원에 대한 접근 권한을 얻을 수 있어야 한다. 프로세스가 자원을 요청하고 받기까지의 대기시간은 한정됨), 진행의 융통성 (사용 가능한 자원에 대해 대기중인 프로세스들이 있다면, 그중 하나는 반드시 자원을 할당받아 진행할 수 있어야 한다)를 만족시켜 경쟁상태를 해결

뮤택스(Mutex)

  • 공유자원에 대한 접근을 제어하기 위해 잠금(lock)과 잠금 해제(unlock) 매커니즘을 사용. 한 시점에 하나의 프로세스나 스레드만이 임계 영역에 접근 가능

세마포어 (Semaphore)

  • 정수 카운터를 이용하여 여러 프로세스나 스레드가 공유 자원에 접근할 수 있도록 한다. wait()signal()을 통해 자원의 접근을 관리. 바이너리 세마포어(한 번에 공유 자원에 접근 가능한 프로세스나 스레드 수 최대 1개)와 카운팅 세마포어 존재

모니터 (Monitor)

  • 공유자원에 대한 접근을 인터페이스를 통해 관리. 한 번에 하나의 프로세스만 이 공유자원에 접근할 수 있으며 상호 배제가 자동으로 보장

교착상태 (deadlock)

여러 프로세스가 서로 다른 프로세스가 가진 자원을 기다리면서 중단된 상태

교착상태의 원인

  • 상호배제(하나의 프로세스만 자원 독점), 점유 대기(자원을 다른 프로세스에 요청하며 대기중), 비선점(다른 프로세스의 자원을 강제로 못가져옴), 환형대기(프로세스들이 서로의 자원을 요구) 4가지의 조건이 모두 충족되면 발생할 수도 있다.

교착 상태의 해결

  • 자원 할당을 설계 단계에서 교착 상태가 발생하지 않도록 하거나, 은행원 알고리즘을 사용하여 안정상태에서만 자원을 할당
  • 교착 상태 발생 시 사이클을 찾아 관련 프로세스를 제거하거나, 교착 상태를 무시하고 사용자가 작업을 종료 (ex 프로세스 실행 중에 '응답없음'뜨면 프로세스 종료)

은행원 알고리즘

  • 교착 상태를 회피
  • 교착 상태를 회피하기 위한 알고리즘으로, 총 자원과 할당된 자원을 기반으로 안전 상태와 불안정 상태를 구분. 프로세스가 자원을 요청할 때 시스템이 안전 상태 (프로세스가 최대로 요구하는 양보다 사용할 수 있는 자원이 더 많은 상태)
  • 단점: 프로세스의 최대 자원 요구량 예측 어려움, 자원 소모량 증가, 프로그램의 수 지속적 변화

REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글