parbegin과 parend로 묵여있는 것입니다.
예시를 봐봅시다.
처음꺼와 끝꺼는 상관없고
중간에 있는 것이 동시성을 가집니다.
3가지 흐름을 묶은 게 parbegin, parend입니다.
S3,S4는 동시에 일어나야 하기 때문에 parbegin, parend로 묶어야 합니다.
또다른 예시 입니다.
병행 해야할 부분은 (a,b) 입니다.
실행 흐름이
a,b로 쪼개진 것 입니다.
처음 S1과 S7은 병행이란 상관이 없습니다.
S3흐름과 S2흐름 2개의 덩어리로 되어 있습니다.
흐름을 동시성에 가지게 해주는것이 parbegin, end입니다.
S2, S4는 병행성과 상관없습니다.
양파껍질 같이 차례대로 구조를 만들면 됩니다.
S1
parbegin
S3
begin
S2
parbegin
S4
S5
parend
S6
end
parend
S7
P0
parbegin
P2
begin
P1
parbegin
P3
P4
parend
P4
end
parend
P5
S1
parbegin
S2
S4
begin
parbegin
S6
S5
parend
end
S5
S3
S6
parend
S7
흐름이 나눠져서 한군대로 합쳐저야 하는데 2개로 합쳐지니깐 불가능 합니다
parbegin -> fork/join은 항상 가능 합니다.
fork/join -> parbein은 항상 가능하지 않습니다.
fork/join이 더 막강하지만 parbein/end가 짜기 쉽습니다.
L2, LL, P2
빈칸을 채워봅시다
n, Ln, LL, LL, LL
fork를 계속해가지고
fork된 곳에 가서 실행을 하는 것입니다.
본래의 흐름은 P1하나이고
parbegin -> fork/join은 항상 가능 합니다.
fork/join -> parbein은 항상 가능하지 않습니다.
상호배제와 동기화 - 상호배제의 개념
병행 프로그램으로 하기 전에 먼저 해결해야할 과제가 있습니다.
상호배제란?
공유자원 동시접근 금지
실행순서를 보장해야 합니다.
왜? 공유 자원의 일관성을 보장하기 위해서 입니다.
상호 배제를 보장하는 과정에서 교착 상태나 기아 상태가 발생할 수 있습니다.
화장실 들어가는 것은 한번에 한사람밖에 들어가지 못합니다.
프로세스가 한번에 하나씩 접근하는 것이 상호 배제라는 것 입니다.
화장실 = 공유 데이터
자물쇠는 MUTEX 입니다.
장치 입니다.
공유 자원에 여러가지가 있습니다.
임계영역은 프로그램 코드 입니다.
프로세스가 실행한다는 것 입니다.
2단계는 무슨 그림일까요?
P1이 공유 메모리를 사용하고 있는데 P2가 접근하려고 하는 것입니다.
상호배제와 동기화 - 임계영역
atomic action - 임계영역에 들어가면 끝날 때까지 실행하여야 합니다.
한순간에 한 프로세스만 진입합니다.
이런 것들에 대한 것이 해결되야지 임계영역이 됩니다.
진행 - 아무도 없을 때 아무나 한 프로세스가 들어가야 한다.
한정대기 - 줄을 스면 영원히 기다리면 안된다.
3가지를 만족시키는지 확인해야 합니다.
임계영역 코드의 일반적인 구조
앞에서 자물쇠나 MUTEX같은 해결책을 제공해야합니다.
프로세스 i,j가 있습니다.
같은 코드를 돌리고 있습니다.
프로세스 i 입장에서 짠 코드입니다.
임계영역에 들어가기 전에 turn이 i가 아니면(i가 순서가 아니면) 기다리다가
임계구역의 코드는 똑같습니다.
lock이라는 변수는 자물쇠 입니다.
false이면 임계영역에 아무도 없다는 뜻입니다.
병행 프로세스는 프로세스는 다를 수 있지만 lock이라는 변수는 가지고 있습니다.
2개가 동시에 들어갈 수 있습니다.
왜냐하면 lock이라는 변수가 메모리에 있는데 프로세스가 lock을 읽습니다.
그러면 하나의 cpu가 프로세스 1 한줄 실행하고 프로세스2 한줄 실행하고 할 수 있습니다.
그래서 상호배제가 보장이 안됩니다.
상대편 들어가세요 하고 양보를 해주는 것 입니다.
진행, 한정대기를 만족하지 못합니다.
'Computer Science > OS' 카테고리의 다른 글
상호배제와 동기화 - 경쟁 상태 예방의 필요성 (0) | 2021.10.12 |
---|---|
페이지 교체 알고리즘 (0) | 2021.10.11 |
가상 메모리 (0) | 2021.10.04 |
병행 프로세스와 상호 배제 (0) | 2021.09.28 |
스레드의 개념과 상태 변화 (0) | 2021.09.27 |