Как стать автором
Обновить
52.03
Рейтинг

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

Низкоуровневое программирование

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

Rust 1.59.0: встроенный ассемблер, деструктурирующее присваивание, отключение инкрементальной компиляции

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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

Читать далее
Всего голосов 41: ↑34 и ↓7 +27
Просмотры 7.9K
Комментарии 9

Новости

Карты, фаззинг, OSM: ищем поверхность атаки для сложного приложения

Информационная безопасность *Тестирование IT-систем *Системное программирование *OpenStreetMap *Реверс-инжиниринг *
Tutorial

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

Но с фаззингом есть одна неприятность - непонятно, как тестировать любую достаточно сложную систему. Мы бы хотели генерировать много тестов и быстро прогонять их, а в итоге приходится каждый раз откатывать состояние окружения, потому что программа пишет что-то в БД. Или входные данные настолько сложны, что их так просто не нагенерируешь.

Поэтому попробуем разобраться, как программу можно делить на части. А также определять, какие части нам нужны, а какие не очень.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 1K
Комментарии 3

Отличия DeploymentConfig от Deployment и примеры использования

Блог компании Иннотех Системное программирование *Серверное администрирование *DevOps *Openshift *

Deployment и DeploymentConfig — это, казалось бы, похожие объекты API для OpenShift Container Platform. Но на самом деле они предлагают разные гибкие методы управления интерфейсом пользователей. Расскажем о различиях и приведём примеры, когда какие объекты лучше использовать.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 2.7K
Комментарии 12

Опыт аудита и отчетности событий информационной безопасности в СУЭК — анонс вебинара

Блог компании Gals Software Информационная безопасность *Системное администрирование *Системное программирование *IT-инфраструктура *
Приглашаем вас на вебинар, на котором Михаил Божнев, менеджер департамента информационной безопасности СУЭК, расскажет об опыте внедрения в компании решений Quest для аудита и отчетности по событиям информационной безопасности. Речь пойдет о двух продуктах от Quest: Change Auditor и Enterprise Reporter. Вы узнаете о решаемых задачах по информационной безопасности в крупной промышленной компании и результатах, которых удалось достичь после внедрения обоих продуктов.



Вебинар состоится 25 февраля в 12:00 по московскому времени. Регистрация.

Под катом подробнее об обоих решениях от Quest и ссылки на прошедшие вебинары.
Читать дальше →
Всего голосов 2: ↑0 и ↓2 -2
Просмотры 526
Комментарии 0

Как не выстрелить себе в ногу, обрабатывая ошибки в голанге

Блог компании FirstVDS Программирование *Системное программирование *Компиляторы *Go *


А пока мы все сидим и ждём выхода Go 2 с его новой схемой обработки ошибок, программы писать надо прямо сейчас. Так что от обработки ошибок никуда не деться.

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

Итак, поехали.
Читать дальше →
Всего голосов 23: ↑19 и ↓4 +15
Просмотры 4.6K
Комментарии 18

Как кушать вилкой

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

...или о fork() в двух словах.

Как люди решают задачи

Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.

¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"

Однако самый простой - не всегда самый правильный. Да, можно скопировать самый заплюсованный ответ и сказать, что миллионы не могут ошибаться, но ведь миллионы людей делают прививки и миллионы людей не делают прививки и одна из групп, исходя из простейшей логики, совершила ошибку.

Однако мы отвлеклись. Поставим перед собой задачу:

Нам необходимо наиболее правильным способом запустить из своего кода другую программу.

Не так важно, зачем. Это может быть запуск игры из лаунчера, запуск утилиты ping чтобы не реализовывать отправку ICMP-пакетов самостоятельно, запуск программы по клику на ярлык, миллион вариантов, думаю, что вы сами хотя бы раз в жизни сталкивались с такой задачей.

Содержание статьи

* Как кушать пингвина вилкой?
Общие знания о запуске процессов под LINUX-системами
*
Как кушать корову если есть вилка?
Copy-on-write, что это и зачем? vfork и почему он не лучше
*
Как кушать икру?
posix_spawn и почему он не замещает fork()
*
Как кушают клоны?
clone() под капотом у fork()
*
Почему когда ешь суп вилкой он утекает?
Утечка дескрипторов после fork() и как этого избежать
*
Почему у вилки три зуба?
Важность обработки всех вариантов возврата fork()
*
Как кушать демонов вилкой?
Запуск демонизирующихся процессов при помощи fork()
*
Как наложить вилкой в другую тарелку?
Переназначение дескрипторов вывода для нового процесса
*
Как сигналить вилке?
Взаимоотношения обработки сигналов и fork()
*
Как пользоваться вилкой когда сломалась ручка?
Самоликвидация дочернего процесса после завершения материнского
*
Как подготовиться к использованию вилки?
Сценарии использования pthread_atfork()
*
Как поцарапать окно вилкой?
Запуск дочернего процесса под Windows-системой
*
Как систематически пользоваться вилкой?
Почему вам не стоит пользоваться system()
*
Заключение
Благодарности и выводы

Читать далее
Всего голосов 74: ↑74 и ↓0 +74
Просмотры 11K
Комментарии 24

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

Сегодня мы будем анализировать бинарники на пару с CPU профилями, чтобы создать на их основе расширенные профили исполнения. Эти дополненные профили мы сможем использовать для оценки времени, которое программа тратит на проверки выхода за границу массивов и слайсов.


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3K
Комментарии 0

Собираем компилятор для ПЛИС Lattice ECP5 в лице Yosys и NextPNR для работы в ОС Windows

Системное программирование *FPGA *Компьютерное железо

Наш цикл про ПЛИС Lattice ECP5 растянулся уже на шесть статей. Мы уже научились не только создавать простые проекты для них, но набили руку в разработке сложных систем на базе кроссплатформенной открытой среды LiteX. В целом, я уже набрал материалов, чтобы выдать инструкцию, как подключится к шине Wishbone в роли активного устройства (Master), но перед публикацией хочется провести ряд проверок, чтобы не наболтать не того.

С другой стороны, ещё в первой статье цикла я обещал, как будет формализована методика сборки синтезатора Yosys и разводчика NextPNR под Windows, рассказать, как это сделать, так как на тот момент у меня процесс сборки прошёл в режиме «неделю промучился, как-то сделал, повторить не смогу». Мой коллега систематизировал все те наброски, и теперь я могу поделиться итогами с общественностью. Так что, кто дружит с Linux, сегодня вряд ли узнает что-то интересное, а вот любители Windows – получат сведения, как начать работать с ПЛИС Lattice в этой ОС. Приступаем.

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 1.1K
Комментарии 9

FastTrack: Управление вводом/выводом с учетом FG приложений для улучшения пользовательского опыта смартфонов Android

Системное программирование *Разработка под Android *Разработка под Linux *Аналитика мобильных приложений *Смартфоны

Я разобрала статью:

Hahn, S. S., Lee, S., Yee, I., Ryu, D., & Kim, J. (2018). FastTrack: Foreground App-Aware I/O Management for Improving User Experience of Android Smartphones. In 2018 Annual Technical Conference (USENIX 18) (pp. 15-28).

И хочу поделиться основными идеями по улучшению пользовательского опыта при взаимодействии со смартфонами Android.

Пользователям смартфонов важно, чтобы их устройства без задержек реагировали на действия пользователя. Инверсии приоритетов ввода-вывода в разделах кэша страниц (page cache) и хранилище (storage device) являются причинами увеличения времени отклика приложений переднего плана (FG, Foreground). Цель статьи - исследовать проблему инверсии приоритетов ввода-вывода на смартфонах Android, ее влияние на работу пользователя. Авторы статьи предлагают инструмент управления вводом-выводом FastTrack. Он вытесняет текущую фоновую активность на всех уровнях. 

По результатам тестирования инструмент ограничивает увеличение времени отклика на 27%, в дефолтной реализации Android еще на 2,319%. Когда шесть фоновых приложений (BG, Background) работают вместе, FastTrack может сократить время отклика приложения FG на 94% по сравнению с Android. Авторы изменили реализацию кэша страниц, планировщик ввода-вывода внутри хранилища. FastTrack улучшает взаимодействие пользователя со смартфонами, предотвращая инверсию приоритетов ввода-вывода.

Читать далее
Рейтинг 0
Просмотры 313
Комментарии 1

Указания по проектированию D-Bus API

Системное программирование *Разработка под Linux *
Перевод
Tutorial

Продолжаем тему D-Bus на Хабре. D-Bus — система межпроцессного взаимодействия (IPC), которая позволяет приложениям в операционной системе сообщаться друг с другом. При этом приложения могут находиться на разных компьютерах.

Данная публикация является логическим продолжением переводов вводной статьи и cпецификации D-Bus. Она имеет уже практическую направленность, поскольку в ней рассказывается о том, как грамотно проектировать D-Bus интерфейсы. Будет показано как избежать промахов, которые обычно происходят, когда вы создаете свой первый, второй, третий D-Bus интерфейс.

Читать далее
Рейтинг 0
Просмотры 945
Комментарии 0

Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux

Системное программирование *Nginx *Серверное администрирование *C *Разработка под Linux *

Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.

В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом. 

Насколько я понимаю, эта проблема существует уже более пяти лет и берет начало в версии 1.11.3 (Jul 2016), когда в Nginx по умолчанию отключили accept_mutex, а вместо него стали полагаться на флаг EPOLLEXCLUSIVE, появившийся в ядре Linux 4.5.

Стоит заметить, что проблема балансировки входящих соединений при использовании механизма epoll и флага EPOLLEXCLUSIVE более глобальна и касается не только Nginx, а любых сетевых приложений, работающих по аналогичной схеме.

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

Читать далее
Всего голосов 31: ↑29 и ↓2 +27
Просмотры 3.7K
Комментарии 24

Подключаем Slave-устройства с шиной Wishbone к системе на базе LiteX

Системное программирование *FPGA *Компьютерное железо

В предыдущих трёх статьях мы построили ПЛИС систему на базе LiteX, рабочие блоки для которой могут быть написаны не на странном языке, базирующимся на Питоне, а на чистом Верилоге. А благодаря LiteX, база для системы была создана для нас автоматически. Такой подход позволяет резко упростить и ускорить процесс разработки систем.

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

Сегодня мы подключим пару собственных Slave-устройств к системной шине Wishbone, которая будет создана средой LiteX. Устройства, разумеется, будут описаны на Верилоге. Приступаем!

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 779
Комментарии 8

Роботизированная операционная модель Blue Prism: поговорим о практике внедрения RPA

Блог компании Gals Software Системное администрирование *Системное программирование *Софт Искусственный интеллект


Blue Prism — известное и зарекомендовавшее себя решение (в том числе и на российском рынке) для автоматизации бизнеса. В этой статье мы не будем говорить о преимуществах использования RPA-платформ для оптимизации операционных расходов бизнеса. И без того понятно, что выполнение процесса без обеденных перерывов, перекуров и больничных будет эффективнее и в перспективе снизит операционные расходы. Вместо этого расскажем про роботизированную операционную модель (ROM) — это практика внедрения Blue Prism, направленная на получение бизнесом максимальной выгоды за счет развертывания системы роботизации. Blue Prism обладает полностью готовой методологией внедрения роботизации процессов и при внедрении решения в вашей организации вы сможете воспользоваться всем накопленным массивом знаний. Это поможет снизить неопределенность в проекте и позволит быстрее получить результат.

Технологии — хорошо, но умение ими пользоваться ещё лучше. ROM про максимально эффективное использование технологий роботизации. Это опыт множества внедрений для снижения time-to-market и получения результатов в течении нескольких недель.

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

Далее вы узнаете о лайфхаках на старте роботизации и о 7 основах роботизированной операционной модели для эффективного внедрения той самой роботизации. Все подробности под катом.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 909
Комментарии 2

Rust 1.58.0: захватываемые идентификаторы, пути поиска в Windows, больше #[must_use] в стандартной библиотеке

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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


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


rustup update stable

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


Что стабилизировано в 1.58.0


В Rust 1.58 появились захваченные идентификаторы в форматируемых строках, изменился путь поиска в Windows для Command, в стандартной библиотеке стало больше аннотаций #[must_use], а также были стабилизированы некоторые функции.

Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 4.7K
Комментарии 42

Наводим красоту в коде для ПЛИС Lattice, построенном на базе пакета LiteX

Системное программирование *FPGA *Компьютерное железо
В прошлых двух статьях мы сделали и испытали проект, в основе которого лежит система на базе LiteX, а наши модули были написаны на языке Verilog. На протяжении всего повествования я неустанно повторял: «У нас очень много нового материала, не будем отвлекаться на рюшечки, потом разберёмся». Как правило, нет ничего более постоянного, чем временное, но раз тема оказалась интересная, то в этот раз давайте мы наведём красоту в нашем проекте.



Сегодня мы поменяем принцип описания ножек, чтобы не пришлось прыгать по трём справочникам сразу, разместим несколько полей в одном регистре CSR, добавим автодокументирование к регистрам CSR (Command-Status Register) и, наконец, добавим к этим регистрам статус, а то до сих пор мы пробовали играть только в командные регистры. Приступаем.
Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Просмотры 1.3K
Комментарии 1

Гудбай AV/EDR или как обойти защиту EDR в Windows

Блог компании Ростелеком Информационная безопасность *Системное программирование *

При проведении Red Team операций часто возникает вопрос обхода средств защиты. В данной статье будет рассмотрен один из методов отключения антивирусов и EDR.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 6.1K
Комментарии 1

XV6 как ОС для обучения

Open source *Assembler *Системное программирование *C *История IT

Мы уже несколько лет преподаем разработку компонентов учебной операционной системы xv6, и хотим поделиться своим опытом. Этот курс прошли уже около 600 студентов. Если вас заинтересует эта статья, то вы можете ознакомиться с нашим курсом.

После базовых курсов вроде операционных систем часто студенты выходят без реальных практических знаний. Лучше всего можно понять работу операционной системы, написав её самому. Но так как этот процесс может занять не один семестр, в рамках учебного курса можно ограничиться разработкой только ключевых компонентов. Для этого мы используем учебную операционную систему xv6, про которую расскажем ниже, так как она значительно проще Linux или других пользовательских ОС.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 2.6K
Комментарии 14

Первые эксперименты со смешанным Litex+Verilog проектом для ПЛИС

Системное программирование *FPGA *Программирование микроконтроллеров *Компьютерное железо

В предыдущей статье мы начали осваивать построение шинно-ориентированных систем на базе среды Litex (которая всё делает на Питоне) с внедрением собственных модулей на Верилоге. Статья так разрослась, что практические опыты мы оставили на потом. Пришла пора провести их. Сегодня мы подключимся к VGA-монитору и поуправляем изображением, которое выдаёт модуль gpu, описанный в файле gpu.v, то есть, реализованный на языке Verilog. Управлять мы им будем через регистр команд, расположенный в блоке CSR, спроецированном на шину Wishbone. Все эти сущности, в свою очередь относятся к среде Litex. Инструменты для опытов мы тоже будем использовать штатные, Litex-овские. Приступаем!

Читать далее
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 1.5K
Комментарии 2

Создаём простейший проект для ПЛИС Lattice в среде Litex

Системное программирование *FPGA *Программирование микроконтроллеров *Компьютерное железо

В предыдущей паре статей я рассуждал про ПЛИС Lattice. Давайте сегодня поговорим об эффективной разработке под них. Один наш крупный руководитель уверяет, что из разговоров с иностранными Заказчиками, он выяснил, что российских разработчиков считают пишущими классные вещи, но делающими это крайне медленно. Ну, разумеется, по сравнению с разработчиками из других стран. И разумеется, «классные» идёт на первом месте.

Один из методов обхода проблемы скорости разработки – использование готовой инфраструктуры для проектов. Я делал цикл статей про комплекс Redd, где продвигал использование готовой шинной инфраструктуры в среде разработки Quartus. Сначала это была честная процессорная система, потом – процессор мы изъяли, а шины – оставили.

Затем я делал пару циклов, где активно использовал данный подход. Мне приходилось дописывать только проблемно-ориентированные модули, остальное — среда разработки создавала за меня.

Есть ли что-то подобное для Lattice в частности и сцепки Yosys/NextPNR в целом? Вы не поверите! Решение не просто есть, но оно ещё и настолько кроссплатформенное, что подойдёт и для Yosys/NextPNR, и для Quartus, и для Vivado! И называется оно Litex. Итак, давайте попробуем поэкспериментировать с ним для подхода, который я уже давно продвигаю: «делаем штатную основу, а на неё нанизываем свои целевые блоки».

Читать далее
Всего голосов 16: ↑12 и ↓4 +8
Просмотры 2.6K
Комментарии 1

Почему проект EasyOS отказался от загрузочных образов ISO

Системное программирование *Хранение данных *Софт Накопители
Перевод

Какое-то время назад я перестал выпускать EasyOS в виде файла ISO, и с тех пор выпускаю её только как файл образа диска. Решение оказалось спорным, и я продолжаю получать письма от людей, страдающих из-за отказа от этого формата. Поэтому мне стоит опубликовать свои мысли о том, почему я сделал такой выбор. Пост не будет исчерпывающим объяснением, это просто мысли, которые приходят мне в голову…

Формат файлов ISO9660 очень стар, он появился ещё в 1988 году, и с тех пор был расширен множеством дополнений (см. страницу ISO9660 в Википедии).

Кроме того, существует «гибридный ISO», обеспечивающий загрузку с USB-флэшки, а поверх него дополнения, позволяющие загружаться на компьютерах и со старым BIOS, и с более новым UEFI (см. здесь).

Всё это значит, что файлы ISO — это мешанина изменений, появлявшихся на протяжении многих лет.
Читать дальше →
Всего голосов 4: ↑2 и ↓2 0
Просмотры 7.5K
Комментарии 13

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