Мне интересно узнать больше о архитектуре x86 и о том, как она реализует многопроцессорную обработку.Hyper Threads, SIPI и регистры
Скажем, используя инструкцию cpuid
, вы можете узнать, сколько логических ядер имеет ваш процессор, и используя какой-либо SIPI (Interrupt Interrupt Interrupt Interrupt), вы указываете ядру A, чтобы начать выборку и выполнение кода с какого-либо адреса, и это в основном то, как вы начинаете многопроцессорная обработка (до тех пор, как код, выполняемый предназначены для такой архитектуры, конечно!)
Моих вопросов следующие:
- запуска имеет ли SIPI логического ядра? если не так, как логические ядра запускаются для выполнения кода
- Имеет ли логическое ядро собственный набор регистров или это просто двойные указатели команд, и процессор имеет некоторый умный физический способ переключения контекстов между ядрами и выполнения из обоих IP-адресов (например, Учитывая количество логических ядер на физическое, это два)
- Предположим, что каждому ядру нужна его собственная маскировка памяти, поэтому get имеет собственный MMU, логические ядра должны иметь свой собственный MMU? если не операционная система управляет памятью на ядро, учитывая количество логических ядер на физическом?
Я пробовал найти документацию об этом раньше, но обнаружил, что застрял в тысячах страниц документации Intel, и мне просто интересно, есть ли у кого-то эти знания и может пролить свет на мои вопросы и объяснить, что на самом деле происходит со мной
Так что в принципе можно сказать, что когда планировщик планирования поднимается на физическое ядро и только потом решил, какое логическое ядро в пределах этого физического должно запускать какую-то программу? – DrPrItay
@DrPrItay Я не совсем уверен, что вы имеете в виду. Но я бы сказал, что при планировании задачи, которую нужно запустить, планировщик может/должен предпочесть логический процессор на физическом ядре без каких-либо задач для логического процессора на физическом ядре с занятыми логическими ядрами. –
Давайте рассмотрим следующий сценарий: прерывание таймера поднялось до некоторого ядра. Это на физическое ядро, не так ли? теперь некоторые IRQ должны обрабатывать это прерывание и вызывать планировщик .... правильно? Я не уверен, что это работает следующим образом. Временные прерывания используются для планирования задач, но они повышаются на физическое или логическое ядро? мне кажется невозможным, что прерывание будет повышаться по логическому ядру. и если они подняты на физический, это означает, что при планировании планировщик решает, какие задачи будут выполняться на текущем физическом ядре, он работает ... правильно? – DrPrItay