Linux запущен на Intel 4004, первом коммерческом микропроцессоре

Продемонстрирован успешный запуск ядра Linux с rootfs-окружением из Debian на разработанном в 1971 году 4-разрядном процессоре Intel 4004, который считается первым коммерчески выпускаемым микропроцессором на одном кристалле. Процессор содержит всего 2300 транзисторов, поддерживает 46 инструкций и обеспечивает производительность на уровне 60 тысяч операций в секунду.

Для запуска программ на реальной системе вначале была сформирована простейшая плата, состоящая из микропроцессора Intel 4004, тактового генератора Intel 4201, чипа оперативной памяти Intel 4002-1, размером 20 байтов, контроллера постоянной памяти Intel 4289 и микроконтроллера ATMEGA48, симулирующего постоянную память. В процессе развития проекта была подготовлена более сложная плата, поддерживающая чтение данных с SD-карты и дополнительно включающая память для размещения Linux-окружения, запускаемого в эмуляторе. Кроме того, для проведения экспериментов и упрощения разработки на современных системах был написан эмулятор чипа Intel 4004.




Так как архитектура Intel 4004 имеет серьёзные ограничения и может адресовать лишь 4 КБ постоянной памяти, вместо прямого запуска Linux была использована идея написания эмулятора процессора MIPS R3000, на котором может работать Linux. Работу усложняло то, что для Intel 4004 не существует и не может быть создано компиляторов для языка Си, поэтому эмулятор пришлось создавать на ассемблере. Таким образом, работа была организована так, что непосредственно на чипе Intel 4004 запускался эмулятор, который в свою очередь выполнял окружение на базе ядра Linux.

MIPS выбран как оптимальный вариант для эмуляции, укладывающийся в ограничения Intel 4004 и размер доступной памяти. Например, созданию эмулятора ARM мешал возникающий сдвиг операндов, RISCV – запутанные режимы адресации, x86 – большой расход памяти на декодирование инструкций, PPC – общая усложнённость эмуляции при небольшом размере памяти.

Из-за малой производительности Intel 4004 эмулятор получился очень медленным – обработка каждой виртуальной секунды в эмулируемом окружении требовало почти 4 часов вычислений на реальной системе с процессором Intel 4004. Например, выполнение тестового приложения для отрисовки множество Мандельброта с разрешением 13 x 40 при использовании вычислений с плавающей запятой заняло 30 дней, а при использованием целочисленной арифметики – 9 часов.

После внесения дополнительных оптимизаций загрузка Linux в подготовленной конфигурации заняла более 8 дней. При записи полного видео загрузки использовалось ускорение в 120 раз (одна секунда на видео соответствует 2 минутам работы эмулируемого процессора MIPS).
Для желающих повторить эксперимент опубликованы спецификация и схема платы, образ Linux-системы и код сопутствующего инструментария, эмуляторов MIPS R3000 и Intel 4004, загрузчиков и анализатора шины MCS-04.



Release. Ссылка here.