[혼공컴운] 5주차_동기화, 교착상태 (with. 미션)

·2024년 2월 6일
0

컴퓨터공학

목록 보기
5/12
post-thumbnail

5주차 미션

진도: Chapter 12 ~ 13
기본 미션: p. 363의 확인 문제 1번 풀고 인증하기
선택 미션: Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

12. 프로세스 동기화

동기화

동시다발적으로 실행되는 프로세스와 스레드를 실행 순서와 자원의 일관성을 보장해야한다.

운영체제가 제공하는 동기화의 의미

  1. 실행 순서 제어 : 프로세스를 올바른 순서로 실행하기
  2. 상호 배제 : 동시에 접근해서는 안되는 자원에 하나만 접근하기

예시1

동시에 실행되는 프로세스

  1. Book.txt 가 없다면 파일을 만들고 값을 쓰고 저장하는 프로세스
    • Book.txt가 없다면 파일을 만들고 값을 쓰고 저장하는 프로세스
  2. Book.txt 를 읽어들이는 프로세스
    • Book.txt 가 있다는 조건이 만족되어야만 실행 가능

1 → 2 순으로 실행해야만 올바르게 실행된다.

예시2

입금 프로세스

공유 자원 : 공동으로 사용하는 자원 (전역 변수, 파일, 입출력 장치, 보조기억장치 etc.)

임계 구역 : 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미. 임계 구역에 진입한 프로세스가 있다면 다른 프로세스는 임계 구역 밖에서 기다려야 한다.

레이스 컨디션 : 임계 구역을 동시에 실행하여 자원의 일관성이 깨지는 현상

동기화 해결의 세가지 원칙

  1. 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 대기해야 한다.
  2. 진행 : 어떤 프로세스도 임계 구역에 진입하지 않았다면 진입이 가능해야 한다.
  3. 유한 대기 : 한 프로세스가 임계 구역 진입을 위해 대기하고 있다면 언젠가 진입이 가능해야 한다.

동기화 기법

뮤텍스 락

임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룬다.

  • 자물쇠 역할 : 프로세스들이 공유하는 전역변수 lock
  • 자물쇠 잠그기 : acquire 함수
  • 자물쇠 열기 : release 함수
acquire () {
	while (lock == true) // 만약 임계 구역이 잠겨있다면
		; // 임계  구역이 잠겨있는지를 반복적으로 확인
	lock = true; // 만약 임계 구역이 잠겨있지 않다면 임계 구역 잠금
}

release () {
	lock = false; // 임계 구역 작업이 끝났으니 잠금 해제
}

세마포

공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구이다.

  • 뮤텍스락은 기본적으로 공유 자원이 하나일 경우 상정
  • 세마포는 공유 자원이 여러 개 있을 경우도 동기화(실행 순서 제어, 상호 배제 동기화) 가능
  • 변수 S : 임계 구역에 진입할 수 있는 프로세스의 개수 (사용 가능한 공유 자원의 개수)
  • wait 함수 : 임계구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수
  • signal 함수 : 임계 구역 앞에서 기다리는 프로세스에게 ‘이제 가도 좋다’고 신호를 주는 함수
wait()
//임계 구역
signal()
wait ( ) {
	while ( S <= 0 ) // 만일 임계 구역에 진입할 수 있는 프로세스 개수가 0 일때
; // 사용할 수 있는 자원이 있는지 반복적으로 확인
	S--; // 임계 구역에 진입할 수 있는 프로세스의 개수가 하나 이상이면 S를 1 감소시키고 임계 구역 진입
}

signal() {
	S++; // 임계 구역에서 작업을 마친 뒤 S 1 증가
}
wait ( ) {
	S--;
	if ( S < 0 ) {
		add this process to Queue; // 해당 프로세스 PCB를 세마포 큐에 삽입
		sleep();// 대기 상태로 접어들기
	}
}

signal() {
	S++; 
	if ( S <= 0 ) {
		remove a process P from Queue // 세마포 큐에 있는 프로세스 제거
		wakeup(p); // 프로세스를 대기 상태에서 준비 상태로 만듬
	} 
}
  • 실행 순서를 위한 동기화
  • 먼저 실행할 프로세스 뒤에 signal
  • 나중에 실행할 프로세스 앞에 wait

모니터

세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용한다.

  • 공유 자원에 접근하기 위한 인터페이스로, 인터페이스를 통해서만 접근 (상호 배제)
  • 실행 순서 제어를 위한 동기화를 위해 조건 변수 사용
  • 프로세스 상태 전이가 가능한 특별한 변수
    • wait() : 호출한 프로세스를 대기 상태로 전환
    • signal() : 호출한 프로세스를 깨움

조건 변수를 이용한 실행 순서 제어

  1. 아직 실행될 조건이 되지 않았을 때, wait 을 통해 실행 중단
  2. 실행될 조건이 충족되었을 때, signal을 통해 실행 재개

교착 상태

일어나지 않을 시간을 기다리며 무한히 대기하는 현상 의미

  • 식사하는 철학자 문제
    • 교착 상태 발생 조건 및 해결 방법을 위한 모델
    • N명의 철학자, 두 개의 포크로 먹을 수 있는 음식, 원형 테이블에서 모든 철학자들이 동시 포크를 집어드는 순간 누구도 식사를 할 수 없다.
  • 자원 할당 그래프를 이용해 교착 상태를 표현 가능

교착 상태 발생 조건

  1. 상호 배제 : 동시에 자원 사용이 불가능한 경우
  2. 점유와 대기 : 자원을 할당받은 채 다른 자원의 할당을 기다리는 경우
  3. 비선점 : 강제로 자원을 빼앗을 수 없는 경우
  4. 원형 대기 : 자원을 원형으로 대기할 경우

교착 상태 해결 방법

교착 상태 예방

  • 교착 상태의 발생 네 가지중 하나를 없애는 것
    • 상호 배제 조건 없애기 ⇒ 자원을 공유 가능하도록 변경, 모든 자원에 대해서 적용 불가능
    • 점유와 대기 조건 없애기 ⇒ 특정 프로세스에 자원 모드 할당하거나 아예 할당하지 않기, 자원의 활용률 저하
    • 비선점 없애기 ⇒ 선점하여 사용 가능한 자원에 대해서 효과적(CPU), 모든 자원에 대해 적용 가능한건 아님(프린터기)
    • 원형 대기 조건 없애기 ⇒ 자원에 번호 매기기, 오름차순으로 자원 할당
  • 교착 상태 발생 배경 원천 차단
  • 교착 상태가 발생하지 않음을 보장할 수 있지만, 여러 부작용이 따르는 방식

교착 상태 회피

교착 상태가 발생하지 않을 정도로만 조금씩 자원을 할당하는 방법

교착 상태 검출 후 회복

교착 상태가 발생하면 그때 회복하는 방식

  • 선점을 통한 회복
  • 프로세스 강제 종료를 통한 회복

기본 미션 : p. 363의 확인 문제 1번 풀고 인증하기

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

  • 임계 구역
    • 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미한다.
    • 임계 구역에 진입한 프로세스가 있다면 다른 프로세스는 임계 구역 밖에서 기다려야 한다.
  • 상호 배제
    • 한 프로세스가 임계 구역에서 작업 중이면 다른 프로세스가 임계 구역에 들어갈 수 없도록 제어하는 것

5주차 회고

추가적인 내용정리는 차차 추가하겠습니다!

profile
성실하게

0개의 댓글