Выполнение кода другого процессора (x86 блок)

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

Если вы используете count(), вы перебираете список один раз, чтобы получить значения b, а затем снова зацикливаете его, чтобы увидеть, сколько из них равно 1.

Аккуратный способ может использовать reduce():

reduce(lambda x,y: x + (1 if y.b == 1 else 0),list,0)

Документация говорит нам, что reduce() будет:

Применить функцию два аргумента в совокупности с элементами итерируемого слева направо, чтобы свести итерируемое к одному значению.

Таким образом, мы определяем lambda, который добавляет одно накопленное значение, только если атрибут элемента списка b равен 1.

10
задан starblue 26 October 2009 в 11:50
поделиться

1 ответ

Итак, у вас есть автономная (вы сказали «предзагрузочная») программа, например, загрузчик, работающая в реальном режиме? И это на PeeCee с обычным BIOS?

В этом случае у вас работает только один процессор. Для раскрутки других модулей ЦП операционная система обычно выполняет так называемый универсальный алгоритм запуска , который выглядит следующим образом:

BSP sends AP an INIT IPI
BSP DELAYs (10mSec)
If (APIC_VERSION is not an 82489DX) {
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
}
BSP verifies synchronization with executing AP

BSP - это загрузочный процессор. AP - это процессор приложений. IPI - это межпроцессорное прерывание. Чтобы выполнить IPI, вам необходимо включить APIC, расширение контроллера прерываний для архитектуры ПК, которое не включается при загрузке. Вот почему код беспокоится о том, какая версия ICU запущена. Все это довольно глубокая магия ядра. Вы можете попробовать посмотреть Linux, NetBSD, или другой исходный код * BSD для примера, но его будет нелегко прочитать. Если вы действительно выиграете, вы можете найти где-нибудь небольшое ядро ​​или отдельную программу тестирования SMP.

Для получения дополнительной информации см. Спецификацию мультипроцессоров Intel .

9
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: