공유자원 & 임계구역

이태곤·2023년 9월 4일
0

Operating System

목록 보기
10/13
post-thumbnail

1. 공유자원과 임계구역

  • 공유자원 (Shared Resource): 여러 프로세스 또는 스레드가 함께 접근할 수 있는 메모리, 코드, 변수 등의 자원을 의미

  • 경쟁상태 (Race Condition): 둘 이상의 프로세스나 스레드가 공유자원에 동시에 접근하여 읽거나 쓰는 현상
    → 순서나 타이밍에 따라 결과 값에 영향을 줄 수 있으며, 예상치 못한 동작을 초래할 수 있으므로 경쟁 상태를 해결해야 한다.

  • 임계구역 (Critical Section): 공유자원에 접근하는 코드 영역 중에서 경쟁 상태가 발생할 수 있는 부분
    → 임계구역에서 race condition이 발생할 수 있으며, 여러 프로세스나 스레드가 동시에 접근하지 못하도록 설계해야 한다.

  • 예시

    1. 두 개의 프로세스가 {num : 1000} 이라는 Json 파일에 접근해서 -1000원 동작 후 파일을 쓰기
    2. 파일 쓰기에 3초가 걸린다.
      → 두 개의 프로세스스가 동시에 임계구역에 접근하여 경쟁상태가 발생해서, 결과값으로 1000원이 아닌 0이 나오게 된다.
  • 경쟁 상태 관리의 중요성

    1. 데이터 정합성: 예상되는 데이터의 값과 실제로 저장된 데이터의 값이 일치해야 함
      • 두 개의 프로세스가 동시에 잔고에서 1000원을 인출하려고 시도할 때, 경쟁 상태가 발생하면 두 번째로 접근하는 프로세스는 0이 아닌 1000원을 읽을 수 있으며, 이로 인해 데이터 정합성이 깨질 수 있다.
    2. 데이터 무결성: 데이터의 규칙을 위반하지 않아야 함
      • 프로세스의 접근 타이밍에 따라 0원일 때에도 출금이 가능하다면 데이터 무결성이 위반된다.

0개의 댓글