Обновить
41.02

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

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

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

restrict в C: оптимизация на честном слове

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

Привет, Хабр!

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

Читать далее

Новости

CIMCO Edit для Windows 7

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

Windows 10 нинужон!

Запускаем 3D симуляцию самого популярного в мире редактора УП для станков с ЧПУ CIMCO Edit 2025 (2025.01.25) в операционной системе Microsoft Windows 7. И ещё переводим на русский язык саму программу.

Читать далее всё это безобразие...

История поиска бага в ядре Linux длиной в год, или нежданные нули из XFS'а

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

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

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

В этой статье описано наше исследование длиною в год,  из которого вы узнаете, почему PostgreSQL(и любое другое приложение) может падать из-за бага в ядре Linux, причём тут XFS и почему очистка памяти может быть не так полезна, как вы о ней думали.

Читать далее

Надежное программирование — часть 6. Неудачники, выросшие и перспективные языки

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

Неудачники, эволюционировавшие и перспективные языки программирования в разрезе надежности и безопасности.

Читать далее

Минимальный планировщик с eBPF, sched_ext и C

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

Планировщик Linux долгое время оставался зоной, куда можно было заглянуть, но почти невозможно вмешаться без пересборки ядра. С появлением sched_ext эта граница сдвинулась: теперь логику планирования можно описывать кодом на C и загружать в ядро через eBPF. В статье разберём минимальный рабочий планировщик, посмотрим, как он взаимодействует с ядром, и обсудим, какие новые возможности это открывает для экспериментов и диагностики поведения системы под нагрузкой.

Вникнуть в ядро

Создание легкого shell на си

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

Многие начинающие разработчики которые начинаю писать на языке C сталкиваются с проблемой : Какой 1 пет-проект написать на C ? И вопрос то логичный ведь проекты на C никогда не славились легкостью по сравнению с проектами на python или JavaScript . И как по мне отличная идей написать shell ведь там не надо знать ассемблер или иметь глубокие знание в работе OC , и он относительно легок в понимании .

В этой статье мы с вами подробно разберем написание shell на языке C , как он устроен ,в чем отличия bash shell и cmd. И напишем свой shell на 450 строк кода

Начнем пожалуй с самыx базовых вопросах .

Читать далее

Идемпотентность в скриптах

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

Привет, Хабр! Как часто Ваш скрипт падает при повторном запуске? Или, может, портит конфиги, создавая дубли? Я с этим сталкивался не раз, особенно в начале своего пути автоматизации.

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

Читать далее

GD32 Unleashed: тотальная эмуляция в QEMU

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

Зачем эмулировать то, что можно купить за копейки? Тратить месяцы на создание виртуальной модели микроконтроллера, если реальная отладочная плата на базе GD32F303 стоит как пара чашек кофе? Ответ прост: хороший физический стенд — это не просто плата. Это проектирование, сборка, место в стойке, электропитание, обжиг кабелей и поддержка в рабочем состоянии. А самое главное — его часто нельзя раздать каждому разработчику. Но что, если можно запустить ту же прошивку, что и на реальном железе, в эмуляторе?

В этой статье я представляю результат работы нашей команды из отдела разработки встраиваемого ПО в YADRO. Наиболее полную на сегодняшний день модель SoC GD32F30X в QEMU и набор интерфейсов, которые делают взаимодействие с эмулируемой периферией «прозрачным» для хостовой системы.

Читать далее

Rust 1.92.0: проверка типа never, unused_must_use, генерация таблицы раскрутки стека на Linux, Валидация #[macro_export]

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

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

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

$ rustup update stable

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

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

Читать далее

Элегантный OSDev: Пишем ядро ОС на modern C++ без макросов. Часть 3: Аппаратный HAL и Прерывания

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


Это третья статья из цикла по разработке ОС на С++. В данной статье я познакомлю читателя, с прерываниями x86 реализуем ее поддержку. Добавим работу с клавиатурой. Познакомимся с такими устройствами как PIC и напишем код для работы и инициализации. Я так же буду делать упор, на абстракцию и высокоуровневый код.

Заходите будет интересно.

Читать далее

Циолковский, Ньютон и Эйлер в расчете полета ракеты методом структурного моделирования для самых маленьких

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

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

Там очень подробно описано как, зная скорость объекта, можно рассчитать траектории движения различных объектов в пространстве.

 https://habr.com/ru/articles/878168/

В этот раз мы займемся исследованием траектории движения космических ракет.  Сравним формулу Циолковского с законом Ньютона и рассчитаем отправку груза на орбиту земли одноступенчатой ракетой, и двухступенчатой. И все это – в рамках курсов школьной физики и математики с помощью структурного моделирования.

Читать далее

Эволюция подходов к написанию корутин от Си до С++20. Часть 3. Использование сопрограмм при обработке событий в Linux

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

В предыдущей статье я рассматривал различные способы организации стековых корутин в языке Си. Эти сопрограммы имели чисто учебное значение так как вряд ли кто-то будет создавать генераторы последовательностей при помощи сопрограмм. Сегодня рассмотрим как писать стектовые корутины на С++ и создадим на их основе tcp сервер, обрабатывающий запросы от клиентов на основе опроса событий с использованием API мультиплексированного ввода-вывода epoll. Данная тема, на мой взгляд, является ключевой для понимания того, как функционируют современные серверные приложения, написанные при помощи таких библиотек как Boost Asio.

Читать далее

Элегантный OSDev: Пишем ядро ОС на modern C++ без макросов. Часть 2 — PMM + Allocator

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

В текущей статье, реализуем поддержку памяти и аллокатора в ядре, а так же перегрузим new и delete используя новый механизм памяти. На последок напишем контейнер OS::String для работы со строками, интерфейс API будет совпадать с интерфейсом std::string. Что бы в будущем просто сделать using на std контейнеры. Когда получится их завести. Цель создать фундамент для использования C++ идиом (включая умные указатели и STL‑подобные контейнеры) в «голом» окружении ядра без стандартных библиотечных аллокаторов. Решение позволяет тестировать код на хост‑системе (Windows/Linux) и затем без изменений запускать на целевой платформе (QEMU).

Читать далее

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

Мониторинг в Linux на уровне ядра. Краткое практическое введение в eBPF+Cilium

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

Добрый день, всем читающим данную статью. Недавно эксперементируя с eBPF для разработки нового функционала своей EDR для linux-серверов, я столкнулся с огромной проблемой: на просторах интернета есть огромный пласт статей по теории работы с eBPF, однако кратких практических статей как работать с BPF мной найдено не было.

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

Читать далее

Как написать хороший CLAUDE.md, чтобы не было мучительно больно

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

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

Со временем стало очевидно: проблема не в модели, а в том, как мы ее онбордим в проект. Один и тот же Claude в одном репозитории ведет себя как сильный мидл, а в другом как растерянный стажер. Разница почти всегда в том, что написано (или не написано) в CLAUDE.md и его аналогах для агентов.

Я перепробовал кучу подходов: от огромных "библий" с правилами до минималистичных заметок и автогенерации. Что-то работало, что-то категорически нет. В итоге вырисовались простые, но хорошо проверенные на практике принципы того, каким должен быть CLAUDE.md, чтобы не было мучительно больно ни вам, ни агенту.

Читать далее

Элегантный OSDev: Пишем ядро ОС на modern C++ без макросов. Часть 1 — HAL всему голова

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

В теории я бы хотел сделать ОС на современном C++ — с умными указателями, лямбдами и прочими красивостями. А на практике пока что научился выводить текст прямо в видеопамять. Но это же и есть самый честный low-level — когда ты по-настоящему чувствуешь, как железо оживает от твоего кода.

Читать далее

Что происходит, когда запускается код?

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

Когда программист пишет код, он редко задумывается о том, что происходит с программой после того, как он её написал. Но понимание этого процесса необходимо для эффективной отладки, оптимизации и написания надёжного кода. А ещё, это просто интересно.

Читать далее

Как системщику остаться в живых: харденинг, который не убьет ваш перфоманс

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

Здравствуйте, меня зовут Анна Мелехова. Я старший архитектор в отделе развития архитектуры KasperskyOS. В статье я хочу поделиться практическим опытом системной разработки, которой я занималась сначала в проекте по виртуализации, а теперь в «Лаборатории Касперского», где мы делаем микроядерную операционную систему с повышенными требованиями к безопасности – KasperskyOS. Когда вы работаете в такой среде, быстро понимаете: харденинг – это не красивые галочки в чек-листе, а набор очень конкретных, очень практических решений, которые должны и защищать, и минимально снижать производительность. О них я и расскажу, а в конце дам личный топ самых полезных харденингов, которые бустят security и не снижают performance.

Читать далее

Как мы пихнули полноценный цифровой протокол в NTC-пин батареи — и почему это вообще работает

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

Есть старая инженерная мудрость:

Если у вас не хватает проводов — значит, вы недостаточно творчески подходите к вопросу.

У нас была ровно такая ситуация.

Работая на одном проекте системы «умного города» мы, уйдя в стандарт «одна плата с разными конфигами для всего» решили делать на ней свой BMS. Зачем да почему? Нужно было универсальное решение, которое должно работать и с литиевыми, и со свинцовыми батареями, и с ещё парой экзотических химий, встречающихся в природе примерно так же часто, как радужные единороги. Нужно было надёжно определять тип батареи, считывать её состояние, пригодность к использованию, дату производства и всё‑всё‑всё подобное, блокировать несовместимые варианты и вообще предотвращать самое главное — человеческую ошибку. Но как это часто бывает в компаниях где в R&D священный хаос — никто и не задумывался чтобы сесть и обсудить «А как мы вообще это делать будем». В производство ушла тысяча плат.

В любой другой ситуации мы бы пошли по наименьшему пути сопротивления: i2c на коннекторе рядом и EEPROM на аккуме. Но не тут было.

Читать далее

Retro68: если вам скучно жить на свете

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

Конец ноября в Питере — крайне мрачное время года, на улице лишь холод, сырость и уныние. Что определенно влияет на психику местных жителей, порождая в головах самые нездоровые желания.

Видимо по этой причине, одним мрачным осенним днем мне захотелось создать графическое приложение на современном C++ под.. классический Mac из 90х.

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

Вклад авторов