동기화의 의미
- 동시적으로 실행되는 많은 프로세스들는 서로 데이터를 주고받으며 협력하여 실행 될 수 있음
- 예를 들어 워드 프로세서에서는 사용자로부터 입력을 받는 프로세스와 입력한 내용의 맞춤법을 검사하는 프로세스
- 입력한 내용에 화면에 출력해 주는 프로세스가 있음
- 이렇게 협력적으로 실행되는 프로세스들은 아무렇게나 마구 동시에 실행 해서는 안됨x
- 프로세스 동기화는 프로세스들 사이의 수행 시기를 맞추는 것을 의미함
프로세스의 사이의 수행 시기를 맞추는데 있어서 크게 두가지가 있음
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
- 상호 배제 : 동시에 접근해서는 안 되는 자원의 하나의 프로세스만 접근하게 하기
첫쨰, 실행 순서 제어를 위한 동기화
- 이 두 프로세스는 무작정 아무 순서대로 실행되서는 안됨 x
- Reader 프로세스가 Book.txt에 값을 저장하기도 전에 Reader 프로세스가 Book.txt를 읽는 것은 올바른 실행 순서가 아님
- Reader 프로세스는 Book.txt 안에 값이 존재한다는 특정 조건이 만족되어야만 실행을 이어나갈 수 있음
둘째, 상호 배제를 위한 동기화
- 상호 배제는 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘
-> 가령 계좌에 10만 원이 저축되어 있다고 가정해 보자
-> 프로젝트 A 는 현재 저축된 금액에 2만원을 넣는 프로세스
-> 프로젝트 B 는 현재 저축된 금액에 5만원을 넣는 프로세스
-> 프로세스 A와 B가 동시에 실행되었다고 가정
-> 우리는 당연히 실행 결과 17만 원이 계쫘에 남을 것을 기대함
-> 하지만 동기화가 제대로 이루어 지지 않으면 위와 같은 그림의 경우가 생김
- 동시에 접근하면 안 되는 자원에 동시에 접근하지 못하게 하는 것을 상호 배제를 위한 동기화
생산자와 소비자 문제
- 물건을 계속해서 생산하는 프로세스인 생산자와 물건을 계속해서 소비하는 프로세스인 소비자로 이루어져 있음
- 생산자와 소비자는 총합이라는 데이터를 공유하고 있음
- 생산자는 버퍼에 물건을 넣은 후, 물건의 총합에 해당하는 변수를 1 증가시킴
- 소비자는 버퍼에 물건을 빼낸 후 물건의 총합에 해당하는 변수를 1 감소시킴
공유 자원과 임계 구역
- 공유 자원은 전역 변수가 될 수도 있고, 파일이 될 수도 입출력 장치, 보조기억장치가 될 수도 있음
- 이 공유자원 중에서는 두 개이상의 프로세스를 동시에 실행하면 문제가 발생하는 자원이 있음
- 임계 구역은 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
- 두 개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기해야 함
- 임계 구역에 먼저 진입한 프로세스의 작업이 마무리되면 기다렸던 프로세서가 진입함
- 레이스 컨디션은 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제를 발생하는 경우를 말함
- 컴퓨터는 고급 언어가 아닌 저급 언어를 실행함
- 여러 줄의 저급 언어로 변환된 고급 언어 한 줄을 실행하는 과정에서 문맥 교환이 일어날 수 있음
- 이떄 상호 배제를 위한 동기화는 이와 같은 일이 발생하지 않도록 두 개이상의 프로세스가 임계 구역에 접근 하지 x
상호 배제를 위한 동기화
- 상호 배제는 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올x
- 진행은 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함
- 유한 대기는 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함
12-2. 동기화 기법
뮤텍스 락
- 상호 배제를 위한 동기화 도구
- 임계 구역에 진입하는 프로세스는 내가 지금 임계 구역에 있음을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둘 수도 있음
- 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입 가능o
뮤텍스락의 형태는 하나의 전역 변수와 두 개의 함수로 구현 가능
- 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
- acquire 함수는 프로세스가 임계구역에 진입하기 전에 호출하는 함수
- 만일 임계 구역이 잠겨 있다면 임계 구역이 열릴 때 까지 임계 구역을 반복적으로 확인하고, 열려 있다면 임계 구역을 잠금
- release 함수는 임계 구역에서의 작업이 끝나고 호출하는 함수
- 현재 잠긴 임계 구역을 열어주는 함수
- 프로세스는 락을 획득할 수 x -> 무작정 기다림
- 락을 획득할 수 o -> 임계 구역을 잠근 뒤 임계 구역에서의 작업을 진행함
- 임계 구역에서 빠져나올 때는 다시 임계 구역의 잠금을 해제함 -> 임계 구역 보호 o
- 바쁜 대기는 탈의실 문이 잠겨 있는지 쉴 새 없이 반복하며 확인해 보는 것과 같음
세마포
- 뮤텍스 락과 비슷하지만 조금 더 일반화된 방식의 동기화 도구
- 공유 자원이 여러 개 있을 경우 여러 개의 프로세스가 각각 공유자원의 접근이 가능해야 함
세마포는 하나의 변수와 두 개의 함수로 이루어져 있음
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 이제 가도 좋다고 신호를 주는 signal 함수
wait 함수
Signal 함수
해결방법
모니터
- 모니터는 그림처럼 공유 자원과 공유 자원이 접근하기 위한 인터페이스(통로)를 묶어 관리함
- 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근 하도록 함
- 이를 위해 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입
- 큐에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 함
- 즉 모니터는 공유 자원을 다루는 인터페이스에 접근하기 위한 큐를 만듬
- 모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화를 제공함
- 조건 변수는 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
'공부 기록일지' 카테고리의 다른 글
유성이의 공부일지(14) - 혼자공부하는 컴퓨터 구조 + 운영체제 14장 (0) | 2024.07.15 |
---|---|
유성이의 공부일지(13) - 혼자공부하는 컴퓨터 구조 + 운영체제 13장 (0) | 2024.07.13 |
유성이의 공부일지(11) - 혼자공부하는 컴퓨터 구조 + 운영체제 11장 (0) | 2024.07.11 |
유성이의 공부일지(10) - 혼자공부하는 컴퓨터 구조 + 운영체제 10장 (0) | 2024.07.10 |
유성이의 공부일지(9) - 혼자공부하는 컴퓨터 구조 + 운영체제 9장 (0) | 2024.07.09 |