포스트

[OS] 공유 자원

1. 공유 자원

  • 공유 자원이란?
    • 하나를 두고 여럿이 쓰는 것
      • 다중 프로그래밍에서는 CPU도 공유 자원임
    • 여러 프로세스/스레드가 공동으로 이용하는 변수, 메모리, 파일 등
      • 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있음

1.1. 공유 자원 접근의 문제점

1.1. 공유 자원 접근의 문제점 공유 자원의 접근

  • 다중 프로그래밍에서 이처럼 공유 자원에 접근하면 연산이 잘못될 수 있음(최종 결과는 25만원이 되어야 하는데 20만원이 되어버림)

1.2. 문제점의 발생 원인

  • 명령어 처리 중에 스케줄링(ex: timeout 등)이 되면 부득이하게 명령어가 분리됨
  • 예: 두 스레드가 공유자원 ‘sum’에다가 10을 더하는 경우

1.2. 문제점의 발생 원인

1.3. Race condition(경쟁 상태)

  • 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
  • 경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있음
  • 데이터가 오염됨 (Corrupted)
  • 밀티스레드 환경에서 매우매우 자주 발생함 (심지어 커널에서도)

2. Synchronization(동기화)

  • 공유 자원 접근시 발생하는 문제점(공유데이터의 훼손)에 대한 해결책
  • 공유 데이터에 접근하고자 하는 다수의 프로세스 또는 스레드가 충돌없이 공유 데이터에 접근하기 위해 상호 협력하는 것
    • 한 프로세스/스레드가 공유 데이터를 배타적 독점적으로 접근한다.
    • 동시에 접근하는 것이 아닌 차례대로, 순서대로 접근
    • 좁은 의미의 스케줄링

2. Synchronization P1이 작업하는 동안 다른 프로세스의 접근을 막는다.

2.1. 상호 배제

  • 위와 같이 다른 프로세스의 접근을 막는 작업
  • 임계영역: 상호배제가 필요한/적용된 구간

2.1.1. Critical section

  • 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
    • == 공유 자원에 접근하는 프로그램 코드 영역
    • == Shared data가 있는 영역
  • Shared data == Critical data

2.1.2. Mutual exclusion

  • 임계구역이 오직 한 프로세스만 배타적 독점적으로 사용되도록 하는 기술
  • 임계구역에 먼저 진입한 스레드가 임계구역의 실행을 끝낼 때까지 다른 프로세스가 진입하지 못하도록 보장
  • 어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있음

2.2. Thread-safe

  • 상호 배제, Mutual exclusion과 같은 작업이 잘 적용된 함수를 thread-safe하다고 표현한다.
이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.