컨텍스트 스위치

Context switch

컴퓨팅에서 컨텍스트 스위치프로세스스레드의 상태를 저장하여 나중에 복원하고 실행을 재개할 수 있도록 하는 과정이다.이를 통해 여러 프로세스가 단일 중앙처리장치(CPU)를 공유할 수 있으며, 멀티태스킹 운영체제의 필수적인 기능이다.

"콘텍스트 스위치"라는 문구의 정확한 의미는 다양하다.멀티태스킹 컨텍스트에서는 한 작업에 대해 시스템 상태를 저장하여 작업을 일시 중지하고 다른 작업을 재개할 수 있도록 하는 프로세스를 말한다.컨텍스트 스위치는 작업이 Disk 저장소에 액세스해야 하는 경우와 같이 인터럽트의 결과로 발생하여 다른 작업에 CPU 시간을 확보할 수 있다.일부 운영 체제에서는 사용자 모드커널 모드 작업 간에 이동하려면 컨텍스트 스위치가 필요하다.컨텍스트 전환 과정은 시스템 성능에 부정적인 영향을 미칠 수 있다.[1]: 28

비용

컨텍스트 스위치는 대개 계산적으로 집약적이며, 운영체제 설계의 대부분은 컨텍스트 스위치의 사용을 최적화하는 것이다.한 프로세스에서 다른 프로세스로 전환하려면 레지스터 및 메모리 맵 저장 및 로드, 다양한 테이블 및 목록 업데이트 등 관리를 수행하는 데 일정 시간이 필요하다.컨텍스트 스위치에 실제로 관여하는 것은 아키텍처, 운영 체제 및 공유되는 자원의 수에 따라 달라진다(동일한 프로세스에 속하는 스레드는 관련 없는 비협조 프로세스에 비해 많은 자원을 공유한다).

예를 들어 리눅스 커널에서 컨텍스트 스위칭은 새 프로세스의 상태에 대한 정보를 검색하기 위해 커널 스택의 PCB 테이블에 저장된 해당 프로세스 제어 블록(PCB)을 로드하는 것을 포함한다.레지스터, 스택 포인터프로그램 카운터를 포함한 CPU 상태 정보와 분할 테이블페이지 테이블과 같은 메모리 관리 정보가 새 프로세스에 대해 PCB에서 로드된다.다른 메모리를 사용하는 이전 프로세스와 현재 프로세스의 경우 잘못된 주소 변환을 방지하려면 TLB(translation lookaside buffer)를 플러시해야 한다.이는 대부분의 컨텍스트 전환 후 비어 있기 때문에 TLB에 대한 모든 메모리 참조가 누락되기 때문에 성능에 부정적인 영향을 미친다.[2][3]

또한 사용자 스레드, 특히 녹색 스레드 간에 유사한 컨텍스트 전환이 발생하며, 최소 컨텍스트를 저장하고 복원하는 경우가 많다.바둑에서 고루틴 간 전환과 같은 극단적인 경우, 컨텍스트 스위치는 코루틴 수율과 동등하며, 서브루틴 호출보다 약간 더 비쌀 뿐이다.

사례 전환

컨텍스트 스위치에는 다음과 같은 세 가지 잠재적 트리거가 있다.

멀티태스킹

가장 일반적으로, 어떤 스케줄링 체계 내에서, 다른 프로세스가 실행될 수 있도록 CPU에서 한 프로세스를 전환해야 한다. 컨텍스트 스위치는 I/O 또는 동기화 작업이 완료될 때까지 기다리는 것과 같이 스스로 실행할 수 없도록 만드는 프로세스에 의해 트리거될 수 있다.예비 멀티태스킹 시스템에서 스케줄러는 여전히 실행 가능한 프로세스를 전환할 수도 있다.다른 프로세스가 CPU 시간에 굶주리는 것을 방지하기 위해, 사전 준비 스케줄러는 종종 프로세스가 시간 조각을 초과할 때 타이머 인터럽트가 발생하도록 구성한다.이 인터럽트는 스케줄러가 컨텍스트 스위치를 수행할 수 있는 제어 권한을 얻도록 보장한다.

인터럽트 핸들링

현대 건축은 방해를 받는다.즉, 예를 들어 CPU가 디스크에서 데이터를 요청하면 읽기가 끝날 때까지 대기할 필요가 없으며, 요청을 (I/O 장치로) 발급하고 다른 작업을 계속할 수 있다.읽기가 끝나면 CPU가 인터럽트(이 경우 하드웨어에 의해 PIC로 인터럽트 요청을 전송)되어 읽기와 함께 제시될 수 있다.인터럽트의 경우 인터럽트 핸들러라는 프로그램이 설치되며, 디스크로부터의 인터럽트를 처리하는 것이 인터럽트 핸들러다.

인터럽트가 발생하면 하드웨어는 자동으로 컨텍스트의 일부(적어도 핸들러가 인터럽트된 코드로 돌아갈 수 있을 정도로 충분히)를 전환한다.취급자는 특정 하드웨어 및 소프트웨어 설계의 세부사항에 따라 추가 컨텍스트를 저장할 수 있다.인터럽트를 처리하는 데 소요되는 시간을 최소화하기 위해 컨텍스트의 최소 부분만 변경되는 경우가 많다.커널은 인터럽트를 처리하기 위해 특별한 프로세스를 생성하거나 스케줄링하지 않지만, 핸들러는 인터럽트 처리를 시작할 때 설정된 (흔히 부분적인) 컨텍스트에서 실행된다.인터럽트 서비스가 완료되면 인터럽트가 발생하기 전의 컨텍스트를 복원하여 인터럽트된 프로세스가 적절한 상태에서 실행을 재개할 수 있다.

사용자 및 커널 모드 전환

시스템이 사용자 모드커널 모드 간에 전환되면 컨텍스트 스위치가 필요하지 않으며, 모드 전환 자체가 컨텍스트 스위치가 아니다.그러나, 운영 체제에 따라, 컨텍스트 전환도 이때 일어날 수 있다.

단계

현재 실행 중인 프로세스의 상태를 저장해야 실행 스케줄을 변경할 때 복원할 수 있다.

프로세스 상태는 프로세스가 사용할 수 있는 모든 레지스터, 특히 프로그램 카운터, 그리고 필요할 수 있는 다른 운영 체제 특정 데이터를 포함한다.이것은 보통 프로세스 제어 블록(PCB) 또는 스위치프레임이라고 불리는 데이터 구조에 저장된다.

PCB는 커널 메모리의 프로세스별 스택에 저장되거나(사용자-모드스택과는 반대로), 이 정보에 대한 특정 운영체제 정의 데이터 구조가 있을 수 있다.PCB에 대한 핸들은 실행 준비가 된 프로세스 대기열에 추가되며, 흔히 준비 대기열이라고 불린다.

운영체제는 하나의 프로세스의 실행을 사실상 중단했으므로, 준비된 대기열에서 프로세스를 선택하고 PCB를 복원하여 컨텍스트를 전환할 수 있다.그렇게 하면 PCB의 프로그램 카운터가 로딩되므로, 선택한 프로세스에서 실행을 계속할 수 있다.프로세스 및 스레드 우선 순위는 준비된 대기열에서 선택한 프로세스(즉, 우선 순위 대기열일 수 있음)에 영향을 미칠 수 있다.

일반적인 산술 가산 연산 A = B+1을 고려한다.지침서는 지시 레지스터에 저장되고 프로그램 카운터는 증분된다.A와 B는 메모리에서 판독되며 각각 레지스터 R1, R2에 저장된다.이 경우 B+1을 계산하여 R1로 최종답변으로 작성한다.순차적인 읽기 및 쓰기가 있고 함수 호출에 대한 대기 시간이 없으므로 이 경우 컨텍스트 스위치/대기 기능이 수행되지 않는다.

그러나 특정 특별 지침은 대기/수면 프로세스를 위해 컨텍스트 스위치가 필요한 시스템 호출을 요구한다.시스템 호출 처리기는 커널 모드로의 컨텍스트 전환에 사용된다.디스플레이(데이터 x) 함수는 디스크의 데이터 x와 커널 모드의 장치 드라이버가 필요할 수 있으므로 디스플레이() 함수는 절전 모드로 전환되어 디스크에서 x의 값을 가져오기 위해 READ 작업 시 대기하므로 프로그램이 대기하고 해제된 설정에 대한 함수 호출을 대기하여 현재 문이 절전 모드로 전환되고 syscal이 대기한다.나는 그것을 깨우려고 한다.그러나 동시성을 유지하기 위해서 프로그램은 새로운 가치와 수면 과정을 함께 다시 실행해야 한다.

퍼포먼스

컨텍스트 스위칭 자체는 작업 스케줄러 실행, TLB 플러시, 그리고 간접적으로 여러 작업 간에 CPU 캐시를 공유하기 때문에 성능 면에서 비용이 든다.[4]스레드는 동일한 가상 메모리 맵을 공유하기 때문에 TLB 플러시가 필요하지 않기 때문에 단일 프로세스의 스레드 간 전환은 두 개의 개별 프로세스 간보다 더 빠를 수 있다.[5]

두 개의 개별 프로세스 간에 전환되는 시간을 프로세스 전환 지연 시간이라고 한다.동일한 프로세스의 두 스레드 간 전환 시간을 스레드 전환 지연 시간이라고 한다.하드웨어 인터럽트가 생성된 시점부터 인터럽트가 서비스되는 시점까지의 시간을 인터럽트 지연 시간이라고 한다.

단일 주소 공간 운영 체제에서 두 프로세스 간 전환은 프로세스별 개인 주소 공간이 있는 운영 체제에서 두 프로세스 간 전환보다 더 빠를 수 있다.[6]

하드웨어와 소프트웨어 비교

컨텍스트 스위칭은 주로 소프트웨어 또는 하드웨어에 의해 수행될 수 있다.Intel 80386 및 그 후계자와 같은 일부 프로세서는 태스크 상태 세그먼트(TSS)로 지정된 특수 데이터 세그먼트를 사용하여 컨텍스트 스위치를 하드웨어로 지원한다.[7]작업 스위치는 글로벌 설명자 표의 TSS 설명자를 대상으로 하는 CLALL 또는 JMP 명령으로 명시적으로 트리거할 수 있다.인터럽트 설명자 테이블(IDT)에 작업 게이트가 있을 경우 인터럽트 또는 예외가 트리거될 때 암묵적으로 발생할 수 있다.작업 스위치가 발생하면 CPU는 TSS에서 자동으로 새 상태를 로드할 수 있다.

하드웨어에서 수행되는 다른 작업과 마찬가지로, 사람들은 이것이 다소 빠를 것으로 예상하지만, 윈도우리눅스를 포함한 메인스트림 운영체제는 이 기능을 사용하지 않는다.[8]이는 주로 다음 두 가지 이유 때문이다.

  • 하드웨어 컨텍스트 스위칭이 모든 레지스터를 저장하는 것은 아니지만(일반용 레지스터만, 부동 소수점 레지스터는 아님)TS비트가 자동으로 켜짐CR0 제어 레지스터, 부동 소수점 명령을 실행할 때 오류가 발생하고 필요에 따라 부동 소수점 상태를 저장 및 복원할 수 있는 기회를 OS에 제공).
  • 관련 성능 문제, 예를 들어 소프트웨어 컨텍스트 스위칭은 선택적일 수 있고 저장이 필요한 레지스터만 저장할 수 있는 반면, 하드웨어 컨텍스트 스위칭은 거의 모든 레지스터가 필요한지 여부를 저장한다.

참고 항목

참조

  1. ^ Tanenbaum, Andrew S.; Bos, Herbert (March 20, 2014). Modern Operating Systems (4th ed.). Pearson. ISBN 978-0133591620.
  2. ^ IA-64 Linux 커널: 설계구현, 4.7 전환 주소 공간
  3. ^ 운영 체제, 5.6 컨텍스트 스위치, 페이지 118
  4. ^ Chuanpeng Li; Chen Ding; Kai Shen. "Quantifying The Cost of Context Switch" (PDF). {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  5. ^ Ulrich Drepper (9 October 2014). "Memory part 3: Virtual Memory". LWN.net.
  6. ^ D.L. 심스."여러 주소 공간 및 단일 주소 공간: 중간 지대를 향해". 1993. doi:10.1109/IWOOOS.193.324906
  7. ^ "Context Switch definition". Linfo.org. Archived from the original on 2010-02-18. Retrieved 2013-09-08.
  8. ^ Bovet, Daniel Pierre; Cesati, Marco (2006). Understanding the Linux Kernel, Third Edition. O'Reilly Media. p. 104. ISBN 978-0-596-00565-8. Retrieved 2009-11-23.

외부 링크