← Назад к статьям

06 сентября 2023 г.

ПК на диете. Или что вам на самом деле нужно от ОС.

🧠 10% LLMLINUXОПЕРАЦИОННЫЕ СИСТЕМЫ

Современные операционные системы непринужденно потребляют гигабайты ОЗУ, перманентно согревая карманы и помещения циклами процессора своим несметным числом фоновых процессов. macOS, например, очень любит разбирать ваши фотографии из iCloud, размечая на них лица. Android сканирует Wi-Fi сети вокруг вас и считает шаги. iOS слушает ваше "Привет, Сири", которое звучит дважды после покупки iPhone и более никогда. На носимых устройствах для поедания ресурсов есть естественный ограничитель — батарея, поэтому iOS просто запрещает фоновую работу большинства приложений, Android также всячески противится. Но на десктопных и серверных ОС ограничений нет — электричество бесконечное и бесплатное, а значит можно счастливо высаживать в ноль батарею вашего ноутбука.

Но что из того, что происходит за кадром, действительно нужно именно вам, как пользователю? Когда ресурсов гора, дела никому нет, а мне выпала прекрасная возможность разобраться в вопросе, превращая компьютер за 20$ в рабочую машину.

Встречайте красавца — Raspberry Pi Zero 2 W. Процессор Arm Cortex-A53, 4 ядра, 1 ГГц и 512 Мб ОЗУ, наравне с Wi-Fi, HDMI и Bluetooth дерзко возвращают нас во времена больших деревьев, когда сопоставимой мощности коробка не влезала не только в часовой карман джинсов, но разве что в багажник авто. Подключаем монитор, мышь и клавиатуру, накатываем Raspberry Pi OS, загружаемся, открываем Google Chrome и наблюдаем полное молчание в радиоэфире. В смысле вообще, он просто не открывается. Смотрим на свободную память и выясняем, что наша красивая, как Renault Logan, ОС только что заняла порядка 50% ОЗУ, а то и больше. И современный браузер вдруг отказывается открывать сайт размером в 50 Мб в сжатом виде при свободных 200 Мб ОЗУ. Он даже интерфейс свой загрузить в это не способен.

Меняем дистрибутив на диетический (DietPi), и о чудо — жалкие 30 секунд и искомый сайт открыт! Визуально не поменялось приблизительно ничего, а машинка дело сделала.

Выясняем, что наша ОС похудела в своих памятных ожиданиях до жалких 119 Мб. И для меня, как пользователя, не изменилось ничего. Кроме работоспособности нужного софта.

Ну так и что мне правда нужно, чтобы тыкать мышкой в браузер?

Давайте разберем процессы незамутненной лишним ОС — только самое необходимое лично вам.

На примере Linux. И в слегка ограниченном числе, без совсем уж низкоуровневых, где нужно 2 тома академических прочитать для начала. Для Windows, macOS, iOS, Android, QNX, FreeBSD, NeXTSTEP, Solaris, OS/400 и любых прочих фактически отличаться будут лишь названия, а смысл и назначение останется тем же.

Начнем с процессов суперпользователя, то есть самой ОС, без них у нас ничего не получится:

  • init — координирует процесс загрузки и конфигурации окружения для пользователя, мать драконов и отец всех прочих процессов
  • sshd — сервер для удаленных подключений к ОС по SSH
  • rngd — демон для заполнения энтропией генератора псевдослучайных чисел, то есть собиратор всякого мусора со всех железных устройств ПК, чтобы случайные числа в системе были более, ну, случайными
  • cron — планировщик задач, запускает всякое по расписанию, например отправить в Google все собранные по вам данные за последнюю минуту
  • polkitd — контролёр привилегий процессов, когда черни нужно пообщаться со старшими, вместо аудиенции с оными предоставит писчего, бересту и курьерский сервис для доставки мессаджа, проще говоря — когда процессу нужны ресурсы, не даёт их целиком, а чутко следит за их использованием
  • bluetoothd — когда мышкой делаем тык-тык, доставляет тык-тык до нашей странички, а ещё регулярно теряет эту мышку и снова находит, но чаще первое
  • hciattach — подключает последовательные асинхронные приемо-передатчики к стеку Bluetooth, фактически физический протокол передачи данных от железа к ОС и обвязка к нему
  • dhclient — DHCP клиент, нижайше просит дать роутер нам адресок какой, чтоб в сети были видные, самостоятельные и от других компьютеров всякое интересное получать
  • systemd-udevd — менеджер железа, управляет подключениями к ОС разных клавиатур, флешек, принтеров, джойстиков и всего, что в компьютер воткнуть можно без молотка
  • systemd-logind — вас тут много, а он один, и следит, чтоб каждому юзеру выдали консоль, процессов пачку и чтоб обиженным никто не ушел, а ещё следит за нажатием кнопки ВЫКЛ.
  • systemd-journald — хранитель логов, сшивает вашу коллекцию Playboy, любовные письма, события ядра и прочее происходящее с системой
  • login — стоит у ворот, тыкает алебардой в вас и спрашивает, кто такой, чего желаешь, и открывает ворота при правильном пароле
  • dbus-daemon --system — менеджер системы доставки сообщений между процессами, --system часть занимается особо важными, мол новую флешку занесли, товарищ ядро, чего делать будем?

Вышеперечисленное нужно с виду самому ядру, но нам в том числе, иначе Bluetooth, мышка с клавой и сеть админить придется руками, а вы так быстро не сумеете.

Теперь лично наши процессы:

  • top — спонсор нашего текста, собирает и выводит информацию о запущенных в системе процессах
  • systemd --user — отвечает за все пользовательские подкапотные процессы, например включить вам Steam при запуске ОС, или перезапустить торрент-клиент, если его кто убил
  • dbus-daemon --session — вышеназванный менеджер системы доставки сообщений, но уже для пользовательских приложений, мол товарищ телеграм, там у нас вайфай отвалился с концами, уведомляю, всего доброго, хорошего настроения
  • sd-pam — сложная система проверки прав на методы (не спрашивайте, правда сложная)
  • bash — хранит доисторические мемы про патчинг KDE2 под FreeBSD, а также командный интерпретатор UNIX — место, где можно команды разные компьютеру давать с клавиатуры
  • startx — входная точка, запускающая нам курсор мыши и дающая дальше включить менеджер окон, панельки, часики и прочее на экран не в режиме 80x25 символов
  • xinit — скрипт для непосредственного запуска менеджера окон, рисования панелек, часиков и прочего на экран
  • lxqt-session — запуск сессии GUI для пользователя, грузит не просто панельку, а именно вашу, любовно настроенную панельку с часами
  • ssh-agent — хранилище разных ключей и паролей
  • openbox — менеджер окошек, чтобы мышкой можно было туда-сюда двигать наш браузер
  • lxterminal — окошко, в котором будет запущен bash
  • lxqt-policykit-agent — агент аутентификации для фреймворка обработки привилегий процессов внутри LXQt (потерпите, мы уже заканчиваем)
  • xorg — великая и ужасная оконная система Linux, используемая для построения графического интерфейса пользователя

И всё! Неужели в самом деле всё — спросит меня читатель, внимательно ознакомившийся со всем списком гаек и болтов Линукса, ничего не проскроллив и не забив на этот список все возможные огромные болты. В самом деле всё — отвечает ему писатель.

А как же распознавание лиц на фотографиях из облака? А где отправка телеметрии в Microsoft? А что передаст товарищу майору метаданные моих взаимоотношений с миром? Кто же будет выдавать подключенным к моему хотспоту пользователям IP адреса? Кто будет искать горячих пользователей Интернета, желающих пообщаться рядом со мной?

А вот и занятный факт. На самом деле, чтобы вы могли двигать мышкой по экрану, смотреть на бегущее время и запустить Google Chrome, вашей ОС нужно в современном мире порядка 128 Мб, да и то на небольшой зоопарк подключенного всеми способами железа. А куда запущенная винда съела ещё 6 Гб сверху — вопросы к Microsoft, Apple, Google и Спортлото.

P.S. Работать на Raspberry Pi в качестве десктопа и правда можно, что очень отрадно и достойно для компьютера размером с половину банковской карты и ценой в 3 шаурмы. Но современный мир уже привык к тому, что сайт можно сделать размером в 100 Мб, а клиент для чатиков сделать прямо в браузере вместо написания нативного приложения, поэтому приходится в конце вздохнуть, и сесть обратно за ноутбук, на котором в шестьдесят четыре раза больше памяти, и на котором сайтик с твитами откроется пошустрее.