■ 병행 프로세스
- 프로세스가 여러개 동시 실행.
-독립적 수행or 협력도 하기도 함. (협력수행을 위해 동기화를 해야하기도 한다.)
■ 동작의 재현 가능? : 서로 협력한 프로세스가 없기 때문에, 자기만의 고유한 작업실행을 또 다시 실행하기 쉽다는 뜻.
■ 협력 프로세스 사용시 충돌이 발생할 수 있다는 문제가 있다.
■ 병렬처리
여러 프로세서가 동시에 동작하는 것을 말하는 것으로 병렬 처리 시스템에서는 프로세서 관리자가 프로세서 간의 상호 동작에 대한 동기화뿐만 아니라 각 프로세서의 활동까지 제어한다.
■ 운영체제가 자원 경쟁을 고려하여 같은 디스크나 프린터로의 접근을 조
■ 프로세스끼리 인식하고 통신할 수 있게 함.
■ 병행 프로세스에서 해결해야할 문제들
■ 일정한 실행 결과 보장 (결정성) : 주어진 초기값에 항상 같은 값이 나와야한다는 뜻.
■ 교착 상태
P1 (자원1) 사용상태 / P2(자원2) 를 각각 쓰고 있다. 그 상태에서 P1은 자원2를, P2는 자원1을 원하고 있다. 즉 꼬리를 무는 식으로 각자가 가진 자원을 두고 상대방의 자원을 요구하는 형태이다. 이런식이 되면 교착상태에 빠지게 된다.
■ 상호배제
P1이 자원1을 쓰고있다면, 그 자원을 다른 프로세스가 쓸 수 없도록 보장하는 정책이 필요하다.
■ 선행그래프
프로세서는 프로세스 집합과 이들의 선행 제약이라는 두 가지 요소로 정의 된다. 선행 그래프란 선행제약을 규칙적으로 표현한 것이다.
■ 프로세스 집합 : P1 P2 P3.... Pn 등 프로세스의 집합을 말함.
■ 선행제약 : P1이 실행되고 P2가 실행된다는 약속이다.
■ 선행그래프 : 선행 제약을 논리적으로 표현한 개념.
■ a 알고리즘
a와 b가 선행된다.
그리고 c는 a-b이다. 즉 a와 b가 선행되어야 값이 나오게 된다.
마찬가지로 w도 c가 선행되어야 한다는 뜻이다.
■ b 선행 그래프
- 노드 : 소프트웨어 작업, 동시에 실행할 수 있는 프로그램 명령.
- 방향성 : 화살표를 말함. 한마디로 일이 어떤 단계를 통해, 순차적으로 진행된다는 의미로 보면 될 것 같다,
- 비순환 : 작업이 지속적으로 순환이 아닌, 한 작업이 끝나면 그 다음으로 향하며, 본래 작업으로 돌아가지 않는다.
- 여기서 S1과 S2는 독립적으로 수행하고 있다. 즉, 병행실행이 가능한 형태이다.
■ 병행문장
선행그래프는 프로그램은 2차원이기 때문에 프로그래밍 언어에서는 사용하기가 곤란하다. 이를 위해서 Fork, Join, 병행 문장이라는 언어 구조가 제시되었다.
■ s1이 선행되면 fork L을 통해 s3로 가면 된다.
■ 그리고 s2, s3는 병행이다.
■ join은 count 값을 준다. 즉 몇개가 join이 되는지를 알려주는 것이 count 이다. (2개가 join될 것이다.)
■ fork L1을 통해 s2를 실행함. 동시에 내려가면 보이는 s1도 실행함. (병행적으로)
■ goto L2 : 여기서 join count가 나타남. 즉 위의 2개를 조인해라!
■ 그래서 s3이 실행된다.
■ count 2 : join 2개 할거다.
■ fork L1 : b를 수행해라. 바로 아래에 a도 있으니 둘이 동시에수행
■ goto L2 : L2수행. 즉 join count 니까 2개를 조인해야한다. 그리고 밑의 c, w를 차례대로 수행하면 된다.
■ 병행 문장
- Parbegin / Parend로 표현이 가능하다.
■ S0; parbegin S1; S2; .......; Sn; parend; Sn+1; 이 사이에 있는 숫자들이 병행수행이 가능한 부분이다.
■ S0 에서 S7 사이에 있는 모든 것들이 전체적으로 병행수행됨 (s1, s2, s3, s4, s5, s6)
■ s2 안에서 s3, s4도 병행수행이 됨.
■주의해야할점
parbegin ~ parend 사이만 병행이 된다. 즉, 뒤의 begin ~ end 사이에 있는 것들은 병행이 아니다. 왼쪽 알고리즘에서 s2, s5를 보면 이 두가지는 begin~end사이에있다.
■ a와 b는 병행
■ 그래서 오른쪽을 보면 parbegin~ parend 사이에 a와 b가 있다.
■ 나머지 c, w는 순차적으로 처리!
■ 처음 나온 parbegin ~ parend 구간 :
- s2~6 까지가 병행수행.
- 그다음, s3가 수행
- s2, s4, s5, s6 이 병행수행 됨.
■begin ~ end (병행수행 아님!)
- s2, s4, s5, s6는 그냥 묶어 놓은 것이라 생각하자. 병행수행이 아니다!
■ 내부에 있는 parbegin ~ parend
- s5, s6이 병행수행.
■학습정리
병행 프로세스의 의미
- 프로세스 여러 개가 동시에 실행되면 병행 프로세스라 한다.
- 병행 프로세스들은 서로 관련 없이 독립적으로 수행할 수도 있고 다른 프로세스와 협력하면서 기능을 수행하기도 한다.
선행 그래프
- 선행 제약의 논리적 표현이다.
- 프로세스는 프로세스 집합과 이것의 선행 제약 두 가지 요소로 정의된다.
- 선행 제약은 프로세스를 순서대로 다른 상태로 옮기는 것으로 프로세스에 선행 제약이 없으면 이 둘은 독립적이므로 병행 실행 가능하다.
- 선행 그래프에서 노드는 소프트웨어 작업이거나 동시에 실행할 수 있는 프로그램 명령이다.
언어적 표현과 병행 문장
- Fork 와 Join 구조
- 선행 그래프는 연산의 선행 제약 정의에 유용하지만, 2차원이라 프로그램에는 사용이 곤란하며, 선행 관계 명시를 위해 Fork와 Join구조, 병행 문장(Parbegin/Parend) 등 다른 방법 필요하다.
- 병행 문장
- 하나의 프로세스가 여러 병렬 프로세스로 퍼졌다가 다시 하나로 뭉쳐지는 것을 나타내며 대표적인 예로는 다익스트라(1965년)가 제안한 Parbegin/Parend가 있다.
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
9. 교착 상태 1 (0) | 2024.07.08 |
---|---|
8. 상호배제와 동기화 (0) | 2024.07.03 |
6. 스케쥴링 알고리즘 (0) | 2024.06.25 |
5. 프로세서 스케쥴링 (0) | 2024.06.12 |
4. 스레드의 개념 (1) | 2024.05.26 |