-
(1) Peterson's Algorithm ( for two processes )
1. 일을 하고 싶은 경우 [ 임계 지역에 들어 갈 준비 끝 ] => Flag : False -> True
2. 다른 프로세스가 Flage를 true로 전환해놨다면, Turn을 통해 순서를 정함
3. 먼저 진입한 프로세스가 자신의 일을 끝내면 Turn 을 넘겨준다.
* Peterson algorithm's 3 conditions
[1] 상호배제 ( Mutual Exclusion )
P1은 자신의 턴일 때 혹은 P2가 진입 의사가 없을 때 들어가게 된다.
그러한 이유로, 두개의 프로세스가 동시 진입이 불가능하다.
[2] 진입 (Porgress)
P1은 flag[2] = ture & turn = 2 일때만 진입이 불가능하다.
=> 즉, 자신에게 맞는 상황이 오면 임계 영역에 진입한다.
[3] Bounded Waiting [ 한정된 대기]
P1은 P2가 자신의 일을 마치고 나오면 진입한다. => 무한 대기가 이루어 질 수 없다.
(2) Mutex Lock
프로세스 동기화를 위한 하드웨어적인 접근은 너무 복잡하고 어렵다
=> 이에 따라, mutex lock이라는 software적 접근법이 등장하게 된다.
lock.acquire을 통해 임계지역의 접근을 막고, Release를 통해 해제한다.
대표사진 삭제
사진 설명을 입력하세요.
단점 : 하나의 프로세스가 임계영역 안에 있을 때는, 다른 프로세스가 들어가기 전까지 무한 루프 (= busy waiting)으로 대기해야한다.
(3) Semaphore ( for multiple Processes by software : wait () = P, signal() = V )
- 세마포어는 busy waiting을 통제 할 수 있다. ( block() : 세마포어의 값이 wait & not positive -> go to wating queue[linked list ( contain PCB , FIFO) ] , wake())
- 세마포어의 조작은 "Atomic"하다.
=> 다른 프로세스가 semaphore value 를 변경할 때, 다른 프로세스는 변경 할 수 없다. ( =not race condition )
- 이진 세마포어(0,1)와 카운팅(0~n : 임계지역에 동시에 n개의 프로세스 접근 가능) 세마포어가 존재한다.
(4) Monitor
- 모니터는 자바와 CPP과 같은 객체지향 언엉들과 같이 추상적인 데이터 타입을 가지고 있다. ( = ADT : 데이터 + 함수 )
- 공유된 데이터는 연산을 통해서만 들어갈 수 있다.
- 모니터 안에서는 오직 하나의 프로세스만 운영될 수 있다.
- 프로그래머는 동기화를 위한 코드를 작성하지 않아도 된다.
대표사진 삭제
사진 설명을 입력하세요.
'CS > Operating System' 카테고리의 다른 글
[ 운영체제 ] Deadlock (0) 2021.03.19 운영체제 - Process Synchronization (3) (0) 2021.03.19 [ 운영체제 ] CPU Scheduling (2) (0) 2021.03.19 [ 운영체제 ] Process Scheduling (0) 2021.03.19 [ 운영체제 ] Process Overview (0) 2021.03.19 댓글