문제

저는 이 정보를 온라인에서 찾는 데 정말 어려움을 겪고 있습니다. 저는 월요일에 Uni에 있어서 도서관을 사용할 수 있었지만 곧 더 좋을 것입니다.시스템에 멀티코어 프로세서가 있는 경우 각 프로세서는 준비 대기열의 첫 번째 프로세스에서 스레드를 가져오나요, 아니면 첫 번째 프로세스에서 하나, 두 번째 프로세스에서 하나를 가져오나요?또한 확인하자면 스레드는 OS에 의해 멀티코어에서 동시에 전송되고 가져옵니다.누군가 나에게 리소스 측면에서 올바른 방향을 알려줄 수 있다면 좋을 것입니다!

도움이 되었습니까?

해결책

중요한 것은 기계의 아키텍처가 실제로 무엇인지 이해하는 것입니다.

"코어"는 시스템 메모리에 연결된 캐시가 있는 CPU입니다.대부분의 머신 아키텍처는 대칭형 다중 처리입니다. 즉, 시스템의 모든 코어가 시스템 메모리에 동일하게 액세스할 수 있습니다.

대부분의 운영 체제는 각 코어에서 스케줄러 스레드를 실행합니다(Linux에서는 실행).스케줄러에는 자신이 담당하는 스레드 목록이 있으며, 제어하는 ​​코어에서 최대한의 성능으로 스레드를 실행합니다.실행할 스레드를 선택하는 데 사용하는 규칙은 라운드 로빈 또는 우선 순위 기반 등입니다.즉, 모든 일반적인 스케줄링 규칙입니다.지금까지는 단일 코어 컴퓨터에서 찾을 수 있는 스케줄러와 같습니다.어느 정도 각 스케줄러는 다른 모든 스케줄러와 독립적입니다.

그러나 이는 SMP 환경이므로 어떤 코어가 어떤 스레드를 실행하는지가 실제로 중요하지 않습니다.모든 코어가 모든 메모리를 볼 수 있고, 전체 시스템의 모든 스레드에 대한 모든 코드와 데이터가 그 단일 메모리에 저장되기 때문이다.

그래서 스케줄러들은 서로를 돕기 위해 서로 이야기합니다.실행할 스레드가 너무 많은 스케줄러는 코어 활용도가 낮은 스케줄러에 스레드를 전달할 수 있습니다.머신 내에서 로드 밸런싱을 수행합니다."스레드 오버"는 스레드를 설명하는 데이터 구조(스레드 ID, 어떤 데이터, 어떤 코드)를 복사하는 것을 의미합니다.

그게 전부입니다.코어 간의 유일한 통신은 메모리를 통한 것이므로 모든 것은 하드웨어가 허용해야 하는 효과적인 상호 배제 세마포어 시스템에 의존합니다.

어려움

그래서 아주 단순한 그림을 그렸지만 실제로는 기억이 완벽하게 대칭을 이루지는 않습니다.요즘 SMP는 HyperTransport와 QPI 위에 합성됩니다.

코어가 실제로 전자 수준에서 시스템 메모리에 동등하게 액세스할 수 있었던 시대는 오래 전에 지나갔습니다.아키텍처의 가장 낮은 계층에서 AMD는 순전히 NUMA이고 Intel은 거의 그렇습니다.

요즘 코어는 연결된 메모리에 있는 데이터를 보내도록 요청하는 고속 직렬 링크(HyperTransport 또는 QPI)를 통해 다른 코어에 요청을 보내야 합니다.Intel과 AMD는 일반적인 경우에 SMP처럼 설득력 있게 보이도록 만드는 작업을 훌륭하게 수행했지만 완벽하지는 않습니다.다른 코어에 연결된 메모리의 데이터를 보유하는 데 시간이 더 오래 걸립니다.이는 엄청나게 복잡합니다. 코어는 이제 네트워크의 노드입니다. 하지만 향상된 성능을 얻기 위해 수행해야 했던 작업입니다.

따라서 스케줄러는 어떤 코어가 어떤 스레드를 실행해야 하는지 선택할 때 이를 고려합니다.그들은 스레드가 액세스할 수 있는 데이터를 보유하고 있는 메모리에 가장 가까운 코어에 스레드를 배치하려고 시도합니다.

미래, 다시

세계의 소프트웨어 생태계가 SMP에서 벗어날 수 있다면 하드웨어 담당자는 실리콘에서 많은 공간을 절약할 수 있을 것이며 우리는 더 빠르고 효율적인 시스템을 갖게 될 것입니다.이것은 이전에 수행된 적이 있습니다.변환기는 엄격한 NUMA 아키텍처에 대한 좋은 시도였습니다.

NUMA 및 순차 프로세스 통신을 사용하면 오늘날의 SMP 공유 메모리 거대 기업보다 매우 쉽게 확장되고 더 효율적으로 실행되는 멀티 스레드 소프트웨어를 훨씬 쉽게 작성할 수 있습니다.

SMP는 사실상 여러 코어를 하나로 묶는 저렴하고 불쾌한 방법이었고 소프트웨어 개발의 어려움과 비효율적인 하드웨어 측면에서 비용이 매우 높았습니다.

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