게으른 나에게

[혼자 공부하는 컴퓨터구조+운영체제] "chapter12. 프로세스 동기화" 본문

My Study/서적 공부

[혼자 공부하는 컴퓨터구조+운영체제] "chapter12. 프로세스 동기화"

handbefore 2024. 8. 17. 00:42

12-1 동기화란

동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하여 실행되는 프로세스들은 실행순서와 자원의 일관성을 보장하기 때문에 반드시 동기화 되어야 함.

 

동기화 의미

프로세스 동기화: 프로세스들 사이의 수행시기를 맞추는 것.

 

"프로세스들 사이의 수행시기를 맞추는 것"

1. 실행순서 제어

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

실행순서를 위한 동기화: 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것.

Writer라는 프로세스(Book.txt파일에 값을 저장하는 값)와 Reader라는 프로세스(Book.txt파일에 저장된 값을 읽어들이는 프로세스)가 동시에 실행 중

Reader 프로세스는 Writer프로레스 실행이 끝나야 실행 가능. = Reader 프로세스는 'Book.txt 안에 값이 존재한다'는 특정 조건이 만족되어야만 실행 이어나갈 수 있음.

 

 

2. 상호배제

상호배제: 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘.

상호배제를 위한 동기화: 동시에 접근해서는 안되는 자원에 동시에 접근하지 못하게 하는 것

 

계좌에 10만원 저축되어 있는 상태.

프로세스 A: 2만원 저축.

프로세스 B: 5만원 저축.

 

프로세스 A

① 계좌의 잔액 읽어 들임.

② 읽어 들인 잔액에 2만원 더함.

③ 더한 값 저장

 

프로세스 B

① 계좌의 잔액 읽어 들임.

② 읽어 들인 잔액에 5만원 더함.

③ 더한 값 저장

 

동기화가 제대로 이루어지지 않은 경우

동기화가 제대로 이루어진 경우(올바르게 실행하기 위해서는 한 프로세스가 잔액에 접근했을 때 다른 프로세스 기다려야 함)

 

생산자와 소비자 문제

생산자: 물건을 계속해서 생산하는 프로세스

소비자: 물건을 계속해서 소비하는 프로세스

생산자와 소비자는 동시에 실행되는 스레드 될 수 있음.

 

생산자와 소비자는 '총합'이라는 데이터 공유.

생산자: 버퍼에 물건을 넣은 후, 물건의 총합에 해당하는 변수 1 증가.

소비자: 버퍼에 물건을 빼낸 후 물건의 총합에 해당하는 변수 1 감소.

 

물건 처음에 10개 존재.

생산자와 소비자 동시에 실행 -> 총합이 10이 아닌 다른수  or  실행중 오류

제대로 동기화 되지 않았기 때문에 발생한 문제

 

공유 자원과 임계 구역

공유자원: 전역변수 / 파일 / 입출력장치 / 보조기억장치 (두개 이상 프로세스 동시에 실행하면 문제가 발생하는 자원 존재)

임계구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역

두개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기.

레이스 컨디션: 잘못된 실행으로 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제 발생. 데이터의 일관성 깨지는 문제 발생.

ex) 계좌 잔액 문제, 생산자 소비자 문제

 

레이스컨디션이 발생하는 근본적 이유

고급언어 실행과정 -> 저급언어 변환 실행

이때 "문맥교환"

 

=> 상호배제를 위한 동기화: 이와 같은 일이 발생하지 않도록 두개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리.

 

임계 구역 문제 해결 방법

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

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

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

 

 

 


 

 

 

12-2 동기화 기법

뮤텍스 락

뮤텍스 락: 동시에 접근해서는 안되는 자원에 동시 접근하지 않도록 만드는 도구. 상호배제 위한 동기화 도구. 임계 구역에 있음을 알리는 도구.

 

하나의 전역변수와 두개의 함수로 구현

-자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock

-임계 구역을 잠그는 역할: acquire 함수

-임계 구역의 잠금을 해제하는 역할: release 함수

 

acquire 함수

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

임계 구역이 잠겨있다면, 열릴 때 까지(lock -> false), 반복적 확인.

임계 구역이 열려 있다면, 임계 구역을 잠그는 (lock -> true) 함수

 

release 함수

임계 구역에서의 작업이 끝나고 호출하는 함수.

현재 잠긴 임계 구역을 열어주는 (lock -> false)함수

 

 

임계 구역 전후로 호출함으로써 하나의 프로세스임계 구역에 진입 가능.

 

바쁜 대기: 임계구역이 잠겨있을 때 lock을 반복적 확인.

 

세마포

뮤텍스 락의 단점(하나의 공유 자원에 접근하는 프로세스)을 상정한 방식.

공유 자원 여러개 있는 상황에서도 적용 가능.

 

-전역 변수 S: 임계 구역에 진입할 수 있는 프로세스 개수

-wait 함수: 임계 구역에 들어가도 좋은지, 기다려야 할지 알려주는 함수

-signal 함수: 임계 구역 앞에 기다리는 프로세스에 가도 좋다고 신호를 주는 함수

 

wait 함수

임계 구역에 진입할 수 있는 프로세스 개수 0 이하 -> 사용할 수 있는 자원 반복적 확인

임계 구역에 진입할 수 있는 프로세스 개수 1개 이상 -> S 1 감소, 임계 구역 진입

 

signal 함수

임계 구역에서의 작업을 마친 뒤 S 1 증가.

 

busy wait를 극복하지 못한 세마포

 

문제

사용할 수 있는 공유 자원이 없는 경우 프로세스 무작정 무한히 반복하며 S 확인. CPU 주기 낭비.

 

-wait 함수

만일 사용할 수 있는 자원 없을 경우 -> 프로세스 상태, 대기 -> 프로세스의 PCB를 세마포를 위한 대기큐에 넣음

-> 다른 프로세스가 임계 구역에서 작업 끝나면 singal 함수 호출 -> signal 함수 대기중인 프로세스 대기 큐에서 제거 -> 프로세스 상태 준비상태 변경, 준비큐 이동.

 

 

세마포의 변수를 S를 0으로 두고 먼저 실행할 프로세스 뒤에 signal 함수,

다음에 실행할 변수 wait 함수.

 

모니터

세마포의 단점.

 

모니터: 공유 자원과 공유 자원에 접근 위한 인터페이스(통로) 묶어 관리. 프로세스는 반드시 인터페이스 통해서만 공유 자원 접근.

공유 자원에 접근하고자 하는 프로세스 큐 삽입 -> 큐에 삽입된 순서대로 하나씩 공유자원 이용

 

조건 변수: 프로세스나 스레드의 실행순서 제어하기 위해 사용하는 특별 변수. wait, signal 연산 수행.

wait 연산: 호출한 프로세스 상태 -> 대기 상태 -> 일시적 조건 변수에 대한 대기큐 삽입 

signal 연산: wait 연산으로 일시 중지된 프로세스 호출하여 실행 재개.

① 특정 프로세스가 아직 실행될 조건이 되지 않았을 때 wait 통해 실행 중단.

② 특정 프로세스가 실행될 조건이 충족되었을 때 signal을 통해 실행 재개.

 

 


출처

https://hongong.hanbit.co.kr/%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/

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr