문제

두 스레드 사이의 컨텍스트 전환에서 정확히 저장되고 복원되는 것

  • 같은 과정에서
  • 두 프로세스 사이
도움이 되었습니까?

해결책

답이 많은 것들에 의존하기 때문에 이것은 복잡한 질문입니다.

  1. 문제의 CPU
    • 예를 들어 SSE/MMX 작업에 추가 된 추가 레지스터와 같은 동일한 패밀리 내에서도 크게 다를 수 있습니다.
  2. 운영 체제는 컨텍스트 스위치에서 트리거하는 핸들러를 제어하고 컨텍스트 스위치를 지원하는 CPU의 하드웨어 (있는 경우)가 사용되는지 여부를 결정하기 때문에 운영 체제.
    • 예를 들어 Windows는 플로팅 포인트 레지스터를 저장하지 않기 때문에 컨텍스트 스위치 스토리지를 많이 수행 할 수있는 인텔 하드웨어를 사용하지 않습니다.
  3. 자체 요구 사항을 인식하고이를 알 수있는 프로그램에 의해 활성화 된 모든 최적화
    • 아마도 FP 레지스터를 사용하지 않으므로 신경 쓰지 마십시오.
    • 대부분의 RISC 디자인과 같은 상당한 레지스터 파일이있는 아키텍처에서는 이러한 레지스터의 작은 하위 집합 만 필요하다는 사실을 알면 상당한 이점이 있습니다.

최소한 사용 범위의 범용 레지스터 및 프로그램 카운터 레지스터는 저장해야합니다 (대부분의 CISC/RISC 스타일 범용 CPU의 일반적인 설계를 가정).

컨텍스트 스위치와 관련하여 최소한의 노력 만하려고하는 것은 학문적 관심의 주제

Linux는 분명히 공개 도메인에서 더 많은 정보를 사용할 수 있지만 내 참조는 약간 오래된 것일 수 있습니다.

작업 상태와 관련된 많은 수의 필드와 작업을위한 프로세스가 포함 된 'task_struct'가 있습니다.

이 중 하나는 'Thread_struct'입니다.

/ *이 작업의 CPU 특이 적 상태 */
-Struct Thread_Struct 스레드;
캐시 TLS 디스크립터, 디버깅 레지스터에 대한 정보를 보유하고 있습니다.
오류 정보, 부동 소수점, 가상 86 모드 또는 IO 권한.

각 아키텍처는 스위치에 저장된 레지스터 및 기타 값을 식별하는 자체 Thread_Struct를 정의합니다.

이는 비행 지침의 여러 가지를 허용하는 이름 바꾸기 레지스터의 존재에 의해 더욱 복잡합니다 (SuperScalar 또는 파이프 라인 관련 아키텍처 설계를 통해). 컨텍스트 Swicth의 복원 단계는 초기에 빈 상태로 복원되는 CPU의 파이프 라인에 의존 할 것입니다. 그러한 파이프 라인에서 아직 은퇴하지 않은 지침은 효과가 없으므로 무시할 수 있습니다. 이것은 CPU의 디자인을 훨씬 어렵게 만듭니다.

프로세스와 스레드의 차이점은 프로세스 스위치 (모든 주 스트림 운영 체제의 스레드 스위치를 의미 함)가 메모리 번역 정보, IO 관련 정보 및 권한 관련 구조를 업데이트해야한다는 것입니다.

이것들은 주로보다 풍부한 데이터 구조에 대한 포인터가 될 것이므로 스레드 컨텍스트 스위치와 관련하여 상당한 비용이되지 않습니다.

다른 팁

컨텍스트 전환이 동일한 프로세스의 스레드 사이에있을 때, 현재 스레드의 모든 비 휘발성 범용 레지스터가 저장되고 새 스레드의 레지스터가 복원됩니다. 현재 스레드 실행이 인터럽트에 의해 중단 된 경우에만 휘발성 레지스터를 저장해야합니다. 스레드 (예 : 플로팅 포인트 프로세서)가 사용하는 모든 공동 프로세서의 레지스터는 정상적인 컨텍스트 스위치, 메모리 및 IO 관리에 필요한 것 외에 2 개의 프로세스 스레드 사이에있는 경우 스위칭이 2 개의 프로세스 스레드 사이에 있으면 저장 및 복원해야합니다. 변경 사항도 수행해야합니다. 예를 들어 프로세스가 필요로하는 메모리 보호의 경우 페이지 테이블 및 페이지 디렉토리 테이블을 사용하여 달성되며 각 프로세스에는 고유 한 페이지 디렉토리 테이블 주소가 있으며 프로세스가 변경 될 때 변경해야합니다.

이는 사용중인 OS에 따라 다르지만 모든 레지스터의 내용 (명령 카운터 포함)의 내용을 저장하고 전환하는 스레드의 레지스터를로드해야합니다.

동일한 프로세스의 두 스레드 사이의 스위치와 관련하여 내 마음에 들어오는 유일한 차이점은 L1 및 MMU 캐시의 내용을 느슨하게하지 않는다는 것입니다.

확실하지 않지만 올바르게 기억한다면 작업 메모리 세트가 전환됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top