Как выполняется параллелизм в сборке Intel x86? - PullRequest
11 голосов
/ 05 сентября 2011

Мне любопытно узнать, как можно было бы кодировать параллельное программное обеспечение на сборке Intel x86. Интересны и нити, и сопрограммы с уступчивостью.

Я понимаю, что это не практично делать в сборке, но мне просто любопытно.

Ответы [ 2 ]

10 голосов
/ 05 сентября 2011

Если вы говорите о пространстве пользователя, так же, как вы делаете это, например, C. То есть, вы вызываете pthread_create () (или какой-либо другой API-интерфейс «создать новый поток» в вашей ОС) с соответствующими аргументами (включая адрес «основной» функции нового потока) и все готово.

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

Что делать с ASM вместо C? Ну, за исключением гораздо большего количества пота и слез, в основном то же самое.

9 голосов
/ 05 сентября 2011

На процессорах X86 многопроцессорная (и многопоточная) связь осуществляется через APIC (усовершенствованные программируемые контроллеры прерываний) http://en.wikipedia.org/wiki/Intel_APIC_Architecture.

При запуске ОС только один логический процессор выполняет код ОС, чтобы подтвердить унаследованное поведение одного процессора.

ОС использует APIC для отправки «SIPI» (межпроцессное прерывание запуска) в каждый другой поток.
Каждый поток активируется и обновляет область памяти, чтобы основной поток знал, сколько процессоровс ним нужно работать.
После того, как каждый поток объявляет о себе, он переходит в состояние прерывания с низким энергопотреблением.

Когда ОС хочет запустить что-то на этом логическом процессоре, она заставляет текущий запущенный процессор отправлять IPI (InterProcessor Interrupt) через APIC.
Когда задача выполнена, логический процессор может вернуться назад.в состояние низкого энергопотребления, ожидая следующего прерывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...