1. 동기화

프로세스 동기화 : 프로세스 사이의 수행 시기 맞추기

  • 실행 순서 제어 : 프로세스 올바른 순서대로 실행
  • 상호 배제 : 동시에 접근하면 안 되는 자원에 한 프로세스만 접근하게 하기

  • 생산자와 소비자 문제 : ‘총합’ 데이터 공유. 동시에 실행하면 오류 발생
    • 공유 자원(shared resource) : 공동으로 이용하는 파일, 변수, 장치 등 자원
    • 임계 구역(critical section) : 공유 자원 코드 중 동시 실행하면 문제가 발생하는 코드 영역
    • 레이스 컨디션(race condition) : 여러 프로세스가 동시에 임계 구역 코드 실행해 문제 발생

      상호 배제를 위한 원칙

  1. 상호 배제 (mutual exclusion) : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
  2. 진행 (progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
  3. 유한 대기 (bounded waiting) : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다. (무한정 대기 X)

2. 동기화 기법

뮤텍스 락 (Mutex lock : MUTual EXclusion lock)

  • 상호 배제를 위한 동기화 도구
  • 전역 변수 lock : 프로세스 공유, 자물쇠 역할
  • acquire 함수 : 임계 구역 잠그는 역할
    acquire() {
      while(lock == true) // 잠금 있으면
          ;                 // 반복적으로 체크
      lock = true;        // 잠금 없으면 잠그기
    }
    
  • release 함수 : 임계 구역 잠금 해제 역할
    release() {
      lock = false;       // 잠금 해제
    }
    
  • 바쁜 대기(busy wait) : 잠겨있으면 반복적으로 확인

세마포 (Semaphore)

  • 공유 자원 여러 개여도 적용 가능한 동기화 도구
  • 전역 변수 S : 임계 구역 진입 가능한 프로세스 개수 (사용 가능 공유 자원 개수)
  • wait 함수 : 임계 구역 들어가? 말아?
    wait() {
      while ( S <= 0 )   // 임계 구역 진입 불가능하면
          ;                // 반복적으로 확인
      S--;               // 가능하면 S 1 감소하고 진입
    }
    
  • signal 함수 : 나 다 썼어
    signal() {
      S++;              // 작업 마친 후 S 1 증가
    }
    
  • 바쁜 대기 대신 대기 큐 사용하기
    wait() {
      S--;
      if(S < 0) { 
          add this process to Queue; // 해당 프로세스를 대기 큐에 삽입
          sleep();                   // 대기 상태로 이동
      }
    }
    
signal() {
	S++;
	if(S <= 0) {
		remove p from Queue;     // 대기 큐에서 p 꺼내서
		wakeup(p);               // 대기 상태 -> 준비 상태로 만들기
	}
}

모니터(monitor)

  • 공유 자원 & 공유 자원 접근 위한 인터페이스 묶어 관리.
  • 프로세스는 반드시 인터페이스 통해서만 공유 자원 접근 가능 → 접근 원하는 프로세스를 큐에 삽입. 큐 순서 대로 하나씩 공유 자원 이용

  • 사용자가 사용하기 편리
  • 조건 변수 (condition variable) : 프로세스 or 스레드 실행 순서 제어 위해 사용
    • wait() : 특정 프로세스가 아직 실행될 조건이 되지 않았을 때
    • signal() : 특정 프로세스가 실행될 조건이 충족되었을 때

글 이동

Comments