Race Condition

Jungmin Lee·2021년 3월 31일
0

CS

목록 보기
1/8
post-thumbnail

gyoogle.dev 블로그IRE Days 블로그를 참고하여 작성하였습니다.
이미지를 누르면 이미지의 출처로 이동합니다.

경쟁상태

공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태

1. 발생하는 경우

1) 커널 작업 수행 중

  • 데이터를 가지고 있는 커널레벨에서 데이터를 로드하여 작업 수행 중 인터럽트가 발생하여 같은 데이터를 조작하는 경우
  • 커널모드에서 작업할 때, 인터럽트를 disable하도록 잠궈놓는다.

2) 프로세스의 커널 모드 진입 중

  • 프로세스가 시스템콜을 통해 커널모드에서 데이터를 사용하는 도중 시간초과로 cpu제어권이 다른 프로세스로 넘어가 같은 데이터 조작할 때
  • 커널모드에서 프로세스가 작업 시 시간초과상황에도 cpu제어권 넘어가지 않도록 한다.

3)멀티 프로세서 환경에서

  • 멀티 프로세서 환경에서 cpu 여러개가 동시에 공유데이터에 접근해 조작하는경우
  • 공유 데이터 접근에 따른 데이터 잠금/해제 이용

2. 제어문제

1) Mutual exclusion(상호배제)

  • 두개 이상의 프로세스가 공용 데이터에 동시접근을 막아 해결한다.

2) Deadlock

  • 상호배제를 이용하면 교착상태 발생할 수 있다.
  • 프로세스가 두 자원을 필요로 할때 새로운 것을 사용할 수 있을때까지 지금 사용한 것을 해제하지 않는 것이다.
  • 두개가 자기것을 놓지않고있어 교착상태가 발생한다.

3) Starvation

  • 프로세스들이 더 이상 진행을 하지 못하고 영구적으로 블록되어 있는 상태
  • 경쟁에 밀려서 발생
  • race condition연 경우 스레드 실행순서 조절이 필요

3. 예방방법

임계구역(critical section)
여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

1) Semaphore

  • 멀티 프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
  • 리소스의 상태를 나타내는 간단한 카운터
  • 비교적 긴 시간을 확보하는 리소스에 대해 이용
  • 단점: Busy Waiting
    • 임계영역에 진입하기 위해 프로세서는 진입코드를 반복실행해 cpu낭비가 일어난다.
    • 임계영역 진입 시도했지만 실패한 경우 블록-> 자리가 날때 깨우는 방식으로 문제해결

2) Mutax

  • Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술
  • 공유 리소스에 대한 접근을 조율하기 위해 locking과 unloking을 사용
  • semaphore 와의 차이는 칸 수이다.

semaphore & mutax알고리즘 참고 자료

profile
금융 도메인과 개발 지식을 함께 쌓아가는 주니어 개발자입니다😊

0개의 댓글