반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

공유 자원과 임계 영역, 교착 상태 본문

CS/운영체제

공유 자원과 임계 영역, 교착 상태

5_hyun 2022. 12. 24. 02:09

공유 자원(shared resource)

공유 자원프로세스, 스레드가 같이 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 같은 자원을 의미한다. 

경쟁 상태(race condition)는 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 사용하는 상황을 말한다.

ex) 공유 자원 item = 1이 있고 A 프로세스가 item에 2를 더하고 B 프로세스는 3을 더했다. 만약 여기서 A와 B가 같이 item을 읽고 A가 먼저 2를 더해주고 늦게 B가 3을 더하면 item은 4가된다. 옳바른 답은 6(1+2+3)이 나와야하는데 타이밍이 꼬여서 잘못된 값이 나온 것이다.

임계 영역(critical section)

임계 영역공유 자원에 접근하는 순서 같은 이유로 결과가 달라지는 영을 말한다. 임계 영역을 해결하기 위한 방법은 뮤텍스, 세마포어, 모니터가 있고 3개 모두 상호 배제, 한정 대기, 융통성이란 조건을 만족한다. 상호 배제, 한정 대기, 융통성 모두 잠금(lock)을 활동한다.

ex) 화장실이 임계 영역이면 어떤 사람이 들어갔을 때 화장실 문을 잠그고 사용하는 것과 같은 것이다.

 

-상호 배제

임계 영역에 프로세스가 있다면 다른 프로세스는 들어갈 수 없다.

 

-한정 대기

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

 

-융통성

한 프로세스가 다른 프로세스의 일을 방해하면 안된다.

뮤텍스(mutex)

뮤텍스공유 자원을 사용하기 전에 설정하고 사용한 후에는 해제하는 잠금이다. 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에 접근할 수 없다. 뮤텍스는 "잠금" 혹은 "잠금 해제" 2개의 상태만 가진다.

세마포어(semaphore)

뮤텍스가 일반화된 것세마포어이다. 

wait(): 자신의 차례가 올 때까지 기다리는 함수

signal(): 다음 프로세스로 순서를 넘겨주는 함수

 

프로세스가 공유 자원에 접근하면 세마포어에서 wait() 함수를 수행한다. 그리고 프로세스가 공유 자원을 다 사용해서 해제하면 세마포어에서 signal() 작업을 수행한다. 세마포어에는 조건 변수가 없고 한 프로세스가 세마포어 값을 수정하고 있으면 다른 세마포어는 값을 수정할 수 없다.

 

-바이너리 세마포어(바이너리)

바이너리 세마포어는 0, 1만 가질 수 있는 세마포어이다. 뮤텍스를 바이너리 세마포어라고 할 수 있다. 

하지만 뮤텍스는 리소스에 대한 접근을 동기화하는 잠금 메커니즘이고, 세마포어는 신호를 이용해서 상호 배제가 일어나는 신호 메커니즘이다.

 

-카운팅 세마포어

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

모니터

모니터2개 이상의 프로세스, 스레드가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 한 접근에 대해 인터페이스만 제공한다. 모니터는 모니터큐를 통해 공유 자원에 대한 작업을 순차 처리한다.

모니터는 세마포어보다 구현하기 쉽다. 모니터는 상호 배제가 자동으로 되지만 세마포어는 상호 배제를 명시적으로 구현해야한다.

교착상태(deadlock)

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

교착 상태의 원인

1. 상호 배제

한 프로세스가 자원을 독점해서 다른 프로세스가 접근을 못하는 경우

 

2. 점유 대기

특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 경우

 

3. 비선점

다른 프로세스의 자원을 강제로 가져올 수 없다.

 

4. 환형 대기

프로세스 A와 B가 있는데, A는 B의 자원을 요구하고, B는 A의 자원을 요구하는 circle이 발생하는 경우

 

교착 상태는 위 4가지를 모두 충족해야 발생한다. 4가지 중 단 하나라도 충족하지 않으면 발생하지 않는다.

교착 상태 해결 방법

  • 교착 상태 예방: 교착 상태가 발생하는 4가지 조건을 무력화한다.
  • 교착 상태 회피: 교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
  • 교착 상태 검출: 자원 할당 그래프를 사용하여 교착 상태를 발견한다.
  • 교착 상태 회복: 교착 상태를 검출한 후 해결한다.

1. 자원 할당 시 조건이 성립되지 않게 설계한다.

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

3. 교착 상태가 발생하면 사이클이 발생하는지 보고 사이클에 관련된 프로세스를 하나씩 지워본다.

4. 교착 상태는 드물게 일어난다. 그렇기 때문에 현재 OS는 교착 상태를 처리하는 비용이 더 커서 사용자가 작업을 종료한다.

ex) 프로세스 실행중 "응답 없음"이라고 뜨는 경우

 

-은행원 알고리즘

총 자원의 양과 현재 할당된 자원의 양을 기준으로 안정/불안정 상태로 나눠서 안정 상태에 있도록 자원을 할당하는 알고리즘이다. 

728x90
반응형
Comments