Home [OS] 운영체제 - 병행제어 3
Post
Cancel

[OS] 운영체제 - 병행제어 3

운영체제 - 병행제어 3

Critical-Section Problem

  • n 개의 프로세스가 공유 데이터를 동시에 사용하길 원하는 경우, 각 프로세스의 code segment에는 공유 데이터에 접근하는 코드인 Critical Section이 존재한다.
  • 하나의 프로세스가 critical section에 들어가 있을 때, 다른 모든 프로세스는 critical section에 들어갈 수 없다.

프로그램적 해결법의 충족 조건

  • Mutual Exclusion (상호 배제)
    • 한 프로세스가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다.
  • Progress (진행)
    • 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있다면 critical section에 들어가게 해주어야 한다.
  • Bounded Waiting (유한대기)
    • 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야 한다.

Peterson’s Algorithm

  • critical section에 들어가고자 flag를 표시한 경우와 동시에 자신의 턴일 때 critical section에 접근 가능하다.
  • Busy waiting 문제 (spin lock)
    • 비효율적이다. 계속 CPU와 Memory를 사용하면서 Wait 한다.

Synchronization Hardware

  • 하드웨어적으로 Test와 Modify(Set)를 atomic하게 수행할 수 있도록 지원하는 경우 앞의 문제는 간단히 해결된다.

Semaphores

  • 앞의 방식들을 추상화시킴.

P 연산

  • 자원(공유 데이터)을 획득하는 과정
  • 락을 획득

V 연산

  • 자원(공유 데이터)을 반납하는 과정
  • 락을 반납

Block & Wakeup (sleep lock) 방식의 구현

  • Busy wait 방식을 효율적이지 못하다.
  • Critical Section 획득에 대한 경쟁이 센 경우 Block / Wakeup이 적당하다.
  • Critical Section 획득에 대한 경쟁이 매우 적은 경우에는 Block/Wakeup 방식의 오버헤드가 Busy-Wait 방식의 오버헤드보다 커질 수 있다.
  • 일반적으로는 Block/Wakeup 방식이 더 좋다.

Block

  • 커널은 block을 호출한 프로세스를 suspend 시킨다.
  • 이 프로세스의 PCB를 semaphore에 대한 Wait Queue에 넣는다.

Wakeup

  • block 된 프로세스 P를 Wakeup 시킨다.
  • 이 프로세스의 PCB를 Ready Queue로 옮긴다.
This post is licensed under younghwani by the author.

[OS] 운영체제 - 병행제어 2

[OS] 운영체제 - 병행제어 4

Comments powered by Disqus.