Writing your own BEAM
Автор исследует, сколько усилий требуется для реализации собственных примитивов BEAM, создавая упрощенную версию виртуальной машины на Elm. Используя стиль передачи продолжений (CPS), он избегает необходимости писать парсер, CLI и другие компоненты полноценного компилятора, сосредоточившись на ядре системы. Этот подход позволяет сосредоточиться на основных концепциях, таких как планировщик, процессы и их взаимодействие.
Начав с базовых инструкций End (завершение программы) и Work (имитация выполнения работы), автор добавляет примитив Spawn для создания процессов, что требует изменения структуры планировщика для отслеживания нескольких процессов. В планах реализация обмена сообщениями, выборочного приема и связывания процессов для создания деревьев надзора. Ключевой особенностью подхода является использование CPS для упрощения реализации, где продолжения обрабатывают управление потоком выполнения.
Комментарии (79)
- Обсуждение в основном вращается вокруг BEAM: его происхождение, ограничения и будущее.
- Участники обсуждают, что BEAM не переносим между дистрибутивами Linux, в отличие от JVM, и требует компиляции из исходников.
- Поднимается вопрос о том, что написание статьи не объясняет читателям, что такое BEAM, и что это значит для них.
- Некоторые участники предлагают использовать Nix или статически слинкованный BEAM для решения проблемы портируемости.
- Также обсуждается, что исходный код BEAM доступен, и что ранние версии BEAM, возможно, были бы полезны для изучения.
Inside OS/2 (1987)
OS/2: ядро и сервисы
OS/2 — многозадачная ОС для 286/386, API-ориентированная, расширяемая. Архитектура: ядро, Windows Presentation Manager, LAN Manager. Достаточно ядра для многозадачности; WPM и LAN не обязательны.
SDK
Поставляется с оптимизирующим С-компилятором, макро-ассемблером, линковщиком, отладчиком CodeView, редактором. Документация по вызовам и драйверам.
Планировщик
Превентивный, вытесняющий: по таймеру ядро перехватывает CPU и переключает задачи. Приоритеты + кванты времени; при переключении сохраняются регистры и режимы.
Динамические библиотеки
API реализован в DLL; адреса 32-битные, параметры через стек. Экономия диска и RAM: код загружается и разделяется между процессами. Ошибки в DLL исправляются без пересборки приложений. Повторный запуск той же программы переиспользует код, выделяя только данные/стек/кучу.
Режимы процессора
- Protected: многозадачность, изоляция процессов.
- Real: совместимость с MS-DOS, прямой доступ ко всей памяти.
Комментарии (48)
- OS/2 2.1 умело загружаться и многозадачно работать даже с одной 1,44 МБ дискеты без GUI, чем восхищались участники.
- Обсуждали преимущества вытесняющей многозадачности OS/2 над кооперативной Windows 3.x и особенности Pascal-calling convention, экономившей 3 байта и такты на вызов.
- Вспомнили, что ранний OS/2 создавался совместно IBM и Microsoft, но к 1990 г. Microsoft переключилась на Windows NT, а IBM осталась с OS/2.
- Отметили долгие годы работы OS/2 в терминалах MetroCard нью-йоркского метро и вспомнили SOM как более продвинутую альтернативу COM.
FreeBSD Scheduling on Hybrid CPUs
Цель
Адаптировать планировщик ULE для гибридных CPU (P- и E-ядер Intel, big.LITTLE ARM), позволяя выбирать приоритет: максимальная производительность, энергоэффективность или баланс.
Проблема
Традиционные cpuset(1) лишь ограничивают, какие ядра разрешены, но не говорят, какие из них предпочтительны. Прямое связывание политик с масками cpuset приводит к жёсткой фиксации и конфликтам при наследовании.
Решение
- Ввести политики как отдельный параметр, привязанный к cpuset.
- Дочерние cpuset могут лишь ужесточать политику, а не расширять.
- Поддержать шкалу «энергоэффективности» 0–100:
0 = все P-ядра, 100 = только E-ядра, промежуточные значения задают пропорцию. - Позволить админу задавать разные политики для разных разделов системы (джейлы, cgroup, NUMA-домены).
Комментарии (24)
- Архитектура P- и E-ядер красива на словах, но на практике планировщик быстро теряет контроль: короткие задачи могут быть латентно-чувствительными, а длинные — срочными.
- Пользователи сравнивают ситуацию с провалом AMD Bulldozer: «много ядер, посредственная производительность» и ощущение непредсказуемости.
- Некоторые ушли на Linux, где можно вручную управлять распределением на гетерогенных CPU.
- Предлагают использовать nice-уровни и источник питания (AC/батарея) как простые эвристики для выбора ядра.
- Многие требуют ручного контроля: «дайте мне кнопку “сейчас всё важно” или “выжми максимум времени автономии”».
- Утверждение, что «все новые Intel уже гибридные», оказалось преувеличением: i3, Pentium, Celeron и часть Xeon всё ещё без E-ядер.