Обновить
64K+

Системное программирование *

Обеспечение работы прикладного ПО

79,6
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Особенности разработки встраиваемого программного обеспечения. Часть 2

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели3.5K

В предыдущей части статьи я рассказал об особенностях реализации многозадачности для ВПО. Однако, какой бы ни был выбран подход к многозадачности, архитектура самих задач напрямую влияет на эффективность работы всей встраиваемой системы.

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

Читать далее

Новости

От RISC‑V до pull request в open source: что сделали участники летней школы СПбГУ за месяц

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели4.8K

В начале августа завершилась Летняя проектная школа программирования СПбГУ. 30 студентов, в том числе обучающиеся на образовательных программах ТОП ИТ СПбГУ, якорным партнером которых выступает YADRO, работали над задачами в области системного программирования, архитектуры RISC-V, разработки компиляторов, использования ПЛИС и оптимизации ПО с открытым исходным кодом. На итоговой защите выступили 29 участников. Помимо подготовки учебных отчетов, участники находили ошибки в проектах с открытым исходным кодом, готовили сообщения об ошибках (bug reports) и запросы на включение изменений (pull requests), профилировали приложения и оптимизировали библиотеки.

Школа проходила с 6 июля по 1 августа. В ее основе лежало проектное обучение: студенты осваивали новые технологии и инженерные подходы, работая над практическими задачами вместе с наставниками. Отдельное направление было посвящено RISC-V. О проектной работе и ее результатах рассказываем в этом материале.

Читать далее

Linux из Java без JNI: от FFM и /dev/kvm до интерактивной консоли

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели7.8K

Да, направление здесь немного непривычное: обычно Java запускают в Linux, а здесь я решил попробовать запустить Linux из Java.

Обычно Java и KVM находятся довольно далеко друг от друга: с одной стороны JVM и управляемая память, с другой /dev/kvm, ioctl, регистры vCPU и физическая память guest ОС. В этой статье разберём, как связать эти два мира через Foreign Function & Memory API без JNI. На примере panama-kvm пройдём путь от первого вызова KVM API до загрузки Linux, настройки памяти, обработки VM exits и интерактивной консоли внутри гостевой системы.

Запустить VM из Java

Make Perl Great Again! Поиски простоты в программировании

Уровень сложностиСложный
Время на прочтение56 мин
Охват и читатели5.9K

Программирование само по себе очень сложная штука, и поэтому программировать надо как можно проще. Именно поиску простых способов программирования и посвящена эта статья.

Давайте я возьму какую‑то простую практическую задачу и решу ее, но не просто так, а как можно проще. Итак...

Читать далее

Доставка вебхуков: повторы, дубли и ещё три источника проблем

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели4.6K

Получатель записал заказ в базу, но соединение оборвалось до того, как отправитель получил ответ. Повторить вебхук — рискнуть вторым заказом, не повторить — потерять событие. Разбираем пять задач доставки: расписание повторов, дубли, подпись, изоляцию недоступных получателей и защиту от запросов во внутреннюю сеть.

Читать далее

Смотрим ILA без программатора на Zynq SoC

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели9.9K

Всем привет!
Сегодня я хочу рассмотреть довольно интересную возможность на Zynq SoC, связанную с отладкой с помощью ILA (Integrated Logic Analyzer) без физического подключения через JTAG.

В этой статье мы попробуем разобраться, как использовать Xilinx Virtual Cable, соберем драйвера, посмотрим как подключаться из Hardware Manager Vivado.

Читать далее

Работают ли запреты внутри песочницы ИИ-агента?

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.2K

ИИ-агент работает в песочнице, но отдельным инструментам нужны разные права. Анализатору можно читать исходники, а менять их нельзя. Как проверить, что этот запрет действует?

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

Читать далее

Rust 1.99.0: функции с переменным числом аргументов, информация о схеме размещения типа

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.4K

Команда Rust рада сообщить о новой версии языка — 1.99.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.99.0 вам достаточно выполнить команду:

$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску 1.99.0.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках!

Читать далее

Часы Unix тикали от розетки: откуда взялся 1970 год и что сломается в 2038-м

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели16K

Первое издание Unix Programmer's Manual датировано 3 ноября 1971 года, и на странице про системный вызов time в нем написано, что система хранит время в шестидесятых долях секунды, прошедших с полуночи 1 января 1971 года. Я наткнулась на эту строчку, когда пыталась ответить себе на вопрос, который, по-моему, хоть раз возникал у каждого, кто видел в логах загадочное 1 января 1970 года: почему именно этот день. Выяснилось, что поначалу Unix собирался считать время с другого года и в других единицах, а тикали его часы от электрической розетки.

Вторая половина истории про будущее. Во вторник, 19 января 2038 года, в 06:14:07 по Москве закончится 32-битный счетчик секунд, и программы, которые на него полагаются, проснутся в пятнице, 13 декабря 1901 года. Я проверила это на C, на JavaScript и на ext4, где файл, датированный 2040 годом, у меня уехал в 1903-й, а заодно выяснила, что кое-где 2038 год наступил уже двадцать лет назад.

Читать далее

Особенности разработки встраиваемого программного обеспечения. Часть 1

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.9K

В этой статье пойдет речь о немаловажных особенностях разработки встраиваемого программного обеспечения (далее ВПО) для микроконтроллеров (далее МК) с низким уровнем абстракции аппаратного обеспечения.

Это не полноценный гайд по написанию кода ВПО, которых на просторах интернета сегодня тьма, а лишь нюансы, которые помогут писать хороший код.

Особенности этой огромной отрасли, embedded-разработки, лежат на поверхности и вытекают из ответа на вопрос: а какая вообще стоит задача? Если обобщить, то прозвучит это так: закодировать алгоритм работы, как правило, многозадачной однопоточной системы с низким уровнем абстракции аппаратного обеспечения.

Читать далее

ч2: Разбор. Как мы закрывали утечку через tun0 в AmneziaVPN

Уровень сложностиСложный
Время на прочтение26 мин
Охват и читатели22K

Приложение, которое вы исключили из VPN на Android, может привязать сокет к tun0, пройти через ваш туннель и узнать адрес сервера. Летом мы взялись закрыть это в AmneziaVPN (issue #2457). Сама проверка в AmneziaWG уместилась в одну строчку цикла, который читает пакеты из tun:

if uidfilter.Supported && !device.tun.uidGate.AllowOutboundPacket(elem.packet, device) { continue }

Вокруг неё набралось полтысячи строк Go и столько же тестов, мост через JNI и три раунда ревью. В статье — почему ядро пропускает такие пакеты, почему «владелец неизвестен» у нас значит отказ, как одно приложение могло остановить весь туннель и какую ошибку мы нашли уже после ревью в собственном мосту. На телефоне с фильтром до сервера доходит 0 попыток обхода из 6, без него все 6. Но улучшать ещё есть что, и разбор мы пишем для двух целей: чтобы другим клиентам было проще закрыть ту же дыру и чтобы собрать критику. Если увидите у нас слабое место, напишите.

Читать далее

Собираем полигон для пилота — или тестовая среда для РЕД АДМ в песочнице

Время на прочтение11 мин
Охват и читатели5.4K

Привет, Хабр! На связи Евгений, ведущий инженер отдела технического сопровождения РЕД АДМ. Особое место в сердце любого инженера занимает пилотирование, когда всё, что может пойти не по плану, «вылезает» в тестовой среде: ошибки, баги и мрачное наследие древних цивилизаций, успевших обосноваться в недрах домена.

Чтобы техноересь не попала в прод, мы отлавливаем её в тестовой среде. И сегодня я расскажу вам, как собрать песочницу для проведения ритуалов очищения пилотирования РЕД АДМ Промышленной редакции.

Читать далее

Platinum One OS на базе Samsung M52 звонки, смс, Vulkan, Misa

Время на прочтение11 мин
Охват и читатели9.5K

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

После перезагрузки экран может остаться чёрным. Модем обнаруживает SIM, но не регистрируется в сети. DSP сообщает, что запущен, а ALSA по-прежнему не видит звуковых карт. Трёхмерная модель ассистента отображается, но стоит в T-позе.

На Samsung M52 я прохожу именно этот этап разработки Platinum OS One: превращаю загружающуюся Linux-систему в устройство, которым можно пользоваться как смартфоном. На момент этой статьи на телефоне работают оболочка с Vulkan, сенсорный ввод, Wi-Fi и SSH. SMS, звонки и USSD я проверил на самом устройстве. Misa получила трёхмерный аватар и подключение к своему диалоговому серверу.

При этом аудиоподсистема, камеры и устойчивость графики ещё требуют работы. Ниже — устройство системы, несколько фрагментов реального кода и ошибки, которые оказались наиболее полезными для понимания платформы.

Ubuntu userspace и аппаратная платформа Samsung

Platinum OS One строится вокруг Ubuntu Base 26.04 LTS и собственных компонентов. Samsung M52 — одна из целевых платформ. Сборочная система должна оставаться общей для разных устройств, а аппаратные особенности приходят из конфигурации платы, ядра, Device Tree и firmware.

На M52 используется vendor-ядро Samsung на базе Linux 5.4. Здесь это практический выбор: значительная часть поддержки дисплея, модема, аудио и камер связана с downstream-драйверами Qualcomm и Samsung.

Читать далее

Ближайшие события

Я написал верификатор eBPF для микроконтроллера. А потом ядро Linux объяснило мне, где я неправ

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8.6K

Ученики подарили мне ESP32. В коробке было всё, что обычно: датчик температуры, реле, горсть светодиодов, круглый дисплей и провода, которых, как выяснится позже, всегда не хватает ровно на один.

Нормальный человек собирает из этого термостат за вечер. Я собрал термостат, посмотрел на него и подумал: а неприятно же будет каждый раз лезть с кабелем, если я захочу поменять порог с 22 на 23 градуса.

Дальше мысль поехала не туда, и в итоге на плате оказался интерпретатор eBPF со своим верификатором байткода. Логика управления теперь заливается по Wi-Fi обычной программой на C, скомпилированной clang -target bpf. А потом я взял десять маленьких программ и прогнал каждую через свой верификатор и через верификатор ядра Linux, чтобы посмотреть, кто из нас двоих что думает.

Сошлись шесть из десяти. Про оставшиеся четыре и написана статья — они оказались интереснее, чем сам проект.

Читать далее

Разработка Platinum OS на базе Samsung M52

Время на прочтение4 мин
Охват и читатели6.3K

Начал портировать свою операционную систему Platinum OS на Samsung Galaxy M52. В основе — Ubuntu 26.04 LTS, собственная графическая оболочка, службы и пакеты приложений. Разблокируемый загрузчик телефона позволяет запускать модифицированные загрузочные образы и экспериментировать с Linux на настоящем устройстве.

Читать далее

Свежий OpenWrt на Xiaomi BE7000 без UART, или как три бага в драйвере Ethernet притворялись мёртвой платой

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели9.3K

У меня есть Xiaomi BE7000, и железо там вполне приличное (IPQ9554, коммутатор QCA8084 на четыре порта 2.5G, QCN9274 на 5 ГГц, гигабайт памяти и 128 МБ NAND), а вот стоковая прошивка мне быстро стала тесной. Хотелось поставить нормальный OpenWrt из main с ядром 6.18, причём не через kexec поверх стока, а чтобы он грузился прямо с флеша.

Порт под этот роутер уже делает kravasuper в своей ветке xiaomi_be7000, так что я собрал его как есть и прошил, после чего получил быстро мигающий белый диод и полное отсутствие сети, Wi-Fi и SSH, а через четыре включения питания загрузчик сам вернул сток. В обсуждении порта на такое жалуются и другие владельцы, и обычно всё списывают на ревизию платы.

UART на плате есть, но он на 1.8 В, адаптера под такой уровень у меня не было, а обычный на 3.3 В цеплять не хотелось, так что искать причину пришлось вслепую, и как я это делал, как раз и есть большая часть текста.

Читать далее

Ускорение Python-сервиса с CinderX: JIT и статическая типизация

Уровень сложностиСложный
Время на прочтение29 мин
Охват и читатели6.8K

У любого ускорителя Python есть число: во сколько раз он быстрее. Меряют его на ядрах - сортировка, обход дерева, арифметика в цикле. Сервис устроен не так: обработчик ходит в базу, считает в numpy, сериализует ответ, и байткода, к которому это число применимо, в нём может почти не остаться. CinderX ускоряет байткод, и за пределы байткода это число не распространяется. Доля байткода в вашем сервисе - свойство вашего кода, а не расширения, и пока она не посчитана, «ставить или нет» решается угадыванием.

Читать далее

Статьи по Go, которые стоит почитать

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели6.5K

Если посмотреть на самые обсуждаемые публикации Go‑сообщества последних месяцев, можно заметить любопытную закономерность. Среди них почти нет материалов про новые конструкции языка, generics или очередные изменения синтаксиса.

Зато много статей про диагностику утечек горутин, профилирование памяти, внутреннее устройство рантайма, особенности современных процессоров и эксплуатацию высоконагруженных PostgreSQL‑кластеров.

В 2026 году экосистема Go значительно «повзрослела». Сама спецификация языка уже стабилизировалась, и фокус инженерного внимания сместился в сторону эксплуатации (Production Engineering) — предсказуемости памяти, автоматической диагностики рантайма, управлению ресурсами железа и устойчивости баз данных под высокой нагрузкой.

На связи команда Golang‑инженеров Авито, а ниже — несколько публикаций, которые хорошо показывают этот сдвиг.

Читать далее

Связь времён: Кронос в WASM

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.4K

А помните, был такой проект "Кронос" на закате "союза", на заре "перестройки"? Профессиональная 32-битная графическая рабочая станция на собственном железе и собственной ОС и собственной инженерной школой. Вроде был Кронос, а вроде и не был его, сколько с тех пор воды утекло.

[вспомнить всё]

А точно ли вы знаете, чем занят ваш агент в песочнице?

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.5K

Агент отработал полчаса и остановился. У вас спрашивают, что он делал.

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

Вопрос, на который нет ответа ни в одном из двух окон: откуда вообще берётся знание о том, что агент делал. Не что он про себя написал, а что он сделал.

Читать далее
1
23 ...