[혼공컴운 12기] week 5 프로세스 동기화, 교착 상태

지애·2024년 8월 10일
0

혼공컴운

목록 보기
5/7

✏️ 5주차 진도: Chapter 12 ~ 13

  • 기본 숙제(필수): p. 363의 확인 문제 1번 풀고 인증하기
  • 추가 숙제(선택): Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

Chapter 12 프로세스 동기화

동시다발적으로 실행되는 프로세스를 아무 기준 없이 마음대로 실행되도록 하면, 프로세스들이 접근하는 자원과 프로그램의 결과에 문제가 발생할 수 있다. 이러한 위험을 막기 위해서 프로세스들 사이의 수행 시기를 맞추는 동기화가 필요하다.

동기화

  • 실행 순서 제어를 위한 동기화 : 프로세스를 올바른 순서대로 실행하기

  • 상호 배제를 위한 동기화 : 동시에 접근해서는 안되는 자원에 한 번의 하나의 프로세스만 접근하도록 하기

공유 자원

여러 프로세스가 함께 사용하는 공동의 자원. 전역 변수, 파일, 입출력장치, 보조기억장치 등

임계 구역(critical section)

동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
두 개 이상의 프로세스가 임계 구역에 진입하려고 하면 한 프로세스를 제외한 나머지 프로세스들은 대기해야 한다.

race condition

두 개 이상의 프로세스가 동시에 임계 구역의 코드를 실행하여 발생하는 문제. 해당 문제가 발생하면 데이터의 일관성이 깨진다.

  • 저급 언어로 변환된 고급 언어를 실행하는 과정에서 문맥 교환이 일어날 수 있고, 이로 인해 race condition이 발생할 수 있다.

상호 배제를 위한 동기화를 위해 꼭 지켜져야 하는 것

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

Mutex lock(MUTual Exclusion lock)

상호 배제를 위한 동기화 도구
임계 구역에 진입하는 프로세스는 Mutex lock을 걸어 놓음으로써 현재 자신이 임계 구역에 있음을 알린다.

acquire 함수

프로세스가 임계 구역에 진입하기 전에 호출하는 함수.

  • 임계 구역이 잠겨있으면(lock이 true) 임계 구역이 열릴 때(lock이 false)까지 임계 구역을 반복적으로 확인
  • 임계 구역이 열려 있으면 임계 구역을 잠금

release 함수

임계 구역에서의 작업이 끝나고 호출하는 함수
잠긴 임계 구역을 열어준다.

acquire();
// 임계 구역
release();
  • acquire 함수와 release 함수를 위와 같이 사용함으로써 하나의 프로세스만 임계 구역에 진입하게 할 수 있다.
  • 바쁜 대기

semaphore

공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구
프로세스는 임계 구역 앞에서 멈춤 신호를 받으면 잠시 기다리고, 가도 좋다는 신호를 받으면 임계 구역에 들어가게 된다.

// 전역 변수 S : 사용 가능한 공유 자원의 개수(임계 구역에 들어갈 수 있는 프로세스의 개수)
// wait 함수 : 기다려야 하는지 알려주는 함수
// signal 함수 : 기다리는 프로세스에게 이제 임계 구역에 들어가도 좋다고 신호를 주는 함수

wait () {
	while ( S <= 0)  // 임계 구역에 들어갈 수 있는 프로세스가 없다면
    ; // 사용할 수 있는 자원이 있는지 계속 확인
    S --; // 들어갈 수 있는 프로세스가 있다면 진입시키고 S를 1 감소시킨다
 }
 
 signal () {
 	S++; // 임계 구역에서의 작업을 마친 뒤 S 1 증가
  }
  
  wait()
  // 임계 구역
  signal()
  • 실제로 세마포는 wait, signal 함수에서 대기 큐, 준비 큐를 사용한다. (사용할 수 있는 자원이 없을 경우 프로세스를 대기 큐에 삽입, signal 함수가 호출되면 대기 큐에 있는 프로세스를 준비 큐로 옮긴다.) -> 바쁜 대기를 하지 않아도 됨!

semaphore를 이용해 프로세스 실행 순서를 제어하는 방법

S = 0

p1                        p2
// 임계 구역			wait()
signal()			// 임계 구역
  • 이렇게 하면 p1, p2 호출 순서에 상관없이 p1이 p2보다 항상 먼저 실행된다.

monitor

공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어서 관리한다.

  • 일일이 waith와 signal을 명시해야하는 semaphore의 번거로움을 덜어주기 위해서 만들어짐!
  • 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 인터페이스를 통해 공유 자원을 이용하도록 한다.
  • 조건 변수를 사용해서 프로세스의 실행 순서를 제어한다.(모니터에 이미 진입한 프로세스가 잠시 실행이 중단되었을 경우, 이를 조건 변수 큐에 집어넣어서 관리한다.)

Java에서 메서드에 synchronized 키워드를 붙임으로써 모니터를 구현할 수 있다!

Chapter 13 교착 상태

교착 상태

일어나지 않을 사건을 계속 기다리며 진행이 멈춰 버리는 현상

자원 할당 그래프

교착 상태가 발생했을 때의 사오항을 정확히 표현할 수 있는 그래프

교착 상태의 자원 할당 그래프

  • 원의 형태를 띄고 있을 경우 교착 상태

교착 상태 발생 조건

아래 조건의 모두 만족될 때 교착 상태가 발생할 가능성이 생긴다.

  • 상호 배제 : 자원을 동시에 여러 프로세스가 사용할 수 없을 때
  • 점유와 대기 : 자원을 할당 받은 상태에서 다른 자원을 할당받기를 기다리는 상태
  • 비선점 : 다른 프로세스의 자원을 강제로 빼앗을 수 없을 때
  • 원형 대기 : 자원 할당 그래프가 원의 형태로 그려질 때

교착 상태 예방

상호 배제, 점유와 대기, 비선점, 원형 대기 중 한 조건만이라도 일치하지 않도록 자원을 할당하면 교착 상태를 예방할 수 있다.

  • 상호 배제 없애기 : 현실성 떨어짐
  • 점유와 대기 없애기 : 프로세스에 자원을 모두 할당하거나 아예 할당하지 않는 방식으로 자원을 분배하는 것으로 구현 가능. 하지만 자원의 활용률이 떨어진다는 문제점이 있다.
  • 비선점 조건 없애기 : 선점이 불가능한 자원도 있음
  • 원형 대기 조건 없애기 : 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하는 것으로 구현 가능(5번 자원을 먼저 할당 받은 후에 이어서 1번 자원을 할당 받을 수 없게 함). 하지만 모든 자원에 번호를 붙이는 것은 쉬운 일이 아니며, 번호를 잘못 붙였다가 자원의 활용률이 떨어질 수도 있다.

교착 상태 회피

교착 상태가 발생하지 않을 정도로만(안전 상태를 유지하도록) 자원을 할당하는 방식

  • 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 성공적으로 실행을 마칠 수 있는 상태. 안전 순서열이 존재하는 상태.(이 순서대로만 실행하면 교착 상태 발생 X)
  • 불안전 상태 : 교착 상태가 발생할 수도 있는 상황

교착 상태 검출 후 회복

교착 상태 발생을 인정하고 사후에 조치하는 방식

  • 선점을 통한 회복 : 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아준다.
  • 프로세스 강제 종료를 통한 회복 : 가장 단순하면서 확실한 방식이지만, 많은 프로세스들이 작업 내역을 잃거나 교착 상태 제거 여부를 확인하는 과정에서 오버 헤드가 발생할 수 있다.

교착 상태 무시

  • 타조 알고리즘 : 드물게 발생하는 교착 상태를 그냥 무시하는 방법...(ㅋㅋ) 최대 효율을 위해서는 이런 방법이 적합할 때도 있다!

✏️ 기본 숙제

p. 363의 확인 문제 1번

뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.
1. 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룹니다.
2. 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다.
3. 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.
4. 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다.

답: 4번 (대기 큐, 준비 큐를 사용하면 바쁜 대기를 하지 않아도 된다.)

📖추가 숙제

Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

위쪽에 정리

profile
차근차근

0개의 댓글