목적
|
시스템에 존재할 프로세스 및 스레드 정의.
|
가장 단순한 접근 방식은 공통 스레드나 프로세스에 활성 오브젝트를 모두 할당하고 단순한 활성 오브젝트 스케줄러를 사용하는 것입니다. 이렇게 하면 컨텍스트 전환 오버헤드가 최소화되기 때문입니다. 그러나 일부
경우에는 하나 이상의 스레드나 프로세스에 활성 오브젝트를 분배해야 할 수도 있습니다. 대부분의 실시간 시스템이 거의 이 경우에 해당하는데, 일부 경우에는 논리 스레드를 나타내는 데 사용되는 캡슐이 엄격한 스케줄링
요구사항을 충족해야 합니다.
다른 활성 오브젝트와 운영 체제 스레드를 공유하는 활성 오브젝트가 일부 다른 프로세스나 스레드로의 동기 호출을 작성하고 이 호출이 호출 오브젝트가 공유한 운영 체제 스레드를 차단하는 경우, 호출 프로세스에 위치한
기타 모든 활성 오브젝트가 자동으로 일시중단됩니다. 이제는 이렇게 할 필요가 없습니다. 활성 오브젝트의 관점에서 동기인 호출은 활성 오브젝트 그룹을 제어하는 단순 스케줄러 관점에서 비동기로 처리될 수 있습니다.
스케줄러는 호출하는(동기 호출이 완료되기를 기다리는) 활성 오브젝트를 일시중단한 후 다른 활성 오브젝트가 실행되도록 스케줄합니다.
원래의 '동기' 작업이 완료되면 호출 활성 오브젝트를 재개할 수 있습니다. 그러나 차단하기 전에 모든 동기 호출을 인터셉트하도록 스케줄러를 디자인할 수 없을 수도 있으므로 이 접근 방식이 항상 실현 가능한 것은
아닙니다. 동일한 운영 체제 프로세스나 스레드를 사용하는 활성 오브젝트 간의 동기 호출은 범용성을 위해 스케줄러에 의해 이런 식으로 처리될 수 있으며, 호출 활성 오브젝트의 관점에서 프로시저 호출과 사실상 동일함에
유의하십시오.
따라서 스레드를 차단하는 동기 호출과 함께 동시에 실행해야 하는 필요성을 기반으로 활성 오브젝트를 프로세스나 스레드로 그룹화해야 한다는 결론에 도달합니다. 즉, 스레드를 차단하는 동기 호출을 사용하는 다른
오브젝트와 함께 활성 오브젝트를 동일한 프로세스나 스레드로 패키징해야 하는 유일한 경우는 해당 오브젝트와 함께 동시에 실행하지 않아도 되는 경우이며, 기타 오브젝트가 차단된 상태에서 실행되지 않도록 할 수
있습니다. 극단적인 경우로 응답성이 중요한 경우에는 각각의 활성 오브젝트에 대해 별도의 스레드나 프로세스가 있어야 한다는 결론에 도달합니다.
실시간 시스템의 경우, 캡슐의 메시지 기반 인터페이스는 적어도 캡슐 간 통신의 경우에는 지원 운영 체제 스레드가 절대로 차단되지 않도록 하는(캡슐이 다른 캡슐과 비동기로 통신하는 경우에도) 스케줄러를 구상하는 것이
더 간단함을 의미합니다. 그러나 캡슐은 여전히 운영 체제에 직접 요청을 발행하여 스레드를 차단할 수 있습니다(예: 동기 시한 대기의 경우). 캡슐이 공통 스레드를 공유하고 단순 스케줄러를 사용하여 동시성을
시뮬레이션할 경우, 캡슐이 호출하는 하위 레벨 서비스에 대해 이 동작을 방지하는 규칙을 설정해야 합니다.
일반적으로 위 상황에서는 완전한 프로세스 대신 간단한 스레드를 사용하는 것이 더 좋습니다(오버헤드를 덜 발생시키므로). 그러나 특별한 경우에는 여전히 프로세스의 특수 특성을 일부 활용하고자 할 수 있습니다.
스레드는 동일한 주소 공간을 공유하므로 본질적으로 프로세스에 비해 위험성이 더 많습니다. 우연한 겹쳐쓰기 가능성이 문제되는 경우에는 프로세스가 더 낫습니다. 더욱이 프로세스는 대부분의 운영 체제에서 독립적인 복구
단위를 나타내므로 서로 별개로 복구 필요성을 기반으로 프로세스에 활성 오브젝트를 할당하는 것이 유용할 수 있습니다. 즉, 단위로 복구해야 하는 모든 활성 오브젝트를 동일한 프로세스에서 함께 패키징할 수 있습니다.
시스템이 필요로 하는 각각의 별도 제어 플로우에 대해 프로세스나 스레드(간단한 프로세스)를 작성하십시오. 중첩된 제어 플로우가 필요할 경우(즉 프로세스 내에서, 하위 타스크 레벨에 독립적인 제어 플로우가 필요한
경우) 스레드를 사용해야 합니다.
예를 들어, 다음을 수행하려면 별도의 제어 스레드가 필요할 수 있습니다.
-
서로 다른 소프트웨어 영역 간에 문제 분리
-
분산 시스템의 하나의 노드 또는 다중 노드에서 다중 CPU 활용
-
제어 스레드가 일시중단될 경우 다른 활동에 주기를 할당하여 CPU 이용률 증대
-
활동 우선순위 결정
-
여러 프로세스와 프로세서 간에 로드 공유 지원
-
백업 프로세스를 통해 시스템 가용성 증대
-
DBMS, 트랜잭션 관리자 또는 기타 주요 서브시스템 지원
예제
현금 자동 인출기(ATM)에서는 세 개의 서로 다른 소스(시스템 사용자, ATM 장치(예: 현급 지급기에서 지폐가 걸릴 경우) 또는 ATM 네트워크(네트워크로부터 시스템 종료 지시가 있는 경우))로부터 수신되는
비동기 이벤트를 처리해야 합니다. 이런 비동기 이벤트를 처리하기 위해 UML의 활성 클래스를 사용하여 아래 표시된 바와 같이 ATM 자체 내에 세 개의 별도의 실행 스레드를 정의할 수 있습니다.
ATM 내의 프로세스 및 스레드
|