CS/운영체제

[운영체제] KOCW 반효경 교수님 강의 - 11. Process Synchronization 1

pythaac 2022. 5. 3. 00:06

 

  • Race Condition
    • 보통 데이터를 읽으면 -> 연산 처리를 마치고 -> 다시 데이터를 저장
    • 그런데 연산을 처리하는 동안 그 값을 다른 누군가 가져가서 다른 연산 -> 문제가 발생할 수 있음
    • 이렇게 데이터에 동시에 접근하여 문제를 발생시킬 수 있는 상황을 race condition이라고 함
  • Race condition이 발생하는 환경
    • Race condition이 발생할 것 같지 않음
      • CPU가 1개면 메모리 접근을 혼자서 함
      • 프로세스는 자신의 메모리 영역만 접근
    • CPU가 여러 개인 시스템
      • 메모리에서 한 CPU가 데이터를 가져가서 처리중
      • 다른 CPU가 그 데이터(메모리)에 접근하여 다른 연산 처리
    • 공유 메모리 (커널 데이터)
      • 한 프로세스가 시스템 콜을 호출하여 커널모드에서 동작
      • 커널모드에서 동작한다는 것은 커널 데이터에 접근한다는 것
      • CPU가 다른 프로세스에게 점유되어 또 시스템 콜로 커널 데이터에 접근
      • race condition -> 대부분 커널모드에서 발생한다고 함

 

운영체제에서 race condition이 발생하는 상황

  • 커널모드에서 수행 중 인터럽트 발생
    - 해결 방법 : 인터럽트 disable -> 수행 중인 작업 완료 -> 인터럽트 enable

 

  • 커널모드 수행 중 Context switching 후 커널모드 진입
    - 해결 방법 : 할당 시간이 끝났더라도, 커널모드에서 유저모드로 빠져나올 때 CPU를 빼앗음

 

  • CPU가 여러 개 있을 때 (위 방법들로 해결되지 않음)
    - 해결 방법2 : 한 CPU가 접근한 메모리에 lock
    - 해결 방법1 : 커널모드로 하나의 CPU만 접근 가능 (커널 자체에 lock)

 

  • Process Synchronization 문제
    • 공유 데이터에 동시 접근하여 데이터 불일치 문제가 발생할 수 있음
    • 사용자 프로세스 P1이 수행중 timer interrupt로 context switching이 일어나 P2가 수행되는 것은 문제가 아님
      - 1) P1과 P2가 공유 메모리를 사용하거나
      - 2) P1이 커널모드에서 수행중 P2가 커널모드를 수행할 때
      - 문제가 발생할 수 있음
  • Critical Section 문제
    • Critical section : 공유 데이터를 접근하는 코드
    • P1이 critical section을 수행하는 도중에 P2가 실행할 수 없게 해야함