프로세스들은 자원을 공유하기 때문에 동기화가 필요하다.
∎ 순서를 맞추기 위한 동기화
ex) 파일을 읽기 전에 쓰기가 먼저 이루어져야 한다.
∎ 동시 접근을 막는 동기화
- ex) 계좌에 돈을 입금, 출금할 때 잔액을 동기화 시켜야한다.
- 전역 변수, 파일, 입출력장치, 보조기억장치, ... 등과 같은 공유자원에 동시 접근 막기
- 임계 구역을 두어 접근을 관리한다.
- 동시 접근으로 자원의 일관성이 깨지는 것을 Race Condition(레이스 컨디션)이라고 부른다.
∎ 레이스 컨디션 막는 원칙 (기술 면접)
1. 상호 배제 : 임계 구역에 진행중인 프로세스가 있다면 다른 프로세스의 접근을 막아야 한다.
2. 진행 : 임계 구역에 아무도 없다면 접근할 수 있어야 한다.
3. 유한 대기 : 언젠가는 접근할 수 있어야 한다.
∎ 상호 배제를 위한 동기화 기법 종류
⦁ 공유 자원 1개일 때 ➜ 뮤텍스 락
전역 변수 lock이 false라면 임계 구역에 들어가 acquire 함수로 잠그고, 다 사용하고 나면 release 함수로 열어 놓는다.
⦁ 공유 자원이 여러개일 때 ➜ 카운팅 세마포
- wait 함수가 '기다려야 할지', '출발해도 될지' 알려준다.
- 접근 가능한 자원 수는 전역 변수 S로 관리한다.
- signal함수는 '가도 된다'는 신호를 준다.
⦁ 그런데 뮤텍스 락과 카운팅 세마포는 busy waiting (while을 돌며 계속 노크)
낭비를 막기 위한 해결 법은?
➜ 사용 가능 자원이 없으면 프로세스를 일단 큐에 넣고, sleep( ) 시킨다. 다시 자원이 생기면 wake( )한다.
세마포를 활용하여 실행 순서를 동기화할 수도 있다.
∎ wait, signal 실수를 막는 '모니터' 방법
- 실행 순서 동기화
- 프로세스들이 큐에서 차례대로 자원에 접근한다.
- 인터페이스를 통해 자원에 접근한다.
- 상호 배제 동기화
- 변수를 통해 wait, signal 함수를 호출한다.
'CS 지식 > 운영체제' 카테고리의 다른 글
컴퓨터 자원 - 프로세서, 메모리 (0) | 2024.08.14 |
---|---|
데드락 (DeadLock, 교착 상태)과 예방법 (0) | 2024.08.13 |
메모리 - 커널 영역, 사용자 영역 (0) | 2024.08.13 |
CPU 스케줄링 알고리즘 (1) | 2024.08.13 |
프로세스와 스레드 개념 (0) | 2024.08.13 |