본문 바로가기
책/혼공 컴퓨터구조+운영체제

운영체제 - 동기화, 공유 자원, 임계 구역, 상호 배제

by 코딩하는 돼징 2024. 2. 1.
반응형

동시다발적으로 실행되느 프로세스들은 서로 협력하며 영향을 주고 받는다. 이 과정에서 자원의 일관성을 보장해야 한다.

이렇게 하기 위해서는 반드시 동기화(synchronization)되어야 한다.

동기화란?

특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실해아게 하는 것을 의미한다.

(프로세스 )동기화란?

프로세스들 사이의 수행시기를 맞추는 것이다. 이는 무엇을 의미할까?

실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기

상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

프로세스뿐만 아니라 스레드도 동기화 대상이다. 실행의 흐름을 갖는 모든 것은 동기화의 대상이다. 


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

Writer : Book.txt 파일에 값을 저장하는 프로세스

Reader : Book.txt 파일에 저장된 값을 읽어들이는 프로세스

 

Reader와 Writer 프로세스는 무작정 아무렇게나 실행되어선 안된다. 실행 순서가 있기 때문이다.

Reader프로세스는 Book.txt안에 값이 존재한다는 특정 조건이 만족되어야만 실행이 가능하다. 그러므로 Writer 프로세스가 선행되어야지만 실행이된다.

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard


2. 상호 배제를 위한 동기화 

한 번에 하나의 프로세스만 접근해야 하는 자원에 동시 접근을 피하기 위한 동기화

Bank account problem 예제

현재 계좌에 잔액 : 10만원

프로세스 A는 현재 잔액에 2만원을 추가하는 프로세스

프로세스 B는 현재 잔액에 5만원을 추가하는 프로세스

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

01 동기화가 이루어지지 않는 경우

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

결과값이 17만원이 아니라 15만원이 나온다. 왜 이런일이 발생했을까?

A와 B는 잔액이라는 데이터를 동시에 사용하는데 A가 끝나기도 전에 B가 잔액을 읽어 버렸기 때문에 이러한 결과가 나왔다. 그러므로 올바른 결과가 나오기 위해서는 한 프로세스가 잔액에 접근했을때 다른 프로세스는 기다려야 한다.

02 동기화가 이루어진 경우

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

 


Producer & Consumer problem 예제

물건을 계속 생산하는 생산자(producer, 프로세스 혹은 스레드)

물건을 계속 소비하는 소비자(consumer, 프로세스 혹은 스레드)

'총합'변수 공유

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

 

만약 생산자를 100,000번 소비자를 100,000번 실행하면 총합이 얼마가 나올까?

당연히 0이 나온다고 생각할 수 있지만 다른 값이나 오류가 발생하기도 한다.

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

왜 이러한 결과가 나올까?

동기화 되지 않았기 때문에 발생한 문제이다. 동시에 접근해서는 안되는 자원(총합)에 동시에 접근해서 발생한 문제이다.


공유자원(shared resource)

동시에 접근해서느 안되는 자원은 공유 자원이다. 공유 자원은 여러 프로세스 혹은 스레드가 공유하는 자원이다. 앞서 '잔액','총합'이 이에 해당한다. 전역변수 뿐만 아니라 파일, 입출력 장치, 보조기억장치가 공유자원이 될 수 있다.


임계 구역(critical section)

동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계구역이라고 한다. 임계 구역에 집입하고자 하면 진입한 프로세스 이외에는 대기해야 한다.

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard


레이스 컨디션(race codition)

임계 구역에 동시에 접근하면 자원의 일관성이 깨질 수 있다. 앞서 예시에서 발생한 문제들이 이에 해당한다.

이러한 문제가 왜 발생하는지 알아보자

고급 언어 한 줄로 작성되어있지만 컴퓨터 내부에서는 다음과 같이 여러줄의 저급언어로 변환되어 실행된다.

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

그러므로 컴퓨터는 고급 언어가 아닌 저급 언어를 실행하기 때문에 여러 줄의 저급 언어로 변환된 고급 언어 한 줄을 실행하는 과정에서 문맥 교환이 일어날 수 있다. 저급 언어를 실행한느 과정에서 문맥 교환이 일어난다면 아래와 같은 문제가 발생한다.

출처 : https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard


임계구역 문제를 해결하는 세 가지 원칙

01 상호 배제(mutal exclusion)

한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다.

02 진행(progress)

임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.

03 유한 대기(bounded waiting)

한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계구역에 들어올 수 있어야 한다.(임계 구역에 들어오기 위해 무한정 대기해서는 안된다.)

 

 

 

 

 

 

참고 :  본 내용은개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제강의를 수강하여 작성하였습니다. https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

 

 

 

 

 

 

반응형

댓글