프로세스 경합 범위

Process Contention Scope

프로세스 경합 범위는 스레드 스케줄링의 두 가지 기본 방법 중 하나이다.두 가지 모두 프로세스 로컬 스케줄링(프로세스 경합 범위 또는 Unbound Threads - Multy-to-Multi 모델)과 시스템 글로벌 스케줄링(시스템 경합 범위 또는 Bound Threads - 일대일 모델)이다.이러한 스케줄링 클래스는 스케줄링 경합 범위라고 하며 POSIX에서만 정의된다.프로세스 경합 범위 스케줄링은 스레드의 모든 스케줄링 메커니즘이 프로세스에 로컬이라는 것을 의미한다. 즉, 스레드의 라이브러리는 LWP에서 스케줄링되는 스레드를 완전히 제어한다.이는 또한 다대일 또는 다대일 모델 중 하나를 사용한다는 것을 의미한다.[1]

PCS 스케줄링 유형

PCS 스케줄링은 스레드 라이브러리에 의해 수행된다.라이브러리는 LWP에 어떤 바인딩되지 않은 스레드를 넣을지 선택한다.LWP 스케줄링은 (물론) 여전히 글로벌하며 로컬 스케줄링과는 무관하다.이는 바인딩되지 않은 스레드가 일종의 우스꽝스러운 2계층 스케줄링 아키텍처의 적용을 받는다는 것을 의미하지만, 실제로는 LWP 스케줄링을 무시하고 로컬 스케줄링 알고리즘만 처리할 수 있다.활성 나사산(예: T1)을 컨텍스트 스위치로 유도하는 네 가지 방법이 있다.그 중 3개는 프로그래머가 코드를 작성하도록 요구한다.이 방법들은 모든 도서관에서 대체로 동일하다.[2]

  1. 동기화.지금까지 컨텍스트 전환의 가장 일반적인 수단(야성 일반화)은 T1이 뮤텍스 잠금을 요청하고 받지 않는 것이다.T2에 의해 잠금이 이미 유지되고 있는 경우, T1은 잠김 대기열에 배치되어 잠금을 대기하므로 다른 스레드가 실행될 수 있다.
  2. 선점.실행 중인 스레드(T6)는 높은 우선순위 스레드(T2)를 실행 가능하게 하는 작업을 한다.그럴 경우 우선 순위가 가장 낮은 액티브 스레드(T1)가 선점되고, T2가 LWP에서 그 자리를 차지하게 된다.이를 유발하는 방법에는 잠금 해제, T2의 우선순위 수준 상향 또는 T1의 하향 변경이 포함된다.
  3. 양보하다.프로그래머가 T1이 실행 중인 코드에 sched_eut()에 명시적인 호출을 하면, 스케줄러는 동일한 우선순위의 다른 실행 가능한 스레드(T2)가 있는지(더 높은 우선순위의 실행 가능한 스레드는 있을 수 없음)를 살펴본다.만약 하나 있다면, 그 하나는 예정되어 있을 것이다.만약 없으면, T1은 계속 실행될 것이다.
  4. 타임슬라이징.공급업체의 PCS가 (Solaris와 달리, Digital UNIX와 마찬가지로) 시간 낭비를 허용한다면, T1은 단순히 시간 조각이 소진되고 (동일한 우선 순위 수준에서) T2는 시간 슬라이스를 받을 수 있다.

실행

PCS 스레드 스케줄러에는 실행할 스레드를 결정하기 위한 매우 간단한 알고리즘이 있다.각 스레드는 그것과 연관된 우선순위 번호를 가지고 있다.우선 순위가 가장 높은 실행 가능한 스레드가 실행되기 시작한다.이러한 우선 순위는 스레드 라이브러리에 의해 조정되지 않는다.그들이 바뀌는 유일한 방법은 프로그래머가 srad_setchedparam()에 명시적인 호출을 쓰는 것이다.이 우선 순위는 C의 정수다.우리 스스로도 그 가치를 별로 사용하지 않는다는 것을 알게 되므로, 그 가치를 어떻게 선택할 것인가에 대해서는 어떠한 조언도 하지 않는다.너도 아마 안 그럴 거야.
스케줄링에 대한 위의 논의의 당연한 결과는 스레드에 대한 네 가지 스케줄링 상태의 존재다.나사산은 다음 상태 중 하나일 수 있다.

  1. 활성: LWP 5에 있다는 뜻.
  2. 실행 가능:즉, 실행할 준비가 되어 있지만 LWP가 부족하여 LWP를 구할 수 있는 LWP가 충분하지 않다.활성 나사산이 LWP를 상실할 때까지 또는 새 LWP가 생성될 때까지 여기에 남아 있을 것이다.
  3. 수면: 동기화 변수를 기다리고 있다는 의미.
  4. 중지됨(POSIX에 없음): 서스펜션 기능에 대한 호출이 이루어졌음을 의미한다.그것은 다른 스레드가 그것의 계속 기능을 호출할 때까지 이 상태로 유지될 것이다.
  5. 좀비: 죽은 실이고 자원이 수집되기를 기다리고 있다는 뜻이야.(이 상태는 디버거에 나타날 수 있지만 사용자가 인식할 수 있는 상태가 아니다.)

참고 항목

참조

  1. ^ 운영 체제 개념, 제7판, Wiley, 2005, p:172
  2. ^ Pthreads Primer, Sunsoft Press,1996, p:88