👩‍💻 알고리즘/🎛️ 컴퓨터 구조 & OS

[혼공학습단 12기] 12강 - 프로세스 동기화

오브 🧙‍♂️ 2024. 8. 23. 23:55

[ 동기화 ]

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

 

시기 1. 실행 순서 제어

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

EX) 워드 프로세스에서 쓰는 과정이 수행되어야 읽는 과정이 수행되는 것

 

시기 2. 상호 배제

: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근 (동시 사용을 피하기 위해 사용)

EX) 생산자, 소비자 문제

 

공유자원 

EX) 전역 변수, 파일, 입출력장치, 보조기억장치 ... 등등 

임계 구역

공유자원 중에서 두 개 이상의 프로세스를 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역

레이스 컨디션

잘못된 실행으로 인해 여러 프로세스가 동시에 임계 구역 코드를 실행해 발생하는 문제

데이터 일관성이 깨지는 문제 발생

 

상호배제를 위한 동기화

(1) 상호배제

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

(2) 진행

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

(3) 유한 대기

한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가 임계구역에 들어올 수 있어야 함

(=임계 구역에 들어오기 위해 무한정 대기하면 안됨)

 

동기화를 위한 도구 1 - [ 뮤텍스 락 ]

동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구 ( =상호배제를 위한 동기화 도구 )

 

바쁜 대기

임계구역이 잠겨 있으면 프로세스는 반복적으로 lock를 확인 

 

옷가게 탈의실에서 사람이 있을 때 자물쇠 걸고, 사람이 없으면 자물쇠를 푸는 기능

 

자물쇠 : 전역변수 lock

 

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

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

임계 구역이 잠겨 있으면 열릴 때까지(lock이 false가 될 때까지) 임계구역을 반복적으로 확인하고, 임계 구역이 열려 있으면 임계 구역을 잠그는(lock을 true로 바꾸는) 함수

 

임계구역 잠금 해제 역할 : release 함수

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

현재 잠긴 임계 구역을 열어주는(lock을 false로 바꾸는) 함수

 

=> 락을 획득할 수 없다면 무작정 대기 / 락을 획득할 수 있다면 임계 구역을 잠그고 임계 구역에서 작업 진행 / 임계 구역에서 나올 땐 임계 구역 잠금 해제 -> 무한정 반복하며 확인하므로 CPU 주기 낭비

동기화를 위한 도구 2 - [ 세마포 ]

뮤텍스 락과 비슷하지만, 좀 더 일반화된 방식

 

뮤텍스 락은 탈의실이 하나 있는 경우를 가정하지만, 세마포는 탈의실이 여러 개여도 적용이 가능

: 공유 자원이 여러 개 있는 상황도 OK

 

종류

1. 이진 세마포 (binary semaphore)

2. 카운팅 세마포 (counting semaphore)

 

멈춤/대기 상태를 알려주는 기차 신호기

 

임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원 개수) : 전역 변수 S

 

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

임계 구역에 진입할 수 있는 프로세스의 개수가 0이하면 사용할 수 있는 자원이 있는지 반복 확인하고,

임계 구역에 진입할 수 있는 프로세스 개수가 하나 이상이면 S를 하나 감소시키고 임계 구역 진입

 

임계 구역 앞에서 기다리는 프로세스에게 '이제 가도 됨' 신호를 주는 역할 : signal 함수

임계 구역에서의 작업을 마친 후 S를 1 증가시킴

 

=> wait 함수는 사용할 수 있는 자원이 없을 경우 해당 프로세스 상태를 대기 상태로 만들고, 그 프로세스의 PCB를 세마포를 위한 대기 큐에 집어넣는다. 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 signal 함수는 대기 중인 프로세스를 대기 큐에서 제거하고, 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮긴다. 

 

동기화를 위한 도구 3 - [ 모니터 ]

공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리

프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근할 수 있음

 

매번 임계 구역 앞뒤에 signal, wait 함수를 명시해야 하는 세마포에 비해 사용하기 편리

 

조건 변수

프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수

측정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 할 때 사용 ( EX. wait, signal 함수 )

 

363p 1번.
4번, 반드시 대기 상태에 들어가야 하는 건 아님