본문 바로가기
개발일지/Computer Science

경합 조건, 공유 자원

2022. 2. 22.

경합조건(Race Condition)이란?

다중 프로그래밍 시스템이나 다중 처리기 시스템에서 두 명령어(이상)가 동시에 같은 기억 장소를 엑세스할 때 그들 사이의 경쟁에 의해 수행 결과를 예측할 수 없게 되는 것 이와 같은 현상은 바람직하지 않으므로 운영 체제는 이것을 해소할 수 있어야 한다.

 

즉, 두 가지 이상의 명령어가 실행되는 순서를 명확하게 정해주지 않아서 어떤 명령어가 먼저 실행될 지 몰라서 그 결과를 알 수 없게 되는 것이라는 뜻이다.

 

 

 

올바른 결과

 프로그램1 프로그램2    잔고
    100만 원
100만 원 read   100만 원
read한 값에 10만 원 더함   100만 원
110만 원 write   110만 원
  110만 원 read 110만 원
  read한 값에 50만 원 더함 110만 원
  160만 원 write 160만 원

 

잘못된 결과

프로그램1 프로그램2 잔고
    100만 원
100만 원 read   100만 원
read한 값에 10만 원 더함   100만 원
  100만 원 read 100만 원
  read한 값에 50만 원 더함 100만 원
110만 원 write   110만 원
  150만 원 write 150만 원

 


임계영역

이처럼 통장에 동시에 접근하게 되면 곤란한 문제가 생길 수 있다. 통장에 아무나 접근하지 못하게 보호를 해야 한다.

통장처럼 보호되어야 하는 부분 Critical Section(임계영역)이라고 합니다.


경합 조건 ( Race Condition ) 해결을 위한 충족 조건 3가지

Mutual Exclusion (상호 배제)

어떤 프로세스가 임계 영역을 수행 중이면 다른 모든 프로세스들은 그 임계 영역에 들어가지 못하게 막는 것이다.

 

Progress(진행)

임계 영역에 들어간 프로세스가 있지 않은 상태에서 임계 영역에 들어가려는 프로세스가 있으면 들어가게 해주어야 한다. 즉, 임계영역에 있는 프로세스 외에는 다른 프로세스가 임계 영역에 진입하는 것을 방해하면 안된다.

 

Bounded Waiting(한정 대기)

기아(starvation) 상태를 방지하기 위해 프로세스가 임계 영역에 들어가려고 요청한 후부터 다른 프로세스들이 임계 영역에 들어가는 횟수에 한계가 있어야 한다. 임계 영역에 한 번 들어갔다 나온 프로세스는 다음에 들어갈 떄 제한을 준다.

 


Starvation(기아 상태)

특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 말한다.

Deadlock vs Starvation

  • 교착상태 : 여러 프로세스가 동일 자원 점유를 요청할 때 발생
  • 기아상태 : 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생

 

공유 자원

  • 자원은 어떤 것이든 공유될 수 있으며, 메모리가 아닌 경우에도 메모리 자원이 공유 자원으로 사용된 경우가 많음.
  • 프린터의 경우도 공유 자원으로 사용될 수 있다. USB로 연결된 경우, 경합 조건을 발생시키지 않기 위해 운영체제가 사용자 프로그램 대신 I/O 자원을 처리한다

 

 

 

https://velog.io/@sinclebear/12%EC%9E%A5.-%EA%B2%BD%ED%95%A9-%EC%A1%B0%EA%B1%B4%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B3%B5%EC%9C%A0-%EC%9E%90%EC%9B%90

 

12장. 경합 조건이란 무엇인가 ~ 공유 자원

한 권으로 읽는 컴퓨터 구조와 프로그래밍 도서의 내용 12장 병렬성과 비동기성 - 경합 조건이란 무엇인가 ~ 공유 자원 (p.465 ~ 467) 내용을 읽고 정리한 내용입니다.

velog.io

https://zangzangs.tistory.com/115?category=458016

 

[OS] Race Condition 경쟁상태란?

(Race Condition) 경쟁상태란? Race Condition? Race Condition이란 두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근하기 위해 경쟁하는 상태를 말합니다. Critical Section(임계..

zangzangs.tistory.com