경쟁상태?
여러 프로세스 또는 스레드에서 자원에 접근하는 순서에 따라 결과 값이 달라질 수 있다.
이러한 공유 자원에 동시에 접근해 경쟁하는 상태를 경쟁상태라고 한다.
ex) 우유 문제
1. A가 냉장고를 열어 우유 없는 것을 확인.
2. A가 우유를 사러 마트에 감.
3. A가 돌아오기 전 B가 냉장고를 열어 우유 없는 것을 확인.
4. B가 우유를 사러 마트에 감.
목표 : 냉장고에 우유 1개
결과 : 냉장고에 우유 2개
위와 같은 문제를 해결하려면 프로세스 동기화가 이루어져야 한다.
임계영역?
공유 자원에 접근할 수 있고 접근 순서에 따라 결과가 달라지는 코드 영역을 임계 영역이라 한다.
임계 영역에 동시 접근할 수 없도록 하는 3가지 조건
- 상호배제 기법(mutual exclusive) : 어떤 프로세스가 임계영역을 실행 중일 때 다른 프로세스가 임계영역에 접근할 수 없다. (기법으로는 뮤텍스, 세마포어가 있다)
- 진행(progress) : 임계 영역을 실행 중인 프로세스가 없을 때 다른 프로세스가 임계 영역을 실행한다.
- 한정된 대기(bounded waiting) : 임계 영역에 접근요청을 했을때 무한한 시간을 기다리지 않는다.
뮤텍스?
락을 가진 프로세스만 공유 자원에 접근할 수 있게 하는 방법이다.
ex) 열쇠, 화장실이 1개씩 있는 상황
1. A가 열쇠를 가지고 화장실에 간다.
2. B는 열쇠가 없어 기다린다.
3. A가 화장실에서 나와 열쇠를 반납하면 B가 화장실에 간다.
화장실 - 임계영역
열쇠 - 락
A,B - 프로세스
이처럼 프로세스가 임계 영역에 락을 건다고 해서 락킹 매커니즘이라고도 한다.
임계 영역에 접근하지 못한(B)는 락을 얻기 위해 기다리는 동안 반복문을 돌면서 확인한다. -> 바쁜 대기의 한 종류인 스핀락이라고 한다. ( 스핀락 : 프로세스가 대기 상태가 되지 않고 반복문을 돌면서 확인한다.)
세마포어?
공유 자원에 접근할 수 있는 프로세스의 수를 정해 접근을 제어하는 방법.
ex) 열쇠, 화장실이 3개씩 있는 상황
1. A,B,C가 각각 열쇠 1개씩 가지고 화장실에 간다.
2. D는 열쇠가 없어 화장실에 가지 못한다.
3. C가 나와 D가 화장실에 간다.
( 공유 자원에 접근한 프로세스가 접근을 해제하며 다른 프로세스가 접근할 수 있도록 신호를 보낸다고 하여 시그널링 메커니즘 이라고도 한다.)
동기, 블로킹? (동기는 작업순서, 블로킹은 대기를 구분하기 위한 개념)
- 동기(synchronization) : 여러 작업을 처리할 때 작업 순서를 보장함
- 비동기(asynchronization) : 여러 작업을 처리할 때 작업 순서를 보장하지 않음.
- 블로킹(blocking) : 작업을 수행할 때 대기할 수 있다는 것을 의미하며 작업 순서를 보장하지 않음.
- 넌블로킹(non-blocking) : 작업 시작 시 대기 없이 수행함.
교착상태?(데드락)
상호배제 기법으로 인해 2개 이상의 프로세스가 각각 자원을 가지고 있으면서 서로의 자원을 요구하며 기다리는 상태.
교착상태가 발생하는 4가지 조건(전부 만족해야 교착 상태가 생긴다.)
- 상호배제(mutual exclustion) : 하나의 공유 자원에 하나의 프로세스만 접근할 수 있다.
- 점유와 대기(hold and wait) : 프로세스 최소 하나 이상이 자원을 점유하고 있는 상태에서 추가로 다른 프로세스에서 사용중인 자원을 점유하기 위해 대기한다.
- 비선점(non-preemption) : 다른 프로세스에 할당된 자원을 뺏을 수 없다.
- 순환 대기(circular wait) : 프로세스가 자원을 점유하며 앞,뒤의 프로세스에 자원을 요구한다.
교착 상태를 피하는 방법은 위 4가지 조건 중 한 가지를 제거하면된다.
- 상호배제 부정 : 여러 프로세스가 동시에 공유 자원 사용 가능.
- 점유와 대기 부정 : 프로세스가 실행 되기 전에 필요한 모든 자원을 미리 할당하여 프로세스의 대기를 없앤다. Or 프로세스가 자원을 점유하지 않은 상태에서만 자원을 요구하게 한다.
- 비선점 부정 : 자원을 점유한 프로세스가 다른 자원을 요구할 때 점유한 자원을 반납.
- 순환 대기 부정 : 자원을 선형 순서로 정렬하여 고유 번호를 할당한다. 각 프로세스에서 요구할 수 있는 번호의 방향을 정하여 한쪽 방향으로만 자원을 요구하게 한다.
'CS > 운영체제' 카테고리의 다른 글
운영체제 - 스케줄링 (1) | 2024.06.12 |
---|---|
운영체제 - 스레드 안전, IPC, 좀비 프로세스 (1) | 2024.06.12 |
운영체제3 - 프로세스 상태도, 멀티 프로세스/스레드 (1) | 2024.06.09 |
운영체제2 - 프로세스, 스레드, PCB (1) | 2024.06.09 |
운영체제 1 - OS, CPU, 메모리, 커널 (1) | 2024.06.08 |