#heading[Организация чипсетов.]
#emph[Организация чипсетов (двухмостовая архитектура и ее развитие, UMA/NUMA).]

== Развитие двухмостовой архитектуры
#import "/commons.typ": imagebox
#imagebox("dvu_most.png", label: [Пример двухмостовой архитектуры с различной реализацией шин CPU и контроллерами памяти], height: 150pt)

В двухмостовой архитектуре, в зависимости от конкретной реализации, процессоры либо каждый по отдельности подключены к северному мосту, либо подключены через общую шину (обычное подключение идёт через шину FSB - front side bus). Северный мост в свою очередь соединён с южным мостом

*Основные идеи двухмостовой архитектуры*:
+ Вся быстрая периферия (все быстрые устройства, с которыми нужно работать процессору) подключается к северному мосту. Например, контроллеры RAM.
+ Все медленные устройства подключаются к южному мосту. Например, внешние жёсткие диски, USB устройства, различные устройства, которые могут быть подключены с помощью шины PCI-Express.

*Основные недостатки двухмостовой архитектуры:*
+ В общем случае внешним устройствам для того, чтобы взаимодействовать с оперативной памятью, нужно _реализовывать запросы через процессор_. Шина между процессором и северным мостом становится так называемым узким местом (bottleneck). Однако, данный недостаток в некоторых реализациях был компенсирован с помощью DMA (Direct memory access). Данный подход несёт в себе идею предоставления устройствам переферии прямой доступ к оперативной памяти без отправки запросов в процессор.
+ В общем случае двухмостовой архитектуры существует всего _один канал доступа к оперативной памяти_. Таким образом, например, нескольким ядрам процессора приходится поочередно отправлять запросы к оперативной памяти, что уменьшает производительность. Однако, данный недостаток в некоторых реализациях был компенсирован выносом контроллера оперативной памяти из северного моста наружу и добавлением нескольких контроллеров оперативной памяти. Таким образом, появилась возможность к различным модулям оперативной памяти обращаться параллельно, увеличив производительность.

#imagebox("dvu_next.png", height: 230pt, label: [Пример двумостовой архитектуры с контроллером памяти и _PCI-E_ на кристале процессора.])

Впоследствии было замечено, что PCI-E устройства также достаточно быстрые и взаимодействие с ними через южный мост снижает производительность. Например, через PCI-E можно подключать дорогостоющие видеокарты или быстрые SDD-диски. Поэтому контроллер для взаимодествия с устройствами по шине PCI-E был перенесён на северный мост, а впоследствии на кристалл процессора.

После чего было замечено, что память становится все быстрее и работать с ней нужно все больше, поэтому контроллер памяти с северного моста был перенесён на кристалл процессора.

Таким образом, на кристалле процессора находятся контроллеры для взаимодествия с самой быстрой периферией (RAM и PCI-E), северный мост потерял надобность и был удален. 

#imagebox("system_on_crystallpng.png", height: 150pt, label: [Приблизительная архитектура современных портативных девайсов _*(SoC)*_.])

После чего пришла эра портативной электроники. Графические ускорители было решено расположить также на кристале процессора. Таким образом, конечным этапом развития двухмостовой архитектуры является Soc (System on crystal). Эта архитектура подразумевает под собой расположение всех контроллеров периферии на кристале процессора. Этот подход является типичным практический для всей портативной электроники.

== Модели разделения памяти в мультипроцессорах (UMA/NUMA)
=== UMA (Uniform Unix Access / Однородный доступ к памяти)
#grid(columns: (auto, 130pt), column-gutter: 20pt, [
  Система UMA (Uniform Memory Access) - это архитектура с общей памятью для многопроцессорных систем. В этой модели используется единственная память, к которой обращаются все процессоры представленной многопроцессорной системы с помощью межсоединительной сети. Каждый процессор имеет равное время доступа к памяти (задержка) и скорость доступа. Он может использовать либо одну шину, несколько шин или коммутатор.

  Данный подход хорошо показывает себя в работе, если количество вычислительных ядер находится в среднем диапазоне. Однако, при большом количестве вычислительных ядер данный подход показывает себя хуже, поскольку контролировать запросы к общей памяти в такой ситуации становится весьма затруднительно.
], imagebox("UMA.png"))

=== NUMA (Non-Uniform Memory Access / Неоднородный доступ к памяти)
NUMA также является многопроцессорной моделью, в которой каждый процессор связан с выделенной памятью. Однако эти небольшие части памяти объединяются в единое адресное пространство. Время доступа к памяти зависит от расстояния, на котором расположен процессор, что означает изменение времени доступа к памяти. Это позволяет получить доступ к любой ячейке памяти, используя физический адрес, однако время доступа при этом получается неоднородным.

#imagebox("NUMA.png", label: [У каждого процессора есть "своя" оперативная память, наиболее близкая к нему. Чтобы обращаться с другой памятью, нужно идти к другим процессорам, таким образом время доступа получается неоднородное])

Данный подход хорошо показывает себя при большом количестве вычислителей, каждый из которых реализует независимые вычисления. Хорошим примером являются удалённые сервера. Сервер разделяется на блоки, каждый из которых является практически независимым. Таким образом одновременно работает множество независимых процессов.



