2016-08-22 6 views
0

Мне интересно узнать больше о архитектуре x86 и о том, как она реализует многопроцессорную обработку.Hyper Threads, SIPI и регистры

Скажем, используя инструкцию cpuid, вы можете узнать, сколько логических ядер имеет ваш процессор, и используя какой-либо SIPI (Interrupt Interrupt Interrupt Interrupt), вы указываете ядру A, чтобы начать выборку и выполнение кода с какого-либо адреса, и это в основном то, как вы начинаете многопроцессорная обработка (до тех пор, как код, выполняемый предназначены для такой архитектуры, конечно!)

Моих вопросов следующие:

  1. запуска имеет ли SIPI логического ядра? если не так, как логические ядра запускаются для выполнения кода
  2. Имеет ли логическое ядро ​​собственный набор регистров или это просто двойные указатели команд, и процессор имеет некоторый умный физический способ переключения контекстов между ядрами и выполнения из обоих IP-адресов (например, Учитывая количество логических ядер на физическое, это два)
  3. Предположим, что каждому ядру нужна его собственная маскировка памяти, поэтому get имеет собственный MMU, логические ядра должны иметь свой собственный MMU? если не операционная система управляет памятью на ядро, учитывая количество логических ядер на физическом?

Я пробовал найти документацию об этом раньше, но обнаружил, что застрял в тысячах страниц документации Intel, и мне просто интересно, есть ли у кого-то эти знания и может пролить свет на мои вопросы и объяснить, что на самом деле происходит со мной

ответ

0

с точки зрения программиста (который включает в себя встроенное программное обеспечение и операционную систему), логический, гипер-резьбовой стержень сердечника столь же хорошо, как истинный, физический один .

x86 намного, гораздо сложнее, чем здесь можно ответить на разумную длину. Но, по сути, гиперпоточное ядро ​​дублирует минимальное количество состояний, необходимое для того, чтобы заставить его казаться, будто есть еще один полный ядро ​​(в основном, регистры). Это фактические исполнительные блоки (декодер команд, ALU и т. Д.). которые распределяются между локальными ядрами. Ядро отслеживает, к какому логическому ядру каждый блок эффективно работает.

Логические ЦП также будут иметь свой собственный регистр CR3, основу иерархии таблиц страниц. Тем не менее, AFAIK TLB, L1-кеш и все остальные компоненты MMU (которые явно не являются отдельным объектом на x86) распределяются между логическими ядрами. Ошибка страницы по-прежнему будет доставлена ​​в соответствующий логический процессор.

Для получения дополнительной информации, чем вы могли бы пожелать, вы должны посмотреть книгу Хеннесси и Паттерсона «Компьютерная архитектура - количественный подход».


1 - Это не совсем так. Рассмотрим ОС, пытающуюся выполнить две задачи на четырехъядерном процессоре с поддержкой Hyper-Threading. Было бы глупо планировать эти две задачи на логических ядрах одного и того же физического ядра, оставив три других физических ядра спать, зная, что они фактически не будут выполняться одновременно.

+0

Так что в принципе можно сказать, что когда планировщик планирования поднимается на физическое ядро ​​и только потом решил, какое логическое ядро ​​в пределах этого физического должно запускать какую-то программу? – DrPrItay

+0

@DrPrItay Я не совсем уверен, что вы имеете в виду. Но я бы сказал, что при планировании задачи, которую нужно запустить, планировщик может/должен предпочесть логический процессор на физическом ядре без каких-либо задач для логического процессора на физическом ядре с занятыми логическими ядрами. –

+0

Давайте рассмотрим следующий сценарий: прерывание таймера поднялось до некоторого ядра. Это на физическое ядро, не так ли? теперь некоторые IRQ должны обрабатывать это прерывание и вызывать планировщик .... правильно? Я не уверен, что это работает следующим образом. Временные прерывания используются для планирования задач, но они повышаются на физическое или логическое ядро? мне кажется невозможным, что прерывание будет повышаться по логическому ядру. и если они подняты на физический, это означает, что при планировании планировщик решает, какие задачи будут выполняться на текущем физическом ядре, он работает ... правильно? – DrPrItay