Момент включения системы с несколькими процессорами.

Тема в разделе "WASM.OS.DEVEL", создана пользователем FastSoft, 13 май 2010.

  1. FastSoft

    FastSoft New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    54
    Адрес:
    Russia
    Когда процессор один, история такая:

    В проц на заводе зашит адрес памяти, из которого надо прочитать первую инструкцию и выполнить, как только на тебя "подадут питание". Этот адрес входит в диапазон памяти ПЗУ (bios) и по этому адресу лежит первая инструкция, которую проц увидит в этой жизни.

    А что происходит при включении компа с несколькими процами? Для сложности вопроса - с раздельными процами в разных сокетах (одноядерными, для примера).

    Начинают ли все из них сразу что-то выполнять? Они смотрят на один и тот же адрес в памяти? Сценарий кажется нереальным, ибо в этом случае много процессоров ломанутся читать MBR и т.п. Бардак... (-; Или "жить" начинает только какой-нибудь "нулевой" проц, остальные ждут пока главный их "включит"? Как главный их "включает"?

    Короче, скажите речь по данному вопросу. Спасибо.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    FastSoft
    а вы не думали, что так и есть. чем проц в однопроцессорной системе отличается от проца в многопроцессорной системе. но вы упускаете, что инструкция за инструкцией они оба доходят до места в программе биос, где он определяет, на каком из процов исполняется код и их пути расходятся. а вот в какие стороны - google
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А интеловские мануалы на что? Там описан в т.ч. и запуск процессора...
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ждут IPI в остановленном состоянии наверно.
     
  5. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    В момент включения системы, все из них начинают сразу выполнять одно и тоже. Они смотрят на один и тот же адрес в памяти, BIOS и т.д. Но хитрый БИОС выделяет для работы один из них, а остальные "усыпляет". Операционная система может "разбудить" параллельные процы с помощью Local APIC команды
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    С точки зрения алгоритма почитать про синхронизацию параллельных процессов, а именно симофоры, критические секции. И про строб сигнал #Lock
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Chizh
    Не верно. Смотрите маны. Все ядра, кроме первого находятся в состоянии на подобие того, которое достигается при исполнении Hlt. Хотя точно сказать не могу, нужно смотреть в доках.
     
  8. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    Цитата из Intel MultiProcessor Specification, параграф A.1 BIOS Post Initialization:
    Once system power is applied or the reset button is pressed (if the system is so equipped), a
    hardware circuit generates a system RESET sequence to put all the system hardware into an initial
    state. All active processors start to execute instructions and enter the POST (power-on self test)
    procedure of the BIOS
    http://www.intel.com/design/intarch/MANUALS/242016.htm
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Clerk
    в том то и дело, что усыпляет их биос
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    max7C4
    Эм.. а это:
    3A.8.1
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Clerk
    Но это не опровергает, что в это состояние его не может перевести биос. Здесь говорится, лишь о том что после перезагрузки один процессор (основной) выполняет загрузку системы (или что там будет делать с ним биос). А второй переходит в состояние ожидания, но это не значит, что именно аппаратная логика его останавливает (об этом ни слова).

    Хотя если прочитать сначала, станет понятно что все они стартуют независимо и начинают исполнять BIOS.
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    вот. в дополнении к предыдущей цитате

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

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    довольно полезно посмотреть сорцы открытых биосов.
    там даже с комментами :)
     
  14. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    После power- up (reset) один из процов (ядер) становится bootstrap (BSP), он и стартует выполнение биоса. Все остальные переходят в состояние "wait for SIPI", никакой код они не выполняют.
     
  15. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    medstrax1 прав, изначально стартует только один процессор, а остальные ждут команды. Цитата из Intel® 64 and IA-32 Architectures
    Software Developer’s Manual - Volume 3A, параграф 9.1:
    Pentium 4 and Intel Xeon processors — All the processors on the system bus
    (including a single processor in a uniprocessor system) execute the multiple
    processor (MP) initialization protocol. The processor that is selected through this
    protocol as the bootstrap processor (BSP) then immediately starts executing
    software-initialization code in the current code segment beginning at the offset in
    the EIP register. The application (non-BSP) processors (APs) go into a Wait For
    Startup IPI (SIPI) state while the BSP is executing initialization code.
     
  16. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А мне сдаётся, что все процы стартуют код bios. Тот проц, который первым захватил мьютекс в биосе, становится bootstrap, а те, которые не захватили - AP и впадают в спячку до прихода IPI-SIPI-SIPI.
     
  17. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Chizh
    Ну так это разве не биоса дело? Или думаешь, это хардварно исполняется?

    SadKo
    Где-то мимо меня пробегала инфа, что не мутекс, а просто стартует тот что с default APIC ID то бишь CPUID(1) EBX[24..31]== 0, а остальные отправляются спать. А с кода вроде все стартуют с одинакового - классического F000(база FFFF0000 лимит 0000FFFF):00000000, если склероз меня не подводит...
     
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Возможно и так. Но тогда при IPI мы бы не смогли передать адрес точки входа в код AP-процессора.
     
  19. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    Я так подумал, посмотрев журнал работы bochsout.txt от эмулятора Bochs в двухпроцессорной конфигурации. Там второй проц (CPU1) спит с самого начала. Вот текст:
    i[CPU1 ] cpu hardware reset
    i[APIC1] allocate APIC id=1 (MMIO enabled) to 0xfee00000
    i[CPU1 ] CPU[1] is an application processor. Halting until IPI.
     
  20. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    Ещё нарыл инфу. В том же Software Developer’s Manual 3A, есть очень интересный параграф 8.4.
    Цитата:
    8.4.1 BSP and AP Processors
    The MP initialization protocol defines two classes of processors: the bootstrap
    processor (BSP) and the application processors (APs). Following a power-up or
    RESET of an MP system, system hardware dynamically selects one of the processors
    on the system bus as the BSP. The remaining processors are designated as APs.
    ...
    The BSP executes the BIOS’s boot-strap code to configure the APIC environment,
    sets up system-wide data structures, and starts and initializes the APs. When the BSP
    and APs are initialized, the BSP then begins executing the operating-system initialization
    code.
    ...
    Following a power-up or reset, the APs complete a minimal self-configuration, then
    wait for a startup signal (a SIPI message) from the BSP processor. Upon receiving a
    SIPI message, an AP executes the BIOS AP configuration code, which ends with the
    AP being placed in halt state.

    Вывод: на аппаратном уровне происходит выбор стартового процессора, и именно он стартует остальные процессоры из BIOS.