Linux는 스레드가 실행되는 코어를 어떻게 결정합니까?

Linux는 스레드가 실행되는 코어를 어떻게 결정합니까?

나는 Linux가 스레드가 실행되는 코어를 결정하므로 코어당 작업의 균형이 보장된다는 것을 알고 있습니다. 그런데 소개 문서는 어디서 볼 수 있나요?

구체적인 구현 방법을 알고 싶습니다.

-----2022-2-14----

스케줄링 알고리즘은 모두 스케줄링 전략에 관한 것이며 프로세스 내에서 스레드를 할당하고 마이그레이션하는 방법과 거의 관련이 없습니다. go 구현과 유사한 스레드 도용 기술이 있다는 것을 알고 있습니다.

대부분의 운영 체제 책에서는 프로세스와 스레드에 대해서만 설명하고 다중 코어에서 이를 예약하는 방법도 생략합니다.

답변1

코어에 프로세스 캐시가 있는 경우 커널은 동일한 코어에서 스레드 일정을 변경하려고 시도하지만 이는 보장되지 않으며 일반적으로 사용 가능한 코어에서 실행되도록 일정을 변경할 수 있습니다. 예를 들어, 커널은 일반적으로 코어의 기본 스레드와 보조 스레드 간에 프로세스를 교대로 예약하므로 코어가 포화되어도 보조 스레드의 프로세스가 중단되지 않습니다.

그러나 스레드는 특정 코어 세트에서만 실행되도록 예약하도록 요청할 수도 있습니다. 이 작업은 프로세스가 캐싱 문제가 있음을 알고 있는 경우 요청될 수 있지만, 더 일반적으로 특정 소켓이 프로세스가 액세스해야 하는 특정 I/O 장치에 액세스할 수 있을 때 수행되며, 소켓 전체에서 Word I/O가 수행될 수 있습니다. 값비싼.

한 가지 예는 특정 CPU 슬롯에 매핑된 PCI 슬롯의 GPU에 액세스하는 것입니다.

관련 정보