공유자원과 임계 영역

JoyJuhee·2022년 10월 5일
0

운영체제

목록 보기
6/10
post-thumbnail
post-custom-banner

1. 공유자원

공유 자원(shared resource)은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미한다.

👉 이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황경쟁 상태( race condition)라고 한다. 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있는 상태.

이와 같이 A와 B가 동시에 접근하여 타이밍 서로 꼬여 정상 결괏값은 300인데 200이 출력된다. 

2. 임계 영역

둘 이상의 프로세스 또는 스레드가 공유자원에 접근할 때 순서 등의 이유로 결과가 달라지는 '코드'영역

1) 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세 가지가 있다.
👉 모두 상호 배제, 한정 대기, 융통성이란 조건을 만족한다.

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

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

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

5) 잠금(lock) : 임계 영역을 화장실에 비유하여 A라는 사람이 문을 잠그고 나오면 그 다음 사람이 쓸 수 있다.

3. 뮤텍스와 세마포어

1) 뮤텍스

스레드가 공유 자원을 lock()을 통해 잠금설정하고 사용한 후에 unlock()을 통해 잠금해제하는 객체

👉 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 그와 반대이다. 뮤텍스는 잠금 또는 잠금해제라는 상태만 가진다.

2) 세마포어

일반화된 뮤텍스로, 간단한 정수 값과 두 가지 함수 wait(p 함수) 및 signal(v 함수)로 공유 자원에 대한 접근을 처리

👉 wait()는 자신의 차례가 올 때까지 기다리는 함수, signal()은 다음 프로세스로 순서를 넘겨주는 함수
👉 프로세스가 공유 자원에 접근하면 세마포어에서 wait 작업을 수행하고 프로세스가 공유 자원을 해제하면 signal 작업을 수행한다.

❓ 뮤텍스와 차이점 : 세마포어에는 조건변수가 없고 프로세스가 세마포어 값을 수정할 때 다른 프로세스는 동시에 세마포어 값을 수정할 수 없다. 뮤텍스는 한 개의 프로세스 또는 스레드만의 임계영역접근을 처리하지만 세마포어는 여러 개의 임계영역접근을 처리할 수 있다.

  • 바이너리 세마포어 : 0과 1의 두 가지 값만 가질 수 있는 세마포어이다.
    👉 뮤텍스와 유사해보이지만, 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 잠금 메커니즘이 들어간 객체이고, 세마포어는 신호를 기반으로 상호배제가 일어나는 신호메커니즘이 들어간 객체이다.
    ✅ 신호메커니즘은 폰으로 노래를 듣다가 친구로부터 전화가 오면 노래가 중지되고 통화 처리작업에 관한 인터페이스가 등장하는 것을 상상하면 된다.

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

4. 모니터

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

          👉 모니터큐를 통해 공유 자원에 대한 작업들을 순차적으로 처리한다. 
  • 모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면에, 세마포어에서는 상호 배제를 명시적으로 구현해야 하는 차이점이 있다.

교착 상태(deadlock)

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

👉 예를 들어 프로세스 A가 프로세스 B의 어떤 자원을 요청할 대 프로세스 B도 프로세스 A가 점유하고 있는 자원을 요청한다.

1) 원인

  • 상호 배제 : 한 프로세스가 자원을 독접하고 있으며 다른 프로세스들은 접근이 불가능하다.
  • 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
  • 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없다.
  • 환형 대기 : 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황

2) 해결방법

  • 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계
  • 교착 상태 가능성이 없을 때만 자원이 할당되며, 프로세스 당 요청할 자원들의 최대치를 통해 자원 할당가능 여부를 파악하는 '은행원 알고리즘'을 쓴다.
  • 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한개씩 지운다.
  • 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 커서 사용자가 작업을 종료한다. (현대 운영체제는 이 방법을 택함. '응답없음')

출처 : 면접을 위한 CS전공지식 노트 (책 / 강의)

post-custom-banner

0개의 댓글