728x90
반응형
Process Synchronization(프로세스 동기화)
- 앞서 멀티 쓰레드와 멀티프로세스를 공부하였습니다.
- 그럼 멀티쓰레드와 멀티프로세스에서 동기화란 무엇인지 살펴 보겠습니다.
프로세스 동기화 란?
- 프로세스 사이에서 실행 순서를 지켜 자원의 일관성을 보장하는 것이다.
- 여러개의 프로세스가 동시적으로 자원에 접근하면 공유 자원을 신뢰 할 수 없다.
- 공유자원: 공동으로 쓸수 있는 자원을 말한다.
- Race Condition: 여러 프로세스가 동시에 공유 자원에 접근하여 읽거나 쓰는 상황
- Critical Section: 여러 프로세스가 동시에 접근 해서 안되는 공유자원 일부를 말한다.
public synchronized void test(){
// 전체가 임계구역이 된다.
}
public synchronized void test1(){
synchronized (object) {
// 임계구역
}
}
동기화 관련 문제
독자 저자 문제 (Readers Writers Problem)
- 독자는 공유저장 공간에 쓰여있는 글을 읽는다.
- 저자는 책에 글을 써서 추가한다
- 이때 독자들은 공유 저장 공간에서 글을 읽지 못한다. - Critcal Section 은 공유저장공간이 된다.
임계구역 문제 해결 조건
- 상호배제(Mutual exclusion) : 하나의 프로세스가 임계 구역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
- 진행(Progress) : 임계 구역에 들어간 프로세스가 없는 상태에서, 들어가려고 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정해주어야 한다.
- 한정대기(Bounded waiting) : 다른 프로세스의 기아(Starvation)를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 구역에 들어갈 때 제한을 두어야 한다.
임계구역 해결 방법
피터슨의 알고리즘
공유 메모리를 활용하여 여러 개의 프로세스가 하나의 자원을 함께 사용할 때 문제가 발생하지 않도록 해준다.
bool flag[2] // 불린 배열(Boolean array)
int turn // 정수형 변수
flag[0] = false // false은 임계 구역 사용을 원하지 않음을 뜻함.
flag[1] = true
turn = 0 // 0 은 0번 프로세스를 가리킴, 1은 1번 프로세스를 가리킴
P0: flag[0] = true // 임계 구역 사용을 원함
turn = 1 // 1번 프로세스에게 차례가 감
while( flag[1] && turn == 1 )
{
// flag[1] 이 turn[1] 을 가지고 있으므로
//현재 사용중임
// 임계 구역이 사용 가능한지 계속 확인
}
// 임계 구역
...
// 임계 구역의 끝
flag[0] = false
P1: flag[1] = true
turn = 0
while( flag[0] && turn == 0 )
{
// 임계 구역이 사용 가능한지 계속 확인
}
// 임계 구역
...
// 임계 구역의 끝
flag[1] = false
세마포어
- 세마포어 S는 정수값변수
- P와 V라는 명령을 통해 동기화를 유지한다.
P(S) {
while S <=0; // 아무것도 하지 않음 (반복문)
S--;
}
V(S) {
S++;
}
test() {
P(S);
// 임계구역
// p1 이 실행중이면
// S값은 0이다.
V(S);
// S값을 증가 했다.
// 임계 구역을 다음 프로세스가 사용 할 수 있다.
}
세마포어와 뮤텍스의 차이
접근 가능한 프로세스 차이
- 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.
- 여러개가 접근 가능하다. - 반면에 뮤텍스는 오직 1개만의 프로세스(또는 쓰레드)만 접근할 수 있습니다.
락을 해제 할수 있는 차이
- 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.
- V(S) 를 다른 프로세스가 호출시 해제된다. - 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
참고: https://ko.wikipedia.org/wiki/%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4
세마포어 - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
728x90
반응형
'Development > OS' 카테고리의 다른 글
[OS] 가상메모리 (0) | 2021.08.18 |
---|---|
[OS] Deadlock(교착상태), Starvation(기아상태) (0) | 2021.08.18 |
[OS] Synchronous(동기), Asynchronous(비동기) (0) | 2021.08.18 |
[OS] 프로세스와 쓰레드 그리고 차이점 (0) | 2021.08.18 |
댓글