나는 항상 컨텍스트 전환이 비용이 많이 든다는 것을 읽고 들었습니다. 나는 최근 Robert Love의 "Linux Kernel Development"를 읽기 시작했고 "Processes and Process Scheduling" 장을 마쳤습니다. 이것은 나에게 비용에 대한 약간의 아이디어를 주었다컨텍스트 스위치서로 다른 프로세스와 스레드 사이(스레드는 프로세스로 간주되기 때문) 이것을 캡처하고 비용을 실제로 이해하고 싶습니다.컨텍스트 스위치, 이상적으로는 명령 수와 손실된 시간을 대략적으로 나타냅니다.
단순화를 위해 단일 코어 프로세서가 동일한 성능으로 두 개의 프로세스를 실행한다고 가정해 보겠습니다.친절한가중(proc1 및 proc2). 추가적으로 우리는목표 지연20ms이므로 각 프로세스는 10ms로 예약됩니다. 언제컨텍스트 스위치그런 일이 일어나긴 하겠지만, 내 생각에는컨텍스트 스위치이 경우 proc1이 일시중단됩니다. 현재 proc2도 일시 중지되어 있나요? 그렇다면 이것은 활성 프로세스가 일부 커널 스레드 또는 프로세스라는 것을 의미합니까? 그렇다면 이는 proc1이나 proc2 모두 사용할 수 없음을 의미합니까?목표 지연? 예(숫자는 데모용임):
+-----------20ms-----------+
|---proc1---|--|---proc2---|
^____9ms____^__^____9ms____^
|
2ms of kernel executing context_switch()
이런 일이 발생하면컨텍스트 스위치()한 프로세스에서 다른 프로세스로의 최종 호출컨텍스트 스위치()두 배? 커널 스레드에서 한 번 proc1
, 그리고 커널 스레드에서 또 다른 proc2
?
답변1
운영 체제 버전만큼 많은 답변이 있습니다. 모든 것을 포괄하는 정답은 없습니다.
기본적으로 컨텍스트 전환 비용은 프로세스 컨텍스트와 관련된 모든 CPU 상태를 저장한 다음 이를 새 프로세스의 컨텍스트에 로드하는 비용입니다.
저장되는 내용은 운영 체제뿐만 아니라 CPU 하드웨어 자체에 따라 크게 달라집니다. 예를 들어, Intel CPU와 같은 프로세서에는 어딘가에 저장한 다음 다른 프로세스의 컨텍스트와 함께 다시 로드해야 하는 많은 레지스터가 있는 반면, sparc CPU는 스택의 모든 CPU 레지스터를 포함하여 대부분의 컨텍스트를 유지하므로 컨텍스트 전환은 하나입니다. 스택 포인터를 다른 레지스터 창으로 이동하는 것만이 중요합니다.
반면, 대부분의 최신 CPU는 CPU 캐시 메모리에 일부 상태를 갖고 있으며 이러한 상태는 일반적으로 컨텍스트 전환 중에 교환되지 않지만 메모리 사용량으로 인해 새 프로세스가 실행될 때 캐시 라인이 언로드되고 다시 로드될 수 있습니다. 이전 프로세스에 대한 캐시 라인을 다시 로드해야 할 수도 있습니다. 이는 컨텍스트 전환의 직접적인 비용은 아니지만 여전히 존재합니다.
CPU에는 페이지 매핑, 권한 비트 등 전환해야 할 다른 리소스가 많이 있으며 목록은 CPU 모델마다 다르며 운영 체제마다 다르게 처리합니다.
프로세스와 스레드를 참조했습니다. 한때 그들 사이에는 큰 차이가 있었고 스레드는 전환할 컨텍스트가 훨씬 적었습니다. 그런 다음 스레드는 경량 프로세스로 생성되므로 이제 차이가 최소화되고 프로세스는 거의 스레드만큼 가볍습니다.
또한 최신 CPU는 멀티태스킹 운영 체제용으로 설계되었으며 컨텍스트 전환 비용을 완화하려는 기능을 포함합니다. 그러나 컨텍스트 전환 비용이 더 비싸더라도 완화할 수 있는 방법이 많습니다. 예를 들어 일부 UNIX에는 대화형 프로세스(짧은 시간 동안 계산을 수행한 후 사용자 상호 작용을 기다려야 함)와 최소한의 I/O 상호 작용이 있는 순수 컴퓨팅 스레드를 구별할 수 있는 실시간 기능이 스케줄링에 포함되어 있습니다. 두 경우 모두 스케줄러는 높은 우선순위를 위해 매우 짧은 예약 간격으로 대화형 스레드를 제공하는 동시에 컴퓨팅 프로세스에 더 긴 간격, 더 낮은 우선순위, 더 적은 컨텍스트 전환을 제공하여 오버헤드를 줄일 수 있습니다.
따라서 대부분의 최신 운영 체제는 고정 길이 스케줄링 간격이 작업 부하에 적응하지 않기 때문에 사용하지 않습니다. 그리고 협력적 멀티태스킹(프로세스가 해당 시간 조각을 조기에 포기할 수 있음)과 시간 기반 강제 컨텍스트 전환이 결합되어 있습니다.
일부 CPU는 서로 다른 코어에서 서로 다른 속도로 스케줄링을 지원하므로 짧은 시간 조각을 가진 대화형 코어와 더 긴 시간 조각을 가진 계산 기반 코어를 가질 수 있습니다.
이는 주제의 복잡성 중 최첨단이며 50년 이상의 연구 개발을 통해 다양한 워크로드와 하드웨어 기능에 최적화되었습니다. 이 주제에 관해 전체 책이 저술되었으며 여기서 짧은 답변은 세부 사항을 얼버무릴 뿐입니다.