[혼공학습단 9기] 혼공컴운: 5주차

오늘은·2023년 2월 12일
0

혼공학습단

목록 보기
11/14

기본미션

p.363 확인문제 1번 풀고 인증

선택미션

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

Chapter 12 프로세스 동기화

12-1 동기화란

동기화의 의미

프로세스 동기화: 프로세스들 사이의 수행시기를 맞추는 것으로 다음을 일컫는다.

  • 실행 순서 제어: 프로세스를 올바른 순서대로 실행할 것.
  • 상호 배제: 동시에 접근하면 안되는 자원에는 하나의 프로세스만 접근할 것.

생산자와 소비자 문제

상호 배제를 위한 동기화 더 알아보기

생산 - 소비 역할을 하는 프로세스를 동시에 실행할 때 다른 수가 되거나 오류가 나기도 한다. 생산자 프로세스와 소비자 프로세스가 제대로 동기화되지 않으면 발생. 동시에 접근하게 되면 발생할 수 있다.

공유 자원과 임계 구역

공유 자원: 동시에 실행되는 프로세스 중 공동 자원을 사용하게 되는 것. (변수, 파일, 입출력장치, 보조기억 장치 무엇이든 가능)

임계 구역: 두개 이상의 프로세스에서 동시 실행시 문제가 발생하는 자원에 접근한 코드영역

레이스 컨디션: 임계 구역의 코드를 실행하여 문제가 발생하는 것
레이스 컨디션 발생시 데이터 일관성이 훼손된다.

상호 배제: 한 프로세스가 임계 구역 진입시 다른 프로세스의 진입을 막는 것
진행: 임계 구역 내 어느 프로세스도 진입하지 않아 진입을 원하는 프로그램이 입장할 수 있는 것
유한 대기: 상호배제 중인 프로세스가 진입을 원할 때 그 프로세스는 언젠가는 입장이 가능한 것 (무한 대기는 아님)

12-2 동기화 기법

뮤텍스 락

상호 배제를 위한 동기화 도구로 동시에 접근해서는 안될 자원에 동시접근을 막는다.

acquire 함수로 프로세스가 임계 구역에 진입하기 전 호출하여 임계 구역이 잠겨있다면 열릴 때 까지 구역을 반복적으로 확인. 열려있다면 잠긴 전역변수 lock를 true로 변경

release 함수를 통해 열려있는 임계구역을 잠그는 함수를 실행.

세마포

여러 공유자원이 있는 상황에서 적용이 가능한 동기화 도구. 신호를 통해 임계 구역을 관리한다.
구성: 전역변수 s(개수 표시), wait 함수(신호 역할), signal 함수(입장 가능 신호를 줌)

➡ 사용 가능한 공유 자원이 없을 경우 계속 S를 파악하게 된다. CPU 주기 낭비 문제 발생.

wait 함수를 사용할 자원이 없을 때 대기상태로 만들어 PCB를 세마포에 넣어 대기 큐에 옮겨 기존 작업이 끝나면 대기 큐에서 실행 큐로 옮겨 다시 실행한다.

모니터

임계 구역 앞뒤로 wait, signal 함수를 명시하는 번거로움이 있어 잘못된 코드로 잘못된 결과가 출력될 수 있다.

모니터를 통해 공유자원, 접근을 위한 인터페이스를 묶어 관리하며, 프로세스는 반드시 인터페이스를 통해 접근이 가능한 것. 항상 하나의 프로세스만 들어오게 된다.

실행 순서 제어를 위한 동기화도 제공하여 프로세스를 실행/중단을 위해 조건 변수를 사용하기도 한다. 프로세스나 스레드의 실행 순서를 제어하기 위해 사용한다.

Chapter 13 교착 상태

13-1 교착 상태란

식사하는 철학자 문제

진행이 멈춰버리며 기다리는 현상.
다양한 상황에서 발생하며 자원을 점유하여 서로의 자원 사용이 끝나 넘어오길 기다리는 프로세스로 실행을 못하는 상황 등을 교착상태의 예시로 들 수 있다.

해결법
1. 교착 상태 발생시의 상황을 정확히 인지할 것
2. 교착 상태가 일어나는 근본적인 이유를 파악할 것.

자원 할당 그래프

어떤 프로세스가 어떤 자원을 사용하고있는지를 표현하는 그래프
1. 프로세스는 원, 자원의 종류는 사각형으로 표시
2. 사용할 수 있는 자원의 개수는 자원 사격형 내 점으로 표현
3. 프로세스가 어떤 자원을 할당받아 사용중인지 표시하기 위해 자원 ➡ 프로세스 방향으로 화살표 표시
4. 프로세스가 어떤 자원을 기다린다면 프로세스 ➡ 자원 방향으로 화살표 표시

* 교착 상태는 화살표가 원의 형태를 갖는다.

교착 상태 발생 조건

  1. 상호 배제: 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없음

  2. 점유와 대기: 자원을 보유한 채 다른 자원을 기다리고 있기 때문.

  3. 비선점: 다른 프로세스의 자원을 강제로 뺏기 못하여 작업이 끝나기를 기다려야 하기 때문

  4. 원형 대기: 자원 할당 그래프가 원형으로 그려지면 발생할 수 있음.

    13-2 교착 상태 해결 방법

    교착 상태 예방

    발생 조건 4가지 중 하나를 충족하지 못하게 하는 것. 하나라도 만족하지 않는다면 발생하지 않는다

    상호 배제 방지 : 모든 자원을 공유할 수 있도록 한다. 현실적으로 모든 자원의 상호 배제를 막기는 어렵다.

    점유/대기 방지 : 한 프로세스에 필요한 자원을 몰아주고 완료 뒤, 다른 프로세스에 필요 자원을 몰아주는 것. 자원의 활용률이 낮아지며 자원을 많이 사용하는 프로세스는 자원 활용 타이밍 확보에 불리하다는 단점이 있다.

    비선점 방지 : 일부 자원에서는 효과적일 것. 작업이 끝날 때까지 다른 프로세스를 기다려야 하는 자원의 입장에서는 범용성이 떨어진다.

    원형 대기 방지 : 모든 자원에 번호를 붙여 오름차순으로 자원을 할당하면 발생하지 않는다. 다만 모든 자원에 번호를 붙이기 힘들어 활용도가 떨어질 수 있다.

    교착 상태 회피

    교착 상태가 발생하지 않을 정도로만 자원을 할당 하는 것. 프로세스가 할당할 수 있는 자원이 한정될 경우 모든 프로세스에서 많은 자원을 요구할 경우 발생할 위험이 발생한다.

안전 상태: 교착 상태가 발생하지 않고 모든 프로세스를 정상적으로 할당받아 종료할 수 있는 상태
불안전 상태: 교착 상태가 발생할 수 도있는 상황

안전 순서열: 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
안전 상태: 안전 순서열에 따라 자원을 배분하여 교착 상태가 발생하지 않는 상태
불안전 상태: 안전 순서열이 없는 상황으로 교착 상태가 발생할 수 있다.

교착 상태 검출 후 회복

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

선점을 통한 회복: 교착 상태 해결시 까지 한 프로세스에 자원을 몰아준다. (강제로 다른 프로세스에서 자원을 뺏음)
프로세스 강제 종료를 통한 회복: 가장 단순하지만 확실한 방법. 한 프로세스씩 혹은 전체를 강제 종료하여 해결한다. 단 작업 내역을 잃을 수 있음. (교착 상태가 없어졌는지 확인하는 과정 속에서 오버헤드 발생 가능)

잠재적 문제를 무시하는 타조 알고리즘도 존재한다.

profile
게으르지만 기록은 하고싶어!

0개의 댓글