프로세스 동기화(Synchronization)
프로세스들 사이의 수행 시기를 맞추는 것
실행 순서제어를 위한 동기화
- 프로세스의 완료 순서가 있어 올바른 순서대로 실행하게 하는 것
상호 배제를 위한 동기화
공유가 불가능한 자원의 동시 사용을 피하기 위함
생산자와 소비자 문제
- 생산자와 소비자는 총합이라는 데이터를 공유
- 생산자는 버퍼에 물건을 넣은 후 물건의 총합에서 변수 1을 증가
- 소비자는 버퍼에 물건을 빼낸 후 물건의 총합에서 변수 1을 감소
- 이 두 개를 동시에 10만번 실행하면 공유자원인 총합을 사용하는 과정에서 충돌이 일어나 올바른 총합이 나오지 않음
공유 자원
- 생산자와 소비자 문제에서 총합은 공유 자원에 해당한다.
임계 구역
- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 말함
레이스 컨디션
- 생산자와 소비자 문제에서 동시에 실행하여 오류가 발생했는데 이를 레이스 컨디션이라고 함
임계 구역 문제 해결을 위한 원칙
상호 배제
- 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어갈 수 없다.
진행
- 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 진입할 수 있어야 한다.
유한 대기
- 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 진입할 수 있어야 한다.
동기화 기법
뮤텍스 락
- 동시에 접근해서 안되는 자원에 동시에 접근하지 않도록 만드는 도구이다.
- 상호 배제를 위한 동기화 도구
- 임계 구역에 진입한 프로세스는 뮤텍스 락을 이용해 다른 프로세스들이 임계 구역에 접근을 막을 수 있다.
- 구현
- 자물쇠 : 프로세스들이 공유하는 전역 변수 lock
- 자물쇠 잠그는 역할 : acquire 함수
- 자물쇠 여는 역할 : release 함수
세마포어
- 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정했고 세마포어는 여러 공유 자원에 접근하는 프로세스를 상정했다.
- 구현
- 임계 구역에 진입할 수 있는 프로세스 개수 : 전역번수 S
- 임계 구역에 들어가도 괜찮은지 알려주는 신호등 : wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 들어가도 괜찮다는 신호수 : signal 함수
모니터
- 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고 삽입된 순서대로 하나씩 공유 자원을 이용
- 모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화 제공
- 세마포어와 같이 실행 순서 제어를 위한 조건 변수를 사용
- 조건 변수 : 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
참고) 혼자 공부하는 컴퓨터 구조+운영체제
'공부 > 컴퓨터구조, 운영체제' 카테고리의 다른 글
14장 가상 메모리 (0) | 2023.04.10 |
---|---|
13장 교착상태 (0) | 2023.04.10 |
11장 CPU 스케줄링 (0) | 2023.04.10 |
10장 프로세스와 스레드 (0) | 2023.03.30 |
9장 운영체제 시작하기 (0) | 2023.03.30 |