[CS Study : OS] 공유자원과 임계영역

Byuk_mm·2022년 7월 21일
0
post-thumbnail

컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.


✅ 공유 자원와 임계 구역

📌 공유 자원

공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일, 데이터 등의 자원이나 변수를 의미한다.
이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(race condition)라고 한다.

📌 임계 구역

임계 구역(critical section)이란 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 말한다. 즉, 임계 구역은 둘 이상의 프로세스가 동시에 접근해서는 안 되는 공유 자원(자료 구조 또는 장치)에 접근하는 코드의 일부를 말한다. 임계 구역이 영어로는 critical section인 이유는 '앞으로의 상황에 영향을 미친다는 점에서 대단히 중요한'이라는 뜻이다.

📌 생산자-소비자 문제

생산자가 데이터를 생성하여 버퍼에 저장하고, 소비자가 버퍼에서 데이터를 가져와 소비하는 과정에서 공유변수에 두개 이상의 프로세스가 동시에 참여해서 공유변수의 값이 꼬이게 되는 문제를 뜻한다.

📌 임계 구역 해결 조결

  • 상호 배제 : 한 프로세스가 임계 구역에 들어가면 다른 프로세스는 임계 구역에 들어갈 수 없다.
  • 한정 대기 : 어떤 프로세스도 무한 대기하지 않아야 한다.
  • 진행의 융통성 : 한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다.



✅ 임계 구역을 보호하기 위한 방법

📌 뮤텍스(Mutex)

뮤텍스는 자원에 대한 접근을 동기화하기 위해 사용되는 상호 배제 기술이다.
뮤텍스는 Locking 메커니즘으로 락을 걸은 쓰레드만이 임계 영역을 나갈 때 락을 해제할 수 있습니다. 뮤텍스는 wait와 signal이라는 원자적 연산을 사용합니다.
뮤텍스 구현 알고리즘으로는 데커, 피터슨 알고리즘이 존재한다.

📌 스핀락(Spin lock)

기본적으로 뮤텍스와 동일하나, 임계 구역에 진입이 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도하는 방식으로 구현된 락을 가리킨다. 임계 구역 진입 전까지 루프를 계속 돌고 있기 때문에 busy waiting이 발생한다.

📌 세마포어(Semaphore)

세마 포어란 카운팅 변수로 접근 가능한 공유 자원을 표기(시그널링 기법)하여 공유 자원이 1개 이상인 경우 상호 배제 원리를 보장하는 접근 제어 알고리즘이다.
세마포어는 공유 자원에 1개 이상의 스레드가 접근할 수 있으며 접근 스레드의 수에 한계를 두는 방식을 사용한다.

다음 3가지 함수가 필수적으로 사용된다.
1. Semaphore(n): 전역 변수 RS를 n으로 초기화한다. RS에는 현재 사용 가능한 자원의 수가 저장된다.
2. P() : 잠금을 수행하는 코드로, RS가 0보다 크면(사용 가능한 자원이 있으면) 1만큼 감소시키고, 임계구역에 진입한다. 만약 RS가 0보다 작으면(사용 가능한 자원이 없으면) 0보다 커질 때까지 기다린다.
3. V() : 잠금 해제와 동기화를 같이 수행하는 코드로, RS 값을 1 증가시키고 기다리고 있는 프로세스에게 임계구역에 진입해도 좋다는 wake_up 신호를 보낸다.

📌 뮤텍스와 세마포어의 차이

  • 가장 큰 차이점은 동기화 대상의 갯수이다. 뮤텍스는 동기화 대상이 오직 1개일 때 사용하고,
    세마포어는 동기화 대상이 1개 이상일 때 사용한다.
  • 0과 1로 이루어진 바이너리 세마포어는 뮤텍스가 될 수 있다. 하지만 뮤텍스는 세마포어가 될 수 없다.
  • 뮤텍스는 소유하고 있는 프로세스/스레드만이 lock을 해제할 수 있다.



✅ 참고

도서 : 쉽게 배우는 운영체제
https://yoongrammer.tistory.com/63
https://murphymoon.tistory.com/m/entry/%EC%9E%84%EA%B3%84%EA%B5%AC%EC%97%AD%EC%9D%84-%EB%B3%B4%ED%98%B8%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EA%B8%B0%EB%B2%95-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-%EB%A9%B4%EC%A0%91%EC%A7%88%EB%AC%B8-6
https://chelseashin.tistory.com/40

profile
어디야 벽벽 / 블로그 이전 -> byuk.dev

0개의 댓글