[OS] Concurrency

정민경·2023년 4월 25일
0

Operating_System

목록 보기
5/8
post-thumbnail

- Objection

  1. Concurrency Control 의 개념
  2. Race Condition

1) Concurrency Control 의 개념

  • Concurrency
    • thread 들 사이의 충돌
      -> single thread 를 process 라 부름
      -> 그렇기 때문에 precess 들의 충돌이라 부르는 것임.
  • OS 구현 시 조심해야 하는 부분 ( 충돌이 나지 않도록 충분히 고민 )
    • 자원 allocation & deallocation
      -> Processor time
      -> Memory
      -> files
      -> I/O devices
    • data 와 resource 들을 protect 해야 함.
  • concurrency 에 대한 중요 용어
    • Race condition
      -> 어떤 프로세스 ( or thread ) 가 다른 프로세스에게 영향을 주면 안됨.
      -> 두개 이상의 프로세스가 동시 접근 시 결과 예측 불가
    • Mutual exclusion ( 상호 배제 )
      -> 하나의 프로세스만이 자원을 사용
    • Critical section
      -> 공유하는 자원을 접근하는 "코드"
      -> 공유자원은 IPC 에서 공유하는 shared memory 공간이 될 수 있음.
    • Starvation
      -> 자원이 배정되어야 하지만 오랫동안 배정안된 상태
    • Deadlock
      -> 영원히 자원 배정을 못받음. ( starvation 상황에서 벗어나지 못함.)
=> "mutual exclusion" 이 만족되지 않으면 => "critical section" 에서 => "race condition" 이 발생됨.

2) Race Condition

  • producer / consumer problem
    • producer 가 buffer 에 item 저장 ( buffer 는 shared memory 방법 사용 )

    • consumer 는 buffer 에서 한번에 하나씩 정보 얻을 수 있음.

    • 이러한 상황에서 buffer 는 size 가 정해져있는 circular buffer 를 사용한다.

    • producer 가 buffer 에 쓰려고 하지만 buffer 가 꽉차있으면 producer 는 busy waiting 을 수행.

    • consumer 가 읽으려는 index 에 아무것도 없으면, consumer 는 busy waiting 을 수행.

  • Interrupt
    • Interrupt 발생 시 kernel 은 일시정지 후 interrupt 코드 실행
      -> 전부 실행했으면 다시 본인이 하던 일로 돌아와 다음 instruction 부터 실행하거나 context switch
  • 각 상황에서의 race condition 발생상황
    • Uniprocessor
      -> shared memory 방식을 사용했을 때 동시에 critical section 에 접근하면 발생
    • One process ( multithread )
      -> data area 를 동시 접근했을 때 발생
  • Race condition 예방 방법
    1. atomic 하게 실행 ( critical section 실행 시 중간에 끊기지 않도록 덩어리로 실행 )
      -> interrupt 가 들어와도 interrupt 를 뒤로 미루고 계속 code 실행
      -> critical section 의 길이가 길면 안됨.

    2. critical section 주위를 fence 로 감싸기
      -> fence 안에서는 mutual exclusion 이 보장된다.
      -> fence 안에서는 critical section이 atomic 하게 실행되지 않는다.
      -> 담장에 들어간 상태에서는 interrupt 가 발생되면 interrupt 처리하고 다시 이어서 실행.
      -> 하지만 하나의 프로세스가 들어간 상황에서는 다른 프로세스가 들어갈 수 없음.

0개의 댓글