Чем отличаются типы процессоров? Почему в ARM такой хаос?

Вопросы теоретические и взаимосвязанные. А чем меж собой различаются стандартные ПК-процессоры i386-i686, amd64, PowerPC (вроде бы из той же оперы, да и в QEMU заводятся точно так же), MIPS (насколько мне известно, используется в некоторых роутерах), ARM (armv4l-armv8l, или же armeabi/armhf/aarch64), SPARC, не говоря о куче крайне малоизвестных архитектур, которые ты в жизни только в QEMU и встретишь, если не будешь проявлять реального интереса к ним. Для тех, кто не понял:

 ~ $ qemu-system-[Tab]
qemu-system-alpha
qemu-system-arm
qemu-system-aarch64
qemu-system-aarch64-be
qemu-system-x86
qemu-system-x86-64
qemu-system-ppc
qemu-system-ppc64
qemu-system-ppc64el
qemu-system-mips
qemu-system-xtensa
qemu-system-xtensaeb
qemu-system-m68k
...

В чем особенность каждой из этих архитектур, чем они различаются?

И почему в ARM-подобных архитектурах творится полный хаос? Условно говоря, я на Intel и AMD одной битности могу установить ровно одну и ту же ОС, одно и то же ядро Linux/Unix, одни и те же драйвера под одну и ту же периферию, использовать одни и те же [относительно] низкоуровневые программы (загрузчик, ядро, драйвера) и не мучиться с не слишком низкоуровневой разработкой под i[3-6]86/amd64. А вот в ARM нужно морочить голову с конкретным процессором. Скажем так, на двух Intel-ах одной битности, или даже Intel и AMD одной битности одни и те же загрузчик и ядро заведутся без проблем. А в ARM даже наипохожих моделей такого не будет! И все хуже тем, что есть не просто процессоры, а SoC (System on a Crystal), и их составляющей является не только процессор (причём не один: например, в Qualcomm Snapdragon 660 используется 4 ядра Cortex-A53 и 4 ядра Cortex-A73), но и видеочип, камера, WiFi адаптер и много чего ещё. Ещё тяжелее, если нужно виртуализировать ARM, мой прошлый вопрос был как раз про это. Даже в QEMU есть поддержка не всех процессоров, а уж SoC там не эмулируешь, по крайней мере, без танцев с бубном.

Конечно, есть попытки устранить этот хаос. Да, я сейчас говорю про UEFI - своего рода прослойку между процессором, его базовыми микропрограммами, BIOS, aboot и собственно ОС, её загрузчиком и ядром. Ведь UEFI уже сам предоставляет операционной системе часть драйверов и относительно унифицированную систему загрузки, а порой и возможность "залезть" в систему как бы до загрузки самого ядра или даже загрузчика. Иногда дело вообще доходит до лёгкого доступа к файловой системе, EFI Shell и хоть какого-то доступа в сеть!! По сути, UEFI - это уже сама по себе микро-ОС.

Не менее интересен, правда, и сам UEFI, и, преимущественно мобильные, ARM-ы. Дело в том, что есть такая вещь, как TPM (на ПК) и TEE (ARM). По сути, TEE - это отдельная ОС, работающая с ключами к основной ОС. Но, она даже не прекращает работу при запуске Android! Более того, к ней ОС даже обращается когда-то (вспоминаю Linux драйвер qseecomd). Вот как работает параллельная, одновременная загрузка двух ОС сразу - непонятно, у меня это не укладывается в голове. Именно одновременная загрузка, а не возможность загрузить одну из множества установленных систем.

Я прекрасно понимаю, почему создан ARM и его аналоги RISC-V и MIPS, в чем преимущества и недостатки стандартных процессоров x86 и ARM друг перед другом. Но мне все равно до конца не понятно, почему так различны (и почему вообще существует столько архитектур) все эти архитектуры, в чем их особенности, преимущества и недостатки. И чем объясняется ТАКОЙ хаос в ARM с ядрами, драйверами, загрузчиками.


Ответы (0 шт):