Инженер запустил Linux на Intel 4004

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

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

По данным OpenNET, работа над проектом осложнилась тем, что для Intel 4004 не существует и не может быть создано компиляторов для языка C, поэтому Гринбергe пришлось создавать эмулятор на ассемблере. Он смог добиться, чтобы непосредственно на Intel 4004 запускался эмулятор, который в свою очередь выполнял окружение на базе ядра Linux.

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

Для запуска программ на реальной системе Intel 4004 Гринберг сделал матплату, состоящую из микропроцессора Intel 4004, тактового генератора Intel 4201, чипа оперативной памяти Intel 4002-1, размером 20 байтов, контроллера постоянной памяти Intel 4289 и микроконтроллера ATMEGA48, симулирующего постоянную память.

В процессе развития проекта инженер разработал и сделал более сложную матплату, дополнительно включающую память для размещения запускаемого в эмуляторе Linux-окружения и поддерживающую симуляцию постоянной памяти, используя SD-карту. Также для проведения экспериментов и упрощения разработки на современных системах Гринберг написан эмулятор чипа Intel 4004.

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

Исходный код проекта доступен для скачивания на сайте инженера. В архиве содержится анализатор шины MCS-04 для программного обеспечения Saleae, исходный код для эмулятора i4004 Dectstation2100, исходный код для MIPS MBR и загрузчиков второго этапа, конфигурация ядра и информация о версии, а также очень страшный эмулятор u4004 платы Linux/4004. Лицензия: бесплатно для некоммерческого использования.

Также отдельно доступен для скачивания архив со спецификацией, схемы плат и образ Linux-системы для воспроизведения и тестирования этого решения.

После внесения оптимизаций Гринберг добился, что загрузка Linux в подготовленной конфигурации занимает чуть более 8 дней. При записи полного видео загрузки использовалось ускорение в 120 раз (одна секунда на видео соответствует 2 минутам работы эмулируемого процессора MIPS).

Источник: habr.com

0 0 голоса
Рейтинг новости
9109
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии