| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| система_инициализации_на_си [2024/02/18 19:58] – uf4n | система_инициализации_на_си [2024/03/09 18:11] (current) – uf4n |
|---|
| |
| ===== Концепция ===== | ===== Концепция ===== |
| External Linkызывает интерпретатор | |
| Хотелось бы достигнуть наибольшей возможной скорости инициализации системы. Для этого можно было бы включить **в один код на Си** зпуск демонов, монтирование файловых систбез оптимизаций кем, инициализацию драйверов и т.п. Это позволило бы сократить на порядок количесво системных вызовов, неизбежных при использовании Bash. | Хотелось бы достигнуть наибольшей возможной скорости инициализации системы. Для этого можно было бы включить **в один код на Си** зпуск демонов, монтирование файловых систем, инициализацию драйверов и т.п. |
| |
| Проблемы обычного sysvinit: | Проблемы обычного sysvinit: |
| |
| |
| Система должна быть хоть немного интерактивной, хотя на первых этапах об этом можно не задумываться. Если пользователь захочет изменить набор запускаемых сервисов или порядок их запуска некой специальной командой (аналог service), исходный файл на Си будет перегенерирован и перекомпилирован. Это напоминает принцип работы загрузчика LILO, для которого надо запускать процедуру перегенерации MBR и PBR при любых вмешательствах в конфигурационные файлы или изменениях ядра. | Система должна быть хоть немного **интерактивной**, хотя **на первых этапах** об этом **можно не задумываться**. |
| |
| Очень бы хотелось сохранить интерактив, подобный тому, что предоставляет sysvinit, так как он весьма прост в реализации и понятен системным администраторам. Им не придётся переучиваться. | Очень бы хотелось сохранить интерактив, подобный тому, что предоставляет sysvinit, так как он весьма прост в реализации и понятен системным администраторам. Им не придётся переучиваться. |
| | |
| | Если пользователь захочет изменить набор запускаемых сервисов или порядок их запуска, исходный файл на Си будет перегенерирован и перекомпилирован. Это напоминает принцип работы загрузчика LILO, для которого надо запускать процедуру перегенерации MBR и PBR при любых вмешательствах в конфигурационные файлы или изменениях ядра. |
| |
| Запуск каждого демона можно описать в отдельном текстовом файле. При добавлении сервиса в автозапуск, подобно тому, как это делается в sysvinit, система инициализации должна отследить изменения в каталогах /etc/rc*.d/ (условно) и сконкатенировать код запуска демона в код init'a. Сразу после этого файл компилируется со всеми возможными оптимизациями (компилировать такой init как-то иначе смысла нет), такими как march=native, O3 и flto. | Запуск каждого демона можно описать в отдельном текстовом файле. При добавлении сервиса в автозапуск, подобно тому, как это делается в sysvinit, система инициализации должна отследить изменения в каталогах /etc/rc*.d/ (условно) и сконкатенировать код запуска демона в код init'a. Сразу после этого файл компилируется со всеми возможными оптимизациями (компилировать такой init как-то иначе смысла нет), такими как march=native, O3 и flto. |
| |
| | Библиотечную функцию execve можно попробовать реализовать на ассемблече с помощью удобных макросов. |
| |
| | * Наш init сохраняет систему уровней запуска (runlevels) |
| |
| uf4n | uf4n |