개발자꿈나무
병행 프로세스 본문
병행 프로세스
- 병행 프로세스
- 프로세서 하나는 한 번에 프로세스 하나만 실행할 수 있음
- 하지만 운영체제가 프로세서를 빠르게 전화하여 프로세서 시간을 나눠 마치 프로세스 여러 개를 동시에 실행하는 것처럼 보이게 하는 것을 병행 프로세스라고 함 - 병행 프로세스의 해결 과제
- 공유 자원을 상호 배타적으로 사용해야 함 (프린터, 통신망 등은 한순간에 프로세스 하나만 사용해야 함)
- 병행 프로세스 간에는 협력이나 동기화가 되어야 함
- 두 프로세스 사이에는 데이터를 교환할 수 있도록 통신이 되어야 함
- 프로세스는 동시에 수행하는 다른 프로세스의 실행 속도와 관계없이 항상 일정한 실행 결과를 보장하도록 결정성을 확보해야 함
- 교착상태를 해결하고 병행 프로세스들의 병렬 처리 능력을 극대화해야 함
- 병행 프로세스를 수행하는 과정에서 발생하는 상호배제, 즉 어떤 프로세스가 작업을 실행 중일 때 나머지 프로세스는 그것과 관련된 작업을 수행할 수 없도록 보장해야 함
상호 배제와 동기화
- 임계영역 (Critical Section)
- 둘 이상의 프로세스들이 동시에 공유할 수 없는 자원을 '임계자원'이라고 하며, 프로그램에서 이 자원을 이용하는 부분을 '임계영역'이라고 함
- 프로세스들이 공유 데이터를 통해서 협력할 때 어떤 프로세스가 임계영역 내에 들어가면 다른 프로세스들은 모든 임계영역으로의 진입이 금지되어야 함
- 임계영역에는 한 순간 반드시 단 하나의 프로그램만이 허용
- 임계영역 내에서는 반드시 빠른 속도로 수행되어야 함
- 프로세스는 임계영역 내에서 보류되어서는 안 되며 무한루프에 빠지지 않아야 함 - 상호배제 방법
- 데커의 알고리즘 : 두 프로세스가 서로 통신하기 위해 공유메모리를 사용하여 충돌 없이 단일 자원을 공유할 수 있도록 허용
- TestAndSet 명령어 : 기계를 비교하거나 단어 내용을 검사, 수정하는 특별한 하드웨어 명령어를 사용
- 세마포어 (Semaphore) : 다익스트라에 의해 제안된 것으로 세마포아 변수 값이 true일 때 프로세스 상태를 확인하는 동기화 도구
- 모니터 : 공유 자원과 이것의 임계 영역을 관리하는 병행프로그래밍 구조
- 모니터
- 공유 데이터, 임계영역이 코딩된 프로시저, 초기화 코드로 구성된 모듈로 데이터 정의와 프로시저의 독점적 제어가 모두 포함
- 초기화 코드는 모니터를 생성할 때만 사용하고, 공유 데이터의 변수는 모니터 내부에 있는 프로시저로만 접근할 수 있음
- 프로세스들은 모니터의 프로시저를 호출, 실행하여 모니터 안에 진입한 후, 원하는 공유 데이터에 접근할 수 있음
- 항상 한 번에 프로세스 하나만 모니터에 진입할 수 있도록 제한하여 상호배제를 실현
728x90