process synchronization and mutual exclusion - 3

Jeong seulho·2023년 2월 15일
0

운영체제

목록 보기
11/35

📌HW를 이용하여 ME 구현

📖TestAndSet instruction

  • Test, Set을 한번에 하는 기계어
  • machine instruction
    • 실행 중 인터럽트 받지 않음, preemption 되지않음
  • 단, 3개이상의 프로세스에대해 bounded waiting 위배
boolean TestAndSet (boolean *target) {
	boolean temp = *target;
    *target = true;
    return temp;
}

📖N-process ME

❗️HW solution of ME 특징

  • 구현 쉬움
  • busy waiting 문제

📌OS를 이용하여 ME 구현

📖spinLock

  • S 초기화, P(), V() 연산으로만 접근 가능 (정수형 변수 S)
  • 위 연산들은 atomic 즉, preemption 되지않게 OS가 보장
  • 멀티 프로세서에서만 사용 가능
  • busy waiting
P(S) { // 문 잠그기
	while (S<=0) do
    endWhile;
    S = S-1
}

V(S) { // 잠금 풀기
	S = S+1
}

📖semaphore

  • S 초기화, P(), V() 연산으로만 접근 가능 (정수형 변수 S)
  • 위 연산들은 atomic 즉, preemption 되지않게 OS가 보장
  • 차이점 : S변수에 대응하는 ready queue 할당
P(S) { 
	if (S>0)
    then S = S - 1;
    else wait on the queue;
}

V(S) { 
	if (waiting process on queue)
    then wake up one of them;
    else S = S + 1;
}

binary semaphore

  • S가 0 또는 1
  • ME, 동기화 목적으로 사용

counting semaphore

  • S가 0이상의 정수값 가질 수 있음
  • producer - consumer 문제 해결

📚semaphore로 해결 가능한 문제들

  • 상호배제 문제
  • 프로세스 동기화 문제
  • 생산자-소비자 문제
  • Reader-writer 문제
  • Dining philosopher problem

프로세스 동기화 문제

  • 프로세스의 실행 순서 맞추기
  • 프로세스들은 병행적이며, 비동기적으로 수행

생산자-소비자 문제

  • 생산자(Producer) 프로세스

    • 컴파일러 : 어셈블리 코드 생성
    • 어셈블러 : 적재 모듈 생성
  • 소비자(Consumer) 프로세스

    • 컴파일러 : 어셈블리 코드 생성
    • 어셈블러 : 적재 모듈 생성
  • producer-consumer with single buffer

  • producer-consumer with N-buffer

Reader-writer 문제

  • Reader : 데이터 읽기 연산 수행
  • Writer : 데이터 갱신 연산 수행
  1. Reader들은 동시에 데이터 접근 가능
  2. Writer들은 동시에 데이터 접근 불가
  3. Reader, Writer은 동시에 데이터 접근 불가

❗️Semaphore 특징

  • No busy waiting : 기다려야하는 프로세스는 block상태로 기다림
  • semaphaore queue에 대한 wake-up 순서는 비결정적 즉, starvation problem

0개의 댓글