관리 메뉴

커리까지

[운영체제] 12. Process Synchronization 1 본문

KOCW

[운영체제] 12. Process Synchronization 1

목표는 커리 2021. 7. 23. 04:39
728x90
SMALL

반효경 교수 강의 출처

Initial Attemptes to Solve Problem

  • 두 개의 프로세스가 있다고 가정 P0, P1

  • 프로세스들의 일반적인 구조

do{
        entry section
        critical section
        exit section
        remainder section
}while(1);
  • 프로세스들은 수행의 동기화(synchronize)를 위해 몇몇 변수들 공유할 수 있다. -> synchronization variable

  • 어떤 데이터 간에 접근

  • 공유 데이터 접근 코드 이전에 entry를 넣어서 lock를 건다.

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

  • Mutual Exclusion(상호 배제)

    • 프로세스 pi가 critical section 부분을 수행중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다.
  • Progrewss

    • 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다.
  • Bounded Waiting(유한 대기)

    • 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야 한다.
  • 가정

    • 모든 프로세스의 수행 속도는 0보다 크다.
    • 프로세스들 간의 상대적인 수행 속도는 가정하지 않는다.

Algorithm 1

  • Synchronization variable
    • int turn
    • initially turn = 0; => Pi can enter its critical section if (turn == i)
    • 0이면 0번째 차례, 1이면 1번째 차례
  • Process P0
do{
    while(turn != 0); /* My turn? */
    critical section
    turn = 1; /* Now it's your turn */
    remainder section
} while(1);
  • 단일이 아니라서 cpu를 뺐는과정중에 문제가 발생할 수 있음
  • Satisfies mutual exclusion, but not progress
  • 과잉 양보 : 반드시 한번씩 교대로 들어가야만 함(swap-turn)
    • 그가 turn을 내값으로 바꿔줘야만 내가 들어갈 수 있음
    • 특정 프로세스가 더 빈번히 critical section을 들어가야 한다면?
728x90
LIST
Comments