12장 프로세스 동기화
2023. 3. 29. 23:56
12-1) 동기화란
- 동기화의 의미
- 프로세스는 동시다발적으로 실행되므로, 실행 순서와 자원의 일관성을 보장하기 위해 동기화가 필요하다.
- 프로세스 동기화는 프로세스들 사이의 수행 시기를 맞추는 것이다.
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행
- 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
- 실행 순서 제어를 위한 동기화
- Reader와 Writer 프로세스가 동시 실행 중이면 Writer 프로세스가 먼저 끝나야 한다.
- 수정중인 txt를 read하는 것이 올바른 실행 순서가 아니기 때문
- 상호 배제를 위한 동기화
- 현재 수정중인 데이터를 읽어와 추가로 수정하게 되면 이전 프로세스의 결과값이 저장되지 않을 수 있음
- 공유 자원과 임계 구역
- 공유자원은 공동으로 사용하는 자원으로, 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력장치, 보조기억장치가 될 수도 있다.
- 임계 구역은 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미
- 레이스 컨디션(race condition) : 프로세스가 동시 다발적으로 임게 구역의 코드를 실행하면 생기는 문제를 의미
- 상호 배제를 위한 동기화는 두 개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리하는 것
12-2) 동기화 기법
- 뮤텍스 락
- 임계구역에 자물쇠를 달아 한 명만 사용하게 하는 것
- 뮤텍스 락은 동시에 접근해서 안되는 자원에 동시에 접근하지 않도록 만드는 도구
- 상호 배제를 위한 동기화 도구라는 뜻
- 단순한 구현 형태
- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 잠금 해제 역할 : release 함수
acquire() {
while (lock == true)
;
lock = true
}
release() {
lock = false;
}
//사용 법
acquire();
... 변수 접근 코드
release();
- 세마포어(semaphore)
- 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식
- 세마포어는 공유 자원이 여러 개 있을 경우를 상정
- 구현 방법
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 하는지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에, 접근해도 된다는 신호를 주는 signal 함수
wait() // 임계구역 signal() wait() { while (S <= 0) ; S-- } signal() { S+=+ }
- 모니터
- 매번 임계 구역 앞뒤로 wait와 signal 함수를 명시하는 것은 번거롭다.
- 모니터는 사용자가 사용하기에 좀더 편리한 도구
- 모니터는 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리함
- 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 삽입된 순서대로 자원을 사용하게 함
'책 > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
14장 가상메모리 (0) | 2023.04.03 |
---|---|
11장 CPU 스케줄링 (0) | 2023.03.29 |
10장 프로세스와 스레드 (0) | 2023.03.26 |
9장 운영체제 시작하기 (0) | 2023.03.26 |
8장 입출력장치 (0) | 2023.03.23 |