카테고리 없음

공유 자원과 임계 영역

JUNGKEUNG 2024. 10. 13. 12:21
반응형

공유 자원(shared resource)

시스템 안에서 각 프로세스, 스레드가 함꼐 접근할 수 있는 모니터, 프린트, 메모리, 파일, 데이터 등의 자원이나 변수 등을 말한다. 이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(rac condition)라고 한다.  동시에 접근을 시도할 떄 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있는 상태 인것이다.

 

 

임계 영역(critical section) 

둘 이상의 프로레스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역을 말한다. 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어 두 가지가 있으며, 이 방법 모두 상호 배제, 한정 대기, 융통성이란 조건을 만족해야한다.

 

상호 배제
- 한 프로세스가 임계 영역에 들어갔을 떄 다른 프로세스는 들어갈 수 없다.

한정 대기
- 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 된다.

융통성
-  한 프로세스가 다른 프로세스의 일을 방해해서는 안 된다.

 

 

뮤텍스(mutex)

프로세스나 스레드가 공유 자원을 lock()을 통해 잠금 설정하고 사용한 후에는 ulock()을 통해 잠금 해제하는 객체이다. 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해체는 그와 반대이다.

 

 

세마포어(semaphore)

뮤텍스와 거의 비슷하지만 lock 과 ulock 이 아닌 0 과 1로 신호를 주고 받아서 잠긴 코드 영역에 접근할 수 없고 공유 자원에 접근하면 세마포어에서 wait() 작업을 수행하고 프로세스나 스레드가 공유자원을 해제하면 세마포어에서 signal() 작업을 수행 한다.

 

 

 

세마포어의 종류

바이너리 세미포어
0과 1의 두가지 값만 가질 수 있는 세마포어이다. 이는 신호 메커니즘으로 신호를 기반으로 일어난다.

카운팅 세마포어
이는 여러 개의 값을 가질 수 있는 세마포어이다. 여러 자원에 대한 접근을 제어하는데 사용된다.

 

모니터

이는 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유자원을 숨기고, 해당 접근에 대해 인터페이스만을 제공한다.

 

 

 

교착상태(deadlock)

두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태

 

 

 

교착상태 원인

상호 배제 : 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능하다.

점유 대기 : 특정 프로세스가 점유한 자원을다른 프로세스가 요청하는 상태

비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없다.

환형 대기 : 프로세스 A는 프로세스B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황을 말한다.

 

 

교착상태의 해결 방법

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

2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파악하는 '은행원 알고리즘' 을 사용한다.

3. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한 개씩 지운다.

4. 교착 상태는 드물게 일어나는데 만약 일어나면 사용자가 강제종료 시킨다.(ctrl+ alt + delete) 

 

은행원 알고리즘
총 자원의 양과 현재 할당한 자원의 양을 기준으로 인정 또는 불안정 상태로 나누고 안정 상태로 가도록 자원을 할당하는 알고리즘 이다.

 

 

 

 

총정리

-----------------------------------------------------------------------------------------------------------

공유자원

여러 프로세스나 스레드가 동시에 사용할 수 있는 자원

예 : 컴퓨터 메모리, 프린터, 데이터베이스 등등

 

임계영역

여러 프로세스나 스레드가 공유 자원에 접근하는 코드 부분 → 임계 영역은 한 번에 하나의 프로세스만 접근할 수 있어야함, 다른 프로세스가 동시에 접근하면 문제가 발생함

프린터의 예로 들면

  • 임계 영역: 실제로 프린터에 인쇄 명령을 보내는 코드 부분
  • 만약 두 명의 사용자가 동시에 인쇄 명령을 보내면, 인쇄 결과가 뒤죽박죽이 되거나 서로의 문서가 섞일 수 있다. 이를 방지하기 위해 한 번에 한 명만 프린터를 사용할 수 있도록 해야 함

임계 영역 문제를 해결하기 위해  상호 배제(Mutual Exclusion)라는 개념을 사용함. 이를 위해 다음과 같은 방법을 사용함

 

  1. 뮤텍스(Mutex): 하나의 프로세스만 임계 영역에 들어갈 수 있도록 보호하는 도구.
  2. 세마포어(Semaphore): 동시에 접근할 수 있는 프로세스의 수를 제어하는 신호를 사용.
    1. 2개의 프로세스가 동시에 임계영역에 접근하면 문제가 발생하는거 아닌가?
      1. 읽기 작업의 경우, 두개의 프로세스가 동시에 접근해도 문제 없음
      2. 쓰기 작업의 경우, 두개의 프로세스가 동시에 접근하면 문제가 있기 떄문에 보통, 이진 세마포어를 사용하여 상호 배제를 보장하는 것이 일반적
  3. 모니터(Monitor): 모니터는 동기화 코드 작성을 간편하게 해주는 구조적이고 자동화된 접근 방식을 제공하며, 프로그래머는 복잡한 세부 사항을 신경 쓰지 않고 공유 자원에 대한 안전한 접근을 구현할 수 있습 ( 예 : 자바의 synchronized )

 

 

뮤텍스와 이진 세마포어의 차이는?

  • 뮤텍스: 잠금을 기반으로 상호배제가 일어남
  • 이진 세마포어 : 신호를 기반으로 상호 배제가 일어남.

 

 

교착상태

여러 프로세스가 서로의 자원을 기다리느라 진행할 수 없는 상태를 말함

  • 예시 : 프로세스A가 프로세스B 가 점유하고 있는 자원을 요청할 떄, 프로세스B도 프로세스 A가 점유하고 있는 자원을 요청함. → 서로 무한 대기…
  • 교착 상태의 원인
    • 상호배제
    • 점유대기
    • 비선점
    • 환형대기
  • 해결 방법 → 교착상태 원인을 깨부심.