728x90
Critical Section
- 공통 자원을 건드릴 수 있는 공간이다.
- 멀티 프로세싱에 의한 오류는 보통 여기서 발생한다.
- 해결 방안이 갖춰야하는 것
- Mutual exclusion - 오직 한 쓰레드만 진입
- Progress - 진입 결정은 유한 시간 내
- Bounded waiting - 어느 스레드라도 유한 시간 내에 해결해야함.
프로세스/쓰레드 동기화
- 임계구역 문제 해결 (틀린 답 X)
- 프로세스 실행 순서 제어
- 비효율성 제거
세마포어
- 유명한 동기화 해결 도구
- acquire()
- release()
- 세마포어는 상호베타를 위해 사용한다.
void acquire(){
value--;
if(value < 0){
add this process/thread to list
block
}
}
void release(){
value++;
if(value <= 0){
remove a process/thread P from list
wakeup
}
}
- 세마포어의 중요한 함수들이다. 여기서 세마포어는 value를 갖고 있는데, 이 value가 임계구역에 들어갈 수 있는 프로세스/쓰레드의 개수이다.
- 세마포어는 각각의 대기큐(waiting queue)를 가지고 있다.
- P1이 임계구역 입장 시도 → aquire 호출 value = 0
- P2 임계구역 입장 성공
- P2가 임계구역 입장 시도 → aquire 호출 value = -1
- P2는 임계구역 입장 실패 → 대기큐 입장
- P1이 작업을 마치고 퇴장 → release 호출 value = 0
- P2가 임계구역 입장 성공 → aquire 호출 value = -1
- 반복
그림으로 표현하면 다음과 같다.
- p1이 먼저 critical section에 들어갔기 때문에 p2는 들어갈 수 없었다. 그래서 대기큐에 들어갔고 블락 상태에 빠져 절대로 스스로 나올 수 없다.
- p1이 빠져나오며 p1을 깨워주었고 덕분에 대기큐에서 나올수있었다.
- 이렇게 세마포어는 상호배타를 실현한다.
Ordering
- 세마포어의 순서를 설정하고 싶을 때
- 초기 value 세팅을 0으로한다.
- 예제) 언제나 입금이 먼저되게 하려면?
- 세마포어 초기 value = 0;
- 세마포어.acquire를 먼저 출금 앞에 쓰고, 입금 뒤에 세마포어.release를 작성한다.
Critical Section
- 공통 자원을 건드릴 수 있는 공간이다.
- 멀티 프로세싱에 의한 오류는 보통 여기서 발생한다.
- 해결 방안이 갖춰야하는 것
- Mutual exclusion - 오직 한 쓰레드만 진입
- Progress - 진입 결정은 유한 시간 내
- Bounded waiting - 어느 스레드라도 유한 시간 내에 해결해야함.
프로세스/쓰레드 동기화
- 임계구역 문제 해결 (틀린 답 X)
- 프로세스 실행 순서 제어
- 비효율성 제거
세마포어
- 유명한 동기화 해결 도구
- acquire()
- release()
- 세마포어는 상호베타를 위해 사용한다.
void acquire(){
value--;
if(value < 0){
add this process/thread to list
block
}
}
void release(){
value++;
if(value <= 0){
remove a process/thread P from list
wakeup
}
}
- 세마포어의 중요한 함수들이다. 여기서 세마포어는 value를 갖고 있는데, 이 value가 임계구역에 들어갈 수 있는 프로세스/쓰레드의 개수이다.
- 세마포어는 각각의 대기큐(waiting queue)를 가지고 있다.
- P1이 임계구역 입장 시도 → aquire 호출 value = 0
- P2 임계구역 입장 성공
- P2가 임계구역 입장 시도 → aquire 호출 value = -1
- P2는 임계구역 입장 실패 → 대기큐 입장
- P1이 작업을 마치고 퇴장 → release 호출 value = 0
- P2가 임계구역 입장 성공 → aquire 호출 value = -1
- 반복
그림으로 표현하면 다음과 같다.
- p1이 먼저 critical section에 들어갔기 때문에 p2는 들어갈 수 없었다. 그래서 대기큐에 들어갔고 블락 상태에 빠져 절대로 스스로 나올 수 없다.
- p1이 빠져나오며 p1을 깨워주었고 덕분에 대기큐에서 나올수있었다.
- 이렇게 세마포어는 상호배타를 실현한다.
Ordering
- 세마포어의 순서를 설정하고 싶을 때
- 초기 value 세팅을 0으로한다.
- 예제) 언제나 입금이 먼저되게 하려면?
- 세마포어 초기 value = 0;
- 세마포어.acquire를 먼저 출금 앞에 쓰고, 입금 뒤에 세마포어.release를 작성한다.
'CS > 운영체제(OS)' 카테고리의 다른 글
OS - 식사하는 철학자 문제와 교착상태(DeadLock) (0) | 2023.11.27 |
---|---|
전통적인 동기화 문제 (0) | 2023.11.22 |
OS - 프로세스 동기화 개념 (0) | 2023.11.11 |
OS - CPU 스케줄링(3), 프로세스의 생성과 소멸, 쓰레드 (0) | 2023.11.07 |
OS - CPU 스케줄링(2) (0) | 2023.11.04 |