SangKins

[혼공컴운] 5주차 Chapter 12 ~ 13 (동기화, 교착상태) 본문

Dev/혼공단

[혼공컴운] 5주차 Chapter 12 ~ 13 (동기화, 교착상태)

holdbird 2024. 1. 30. 22:42

 

 

✅혼자 공부하는 컴퓨터 구조+운영체제

#혼공학습단 #혼공 #혼공컴운

# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 ~ 03 p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기 p. 100의 스택과 큐의 개념을 정리하기
2주차
(1/8 ~ 1/14)
Chapter 04 ~ 05 p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기 Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
3주차
(1/15 ~ 1/21)
Chapter 06 ~ 08 p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기 Ch.07(07-1) RAID의 정의와 종류를 간단히 정리해 보기
4주차
(1/22 ~ 1/28)
Chapter 09 ~ 11 p. 304의 확인 문제 1번 풀고 인증하기 Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
5주차
(1/29 ~ 2/4)
Chapter 12 ~ 13 p. 363의 확인 문제 1번 풀고 인증하기 Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기
6주차
(2/5 ~ 2/12)
Chapter 14 ~ 15 p. 400의 확인 문제 1번 풀고 인증하기 Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

 

짧은 시간에 이렇게 공부하는 건 혼공단의 도움이 컸던 것 같습니다!

나만의 언어로 정리하는 게 효과가 좋은 것 같습니다! 

 

개발 공부를 어떻게 하면 좋을까요? 최선의 방법과 최악의 방법

혼공학습단을 10회 정도 운영하면서 여러분께 알려드리면 좋을 것 같은 내용이 있어 공유드립니다. 백엔드 개발자가 되기위해 열심히 공부 중인 개발자 지망생의 글인데요, 기록과 꾸준함의 중

hongong.hanbit.co.kr

마지막 6주차까지!

 

✅혼자 공부하는 컴퓨터 구조+운영체제
- 진도: Chapter 12 ~ 13
- 기본 미션: p. 363의 확인 문제 1번 풀고 인증하기
- 선택 미션: Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

 

 

12 - 1 프로세스 동기화

협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기 때문에 반드시 동기화(Sync) 되어야 한다.

 

예를 들어서 구글의 클라우드나 애플의 i-cloud 같은 경우가 있습니다. 

분명히 핸드폰으로 사진을 클라우드에 업로드했는데 컴퓨터에서 보았을 때는 업로드가 되어있지 않는 경우도 어떻게 보면 동기화 문제라고 할 수 있지 않을까요?

업로드가 전부 완료되지 않았는데 파일을 읽음으로써 동기화가 이루어지지 않은 것이라고 할 수 있습니다.

이게 바로 실행 순서 제어를 위한 동기화입니다.

 

동기화란 프로세스 (스레드) 사이의 수행시기를 맞추는 것을 의미합니다.

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

 

실행 순서 제어를 위한 동기화 

특정 조건을 만족해야만 실행을 이어나갈 수 있는 (Read, Write)처럼 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것.

 

상호 배제를 위한 동기화

공유가 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘

은행의 입금과 출금같이 동기화가 제대로 이루어지지 않는 경우를 예시로 들 수 있습니다.

- 생산자와 소비자 문제

 

이와 같은 경우는 동시에 접근해서는 안 되는 자원에 동시에 접근했기 때문에 문제가 발생했습니다.

 

여기서 동시에 접근해서는 안 되는 자원이란?

 

공유 자원과 임계 구역

은행의 입금과 출금, 총합이라는 공동의 자원을 두고 작업을 했습니다. 이러한 자원을 공유 자원이라고 합니다.

동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계 구역이라고 합니다.

 

잘못된 실행으로 동시에 임계 구역의 코드를 실행하여 문제가 발생하는 것을 레이스 컨디션이라고 합니다.

이러한 사례는 은행의 입출금, 생산자와 소비자 문제를 레이스 컨디션의 사례라고 할 수 있습니다.

 

레이스 컨디션이 발생하는 원인

고급 언어는 실행 과정에서 저급 언어로 변환되어 실행된다. 한 줄의 고급 언어는 여러 줄의 저급언어로 바뀝니다.

이러한 과정에서 문맥 교환이 발생합니다.

이러한 경우에 상호 배제를 위한 동기화는 두 개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리하는 것을 의미합니다.

 

임계 구역 문제의 세 가지 원칙

1. 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어갈 수 없다.

2. 진행 : 임계 구역에 프로세스가 없다면 진입하고자 하는 프로세스는 접근 가능하다.

3. 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가 임계 구역에 들어올 수 있어야 한다. ( 무한대기 X )

 

12-2 동기화 기법

이렇게 동시에 접근하면 안 되는 영역에 진입하게 하는 도구가 있습니다.

임계 구역에 오직 하나의 프로세스만 진입하게 하고, 올바른 실행 순서를 보장하는 대표적인 도구 세 가지가 있습니다.

 

1. 뮤텍스 락 (상호 배제를 위한 동기화 도구)

2. 세마포 (상호 배제 + 실행 순서 제어 동기화 도구)

3. 모니터

 

뮤텍스 락 (탈의실)

  • 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
  • 임계 구역을 잠그는 역할 : acquire 함수
  • 임계 구역의 잠금을 해제하는 역할 : release 함수
  • Busy Wait : 자원을 많이 먹는다.

세마포 (여러 개의 탈의실, 기차 신호)

  • 임계 구역에 진입할 수 있는 프로세스의 개수 전역 변수 : S(다를 수 있음)
  • 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
  • 임계 구역 앞에서 기다리는 프로세스에 진입해도 된다고 알려주는 signal 함수

모니터

  • 최근에 등장한 동기화 도구
  • 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어서 관리
  • 인터페이스를 통해서만 공유 자원에 접근
  • 접근하고자 하는 프로세스를 큐에 넣어서 순서대로 공유 자원 제공, 상호 배제
  • 실행 순서 제어를 위한 동기화에는 조건 변수를 사용
  • - 특정 프로세스가 아직 실행될 조건이 안 됐을 경우에는 wait를 통해 실행을 중단
  • - 특정 프로세스가 실행될 조건이 충족되었을 경우에는 signal을 통해 실행을 재개

 

13-1 교착 상태란?

프로세스를 실행하기 위해서는 자원이 필요합니다. 두 개 이상의 프로세스가 각자 가지고 있는 자원을 기다린다면 그 어떤 프로세스도 자원을 사용하지 못하는 교착 상태가 됩니다. 

 

교착상태란 간단히 말해서 친구와 내가 있다면 친구가 먹고 있는 걸 나도 먹고 싶고 내가 먹고 있는걸 친구가 먹고 싶어 하는 상태입니다.

누구도 양보하지 않는다면 친구와 나는 서로의 것을 먹지 못합니다.

이러한 상태를 해결하는 방법과 그림으로 설명하는 기법에 대해서 알아보겠습니다.

 

이러한 교착상태를 설명하는 고전적인 문제 상황은 식사하는 철학자가 있습니다.

 

 

자원 할당 그래프

교착상태를 단순하게 표현할 수 있는 간단한 그래프

  1. 프로세스는 원, 자원의 종류는 사각형
  2. 사용할 수 있는 자원의 개수는 사각형 내에 점으로 표현
  3. 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표 표시
  4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

 

교착 상태 발생 조건

  1. 상호 배제 : 한 프로세스에서 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
  2. 점유와 대기 : 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태
  3. 비선점 : 자원을 강제로 빼앗을 수 없음
  4. 원형 대기(환형 대기) : 요청 및 할당받은 자원이 원의 형태를 이룬다

13-2 교착 상태 해결 방법

교착 상태의 발생 조건을 전부 충족시키지 않는다면 교착상태는 발생하지 않습니다.

 

상호배제 : 모든 자원의 상호 배제를 없애기에는 어렵다 (프린터)

 

점유와 대기 : 특정 프로세스에 자원을 모두 할당, 아예 할당하지 않는 방법으로 자원의 할당률이 낮아진다

 

비선점 조건 : 모든 자원이 선점 가능한 것은 아니다. 비선점 조건을 없애 모든 자원을 뺴앗을 수 있도록 하는 건 범용성이 낮아짐

 

원형 대기 조건 : 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않음

수많은 자원에 번호를 붙이고, 어떻게 활용하는가에 따라 특정 자원의 활용률이 떨어질 수 있음

 

 

교착 상태 회피

자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 자원을 배분하는 방식

  • 안전상태 : 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태 (안전 순서열 O)
  • 불안정상태 : 교착 상태가 발생할 수 있는 상태 (안전 순서열 X)
  • 안전순서열 : 교착 상태 없이 안전하게 프로세스들에게 자원을 할당할 수 있는 순서

 

교착 상태 검출 후 회복

교착 상태 발생 후 사후에 조치하는 방식

 

검출 후 회복 방식은 프로세스들이 자원을 요구할 때마다 할당하며, 교착 상태 발생 여부를 검사함. 

교착 상태가 확인되면 다음과 같은 방식으로 회복함

 

선점을 통한 회복

  • 해결될 때까지 자원을 몰아주는 방식

 

프로세스 강제 종료를 통한 회복

  • 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료, OR 모두 강제종료
  • 전자는 오버헤드를 야기, 후자는 작업 내역을 잃게 될 가능성이 존재

 

교착상태를 아예 무시하는 타조 알고리즘도 있다. 최대 효율을 추구하는 엔지니어 입장에서는 이 방식이 적합할 때도 많다.

 

 


뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.

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

반드시 Busy wait이 아니라 wait을 할 수 있습니다.

 

 

임계구역과 상호 배제

 

임계구역 : Race condition이 발생할 수 있는 코드 부분, 영역 
 

임계구역의 문제를 해결하기 위한 3가지 조건

  1. 상호배제 : 특정 프로세스가 임계영역 내에서 실행중일 때, 다른 프로세스는 임계영역에 들어갈 수 없다.
  2. 진행 : 임계영역을 진행 중인 프로세스가 없을 경우에, 임계영역에 진입을 요구할 경우 유한한 시간 내에 진입해야 한다. 정당한 진입 프로세스를 막으면 안 된다. 
  3. 한정된 대기 : 임계영역에 대한 진입의 요청을 했을 경우, 무한히 기다리지 않고 유한한 시간 내에 진입해야 한다.

 상호배제

  • 특정 프로세스가 공유자원을 사용하고 있을 경우, 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법    

 

혼자 공부하는 컴퓨터 구조+운영체제

어려운 컴퓨터 구조와 운영체제의 원리를 누구나 쉽게 이해할 수 있도록 용어와 개념은 한 번 더 풀어쓰고, 적절한 예시와 이해하기 쉬운 그림으로 재미있게 구성했다. 또한 일상 소재를 활용한

www.hanbit.co.kr