Организация операционной системы (часть 1)
- Досистемная загрузка (не сегшодня)
- Ядро+initrd (тоже не сегодня)
init
- запускает все нужные системе процессы
Что нужно для работы системы
монтирование ФС (etc/fstab)
наполнение /dev/ (в т. ч. динамическое)
- настройка сети (пользовательская vs системная)
- регистрация пользователей (login)
- прикладные службы (печать и т. п.)
- запуск по расписанию
- запуск сетевых служб по факту сетевого подключения
- запуск нескольких экземпляров (например, несколько сетевых подключений)
- запуск/останов по ручному запросу
- журналирование всего
- + Эшелонирование / зависимости компонентов (например, сетевые службы не раньше настройки сети)
- +отладка/профилирование
- ...
Межпроцессное взаимодействие
Традиционно: сигналы, сообщения, разделяемая память; + семафоры
В действительности: сигналы
kill и виды сигналов
Посылка сигналов с терминала, stty
Недостатки:
- Нетипизированные
- Малое пространство имён
- простая логика обработки (на самом деле нет)
D-BUS:
- Специальная служба («шина»)
- Одна для системы + сколько хочешь для пользователя (по факту две)
Клиент регистрирует сервис, в котором есть методы по определённым путям
- Методы можно вызвать, передав им параметры
Можно послать сигнал, который примут все, кто на него подписался
Примеры: qdbus-viewer, dbus-monitor, notify-send, qdbus -vv org.kde.kglobalaccel /component/kwin invokeShortcut 'Window Move',
Polkit: запуск некоторых заданий с иными привилегями
- Демон, отвечающий за логику
- Агент (суперпользователь)
- Клиент (ходит к демону)
Пример gparted
Udev: заведение устройств udevadm monitor
Systemd: не успеем
TODO