티스토리 뷰

● 공유자원

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 프로세스 간 통신을 할 때 공동으로 이용하는 변수나 파일들이 있는데 이런 것들을 공유자원이라고 한다.
- 공유자원은 여러 프로세스들이 공유하기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질 수 있다.
- 또한 컨텍스트 스위칭으로 시분할 처리를 하기 때문에 프로세스 실행 순서를 예측하기가 힘들다.
(실행 순서는 OS에 의해 결정되기 때문이다.)
- 즉, 연산 결과를 예측하기 힘들기에 문제가 발생할 수도 있는데 이러한 문제를 동기화 문제라고 한다.


ex)

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 게임에서 현재 플레이어의 체력이 20 남았고 몬스터에게 공격을 당하는 상황이다.
- 플레이어는 죽지 않기 위해 체력 회복 물약을 먹었다.
- 이때 물약을 먹는 코드와 몬스터에게 공격을 받는 코드에서 발생할 수 있는 동기화 문제를 알아보자
 
1. 물약을 먹는 코드와 몬스터에게 공격을 받는 코드가 동시에 실행됐다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 
2. CPU 스케줄에 의해 공격받는 코드가 먼저 실행됐다.
- 2번 라인의 코드가 실행되어 currentHealth 변수에 20이 할당된다.(20 = 현재 플레이어의 체력)

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 
3. 이때 컨텍스트 스위칭이 발생해 물약을 먹는 코드가 실행된다.
- 물약 코드의 2번 라인이 실행되면서 currentHealth 변수에 20이 할당된다.
- 3번 라인이 실행되어 health 변수를 70으로 변경한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제
출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 
4. 다시 컨텍스트 스위칭이 발생해 공격을 받는 코드가 실행된다.(3번 라인부터 실행)
- 현재 공격을 받는 코드의 (currentHealth = 20)이기에 3번 라인이 실행되면 (health = 10)으로 변경된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 
- 논리적으로 따지면 물약을 먹은 후 공격을 받아(or 공격을 받은 후 물약을 먹어) (health = 60)이 돼야 하는데 (health = 10)이라는 엉뚱한 값이 되버린 것이다.
- 오류가 발생한 이유는 health 라는 공유자원을 여러 프로세스들이 동시에 사용했기 때문이다.


● 임계구역
- 이러한 문제를 방지하기 위해 여러 프로세스가 동시에 사용하면 안되는 영역을 정의했는데 이를 임계구역(Critical Section)이라고 한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 공유자원을 서로 사용하기 위해 경쟁하는 것을 경쟁조건(Rase Condition)이라고 한다.
- 임계구역에서 발생하는 문제를 해결하기 위해서는 상호 배제(Mutual Exclusion) 메커니즘이 필요하며 해당 메커니즘에 대한 조건은 아래와 같다.(해결 방법은 다음 글에)

상호 배제 메커니즘 요구사항 3가지
1. 임계영역엔 동시에 하나의 프로세스만 접근한다.(주어진 시간에 항상 하나의 프로세스만 임계구역에 접근)
2. 여러 요청에도 하나의 프로세스의 접근만 허용한다.(동시에 여러 요청이 있어도 하나의 프로세스만 진입 허용)
3. 임계구역에 들어간 프로세스는 최대한 빠르게 나와야한다.(그렇지 않으면 다른 프로세스들이 오래 기다려야한다.)

 
https://ko.wikipedia.org/wiki/%EC%83%81%ED%98%B8_%EB%B0%B0%EC%A0%9C

상호 배제 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 두 개의 노드 i와 i + 1이 동시에 제거되면 노드 i + 1은 제거되지 않는다. 상호 배제(相互排除, mutual exclusion, Mutex, 뮤텍스)는 동시 프로그래밍에서 공유 불가능한

ko.wikipedia.org

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함