문제

그래서 저는 최근에 약간의 조립을 시작했고 초보자이므로 누군가가 뭔가를 명확히 할 수 있는지 궁금합니다.모든 프로세스에는 자체 레지스터 세트가 있고 각 스레드는 이러한 레지스터를 수정할 수 있다고 생각합니다.그러면 어떻게 여러 스레드가 충돌을 일으키지 않고 동일한 레지스터를 사용할 수 있습니까?아니면 각 스레드에 자체 레지스터 세트가 있습니까?

도움이 되었습니까?

해결책

스레드 컨텍스트 스위치에는 현재 실행 컨텍스트의 레지스터를 저장하고 실행 컨텍스트에서 저장된 값으로 레지스터를로드하는 것이 포함됩니다. (다른 것들 사이). 따라서 각 스레드에는 효과적으로 자체 레지스터 세트가 있습니다. ESP는 레지스터 중 하나이므로 자체 스택도 있습니다.

이에 대한 생각의 한 가지 방법은 현재 레지스터 상태를 저장하고 레지스터를 새로운 상태로로드하여 스레드를 얻는 것입니다. 그것이 일어나지 않으면 스레드 스위치가 아닙니다. 다른 가상 주소 테이블 세트로 전환하는 경우 스레드 스위치가 아닌 프로세스 스위치입니다.

당신은 말합니다 :

나는 모든 프로세스가 고유 한 레지스터 세트를 가지고 있으며 각 스레드는 이러한 레지스터를 올바르게 수정할 수 있습니까?

그러나 이것은 옳지 않습니다. 각 CPU 코어에는 단일 레지스터 세트가 있습니다. 이 레지스터는 OS가 다른 스레드로 전환 될 때마다 변경됩니다. 그러나 한 번에 CPU 코어에서 실행되는 스레드는 하나뿐입니다. 프로세스에는 실제로 자체 레지스터가없고, 프로세스는 자신의 스레드 (또는 하나 이상의 스레드) 및 스레드에는 레지스터가 있거나 스레드가 CPU 코어를 사용할 수 있도록 스레드에 대한 값을 유지할 수있는 장소입니다. 계속되다.

다른 팁

하드웨어에는 각 프로세서 코어에 대해 하나의 레지스터 세트만 있습니다.이 때문에 한 번에 하나의 스레드만 레지스터를 사용할 수 있습니다.한 스레드에서 다른 스레드로 빠르게 전환하여 여러 스레드가 단일 코어에서 동시에 실행됩니다.어떤 스레드가 언제 실행되는지 예약하는 것이 운영 체제의 작업입니다.

한 스레드에서 다른 스레드로 전환할 때 레지스터의 내용은 메모리의 특수 영역에 저장되고 다음 스레드의 레지스터는 프로세서에 다시 복사됩니다.여기에는 명령 포인터가 포함되어 있어 스레드는 제어권을 다시 얻었을 때 어디에서 계속 실행해야 할지 알 수 있습니다.이 프로세스를 컨텍스트 전환이라고 합니다.

운영 체제의 스케줄러는 또 다른 스레드에 있으므로 실행 중일 때만 프로세스를 예약할 수 있습니다.이는 컨텍스트 스위치를 제어하려면 특별한 하드웨어 기능(인터럽트)이 필요하다는 것을 의미합니다.운영 체제만 컨텍스트 전환 인터럽트를 예약할 수 있습니다.

스레드는 커널이나 OS에 의해 수행되므로 프로그램이 신경 쓰지 않아야합니다. 커널이나 OS를 사용할 수없는 경우 직접 구현해야합니다. 이를 위해서는 다음과 같습니다.

  • 다른 메모리 공간에서 CPU (SP : 스택 포인터, 내부 레지스터 값, PC : 프로그램 카운터 등)의 모든 레지스터의 SATE를 저장하는 함수.
  • 스레드 환경을 CPU 환경에로드하는 기능으로 이전에 저장된 내부 레지스터 값을 CPU 레지스터에 복원하십시오.

프로세서에 따라 레지스터 세트는 하나뿐입니다. 스레드 당 하나의 세트가 아닙니다.

모든 레지스터의 상태를 저장할 수있는 방법이있어 스레드가 중단 된 위치를 차지할 수 있습니다.

일부 프로세서가이를 용이하게합니다.

당신은 가지고 있습니다

  • 프로세스 세트 그것이 당신의 운영 체제 중 하나입니다.
  • 모든 프로세스 포함하는 메모리 공간이 있습니다 동적 할당 된 메모리, 정적 데이터 그리고 코드 어셈블리,
  • 모든 프로세스 목록이 있습니다 스레드
  • 모든 자체가 있습니다 레지스터 세트, 프로그램 카운터 그리고 스택

~와 함께 컨텍스트 스위치 스케줄러는 스레드 데이터를 교환하여 실행을 다른 실행으로 전달합니다.

보통 a 프로세스 a보다 무겁습니다 다양한 스케줄링 접근법이 존재합니다.

  • 내부적으로 컨텍스트 스위치를 수행합니다 (녹색 실) 프로그램에 (OS는 단일 프로세스로 간주하므로 : 하드 멀티 코어)
  • 쉽게 멀티 코어 최적화를 허용하는 하이브리드 접근 방식을 갖도록 여러 가지 실제 프로세스를 할당 할 수 있습니다.

각 스레드에는 고유 한 스레드가 있습니다 문맥, 여기에는 레지스터 세트, CPU 플래그, 스택 등이 포함됩니다.

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