11. 프로세스 동기화

개발 99·2025년 4월 7일

공룡책

목록 보기
11/22

Cooperating processes

  • shared a logical address space(thread) or share data(shared memory, mmap)

이와 같이 여러 프로세스가 공유 자원에 접근 시, 제일 중요한 것은 데이터 정합성(consistency)이다.

The integrity of data

process간 interrupte에 의해서 context switch가 발생해서 instruction stream이 끊어진다.

producer-consumer problem

  • incremented every time we add a new item to the buffer

  • decremented every time we remove one item from the buffer

그런데 데이터 정합성이 깨진다.

  • join에 의해서 main스레드는 작업이 끝날 때까지 대기(나머지 스레드 2개는 계속 실행)

  • sum은 공유 메모리

sum=20000이 나와야 하는데, 그보다 작게 나옴.

  • count++, count-- 는 위와 같이 표현할 수 있다.

  • context switch가 register1,2의 중간에 발생할 수 있다.( 문제 상황 )

( context switch 발생시 Ready Queue로 간다. )

register1,2가 물리적으로 같은 레지스터이지만,
save/restore 과정에서 content가 바뀔 수 있다.

Race Condition

2개 이상의 스레드가 같은 데이터를 공유하는데,
concurrent하게 접근 및 처리하는데 순서에 따라서 결과가 달라진다.

Sol.

  • 오직 한 개의 프로세스만 접근(synchronized)

Critical Section Problem

critical section에서 공유된 데이터가 업데이트가 된다.

핵심은 1개의 프로세스가 임계영역에 접근하면, 다른 프로세스는 block한다.
(동시에 실행하는 것을 block)

Sections of codes

동기화 문제는 임계영역 관리 문제

  • entry-section( C.S에 진입 )

  • critical-section( count++ )

  • exit-section

  • remainder-section( count -- )

교착상태의 4가지 필요 조건

아래 4가지 조건이 모두 만족되는 경우 데드락이 발생할 가능성이 있다.
→ 하나라도 만족하지 않으면 발생하지 X

  • 상호 배제 (Mutual exclusion)
    한 리소스는 한 번에 한 프로세스만이 사용할 수 있다.
    사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.

  • 점유와 대기(Hold and wait)
    자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.

  • 비선점 (No preemption)
    이미 할당된 자원을 강제로 빼앗을 수 없다.
    프로세스가 task를 마친 후 리소스를 자발적으로 반환할 때까지 기다려야 한다.

  • 환형 대기 (Circular wait)
    대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.
    Hold and wait 관계의 프로세스들이 서로를 기다림

single-core solution

  • Prevent interrupts from occuring
    (특정시간동안 interrupt 못하게 방지)

그런데, 성능상 최악.

Two general approaches:

  • Non-preemptive kernel
    한번 진입하면 종료될 때까지 제어권 안 내려 놓음.

  • Preemptive kernel
    중간에 언제든지 제어권을 뺏길 수 있음.

profile
구구구구구!

0개의 댓글