Be realist
5. 프로세스 동기화 본문
여러 프로세스가 병행으로 수행되어 발생하는 문제를 해결하는 것을 프로세스 동기화라 한다.
다른 프로세스와 공동으로 사용하는 변수, 테이블, 파일 등을 변경하는 부분을 임계 구역(critical section)으로 둔다.
각 프로세스는 임계구역에 진입하기 전에 허가를 받아야 하고, 이 코드를 진입 구역(entry section)이라 한다.
허가를 받아 임계구역을 실행한 다음에는 다른 프로세스들이 진입할 수 있도록 한다. 이 코드를 출구 구역(exit section)이라 한다.
이외의 코드 부분을 잔류 구역(remainder section)이라 한다.
critical section 문제를 해결하는 메커니즘은 다음 세 가지 요건을 충족해야 한다.
- 상호 배제 (mutual exclusive)
- 진행 (progress)
- 한계 대기 (bounded waiting) : 임계 영역에 대한 진입 요청 후 무한히 기다리지 않는다.
1) 임계 영역으로 진입 가능성을 확인하고 진입을 원자적으로 처리한다.
- 경쟁 조건이 발생하지 않도록 하고
- 진입하게 되면 임계 영역을 잠금(lock) —> 락은 동기화의 가장 근본적인 수단이다!!
2) 경쟁 조건이 발생하더라도 안전하게 처리
- lock을 위해 flag 표시를 해야 하는데, 이 flag도 결국은 또 다시 공유하게 되는 변수인 것!
==> 이를 해결하기 위한 고전적 알고리즘으로 peterson’s solution, dekker’s solution 이 있다.
세마포어 :
검사 연산 -> wait(S) == P(S) 락의 획득
증가 연산 -> signal(S) == V(S) 락의 해제
스레드의 동기화에는 뮤텍스를 사용한다.
뮤텍스는 ‘주인’의 개념이 있어 lock을 건 쓰레드만 unlock 할 수 있다.
'Operating System' 카테고리의 다른 글
6. CPU 스케줄링 (0) | 2018.04.16 |
---|---|
4. 스레드, 멀티스레드 프로그래밍 (0) | 2018.04.16 |
3. 프로세스 (0) | 2018.04.16 |
2. 컴퓨터 시스템 구조 (0) | 2018.04.16 |
1. 운영체제란? (0) | 2018.04.16 |