Обновить
64K+

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

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

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

Виртуальный COM-порт на STM32 или как управлять контроллером через USB не привлекая внимания санитаров

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

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

как же оно всё-таки работает

Во что вам обойдется конкурентная обработка. Иерархия проблем

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

Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организовать конкурентность так, чтобы она работала и правильно, и быстро. Все, что вы знаете об оптимизации однопоточного кода, зачастую вам не поможет. На микроуровне (отдельные инструкции) просто невозможно применить обычные правила, актуальные для μ-операций, цепочек зависимостей, пределов пропускной способности и т.д. При конкурентности правила другие.

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

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

Часто ловлю себя на мысли, что рассуждаю именно в таких категориях, когда мне нужна высокопроизводительная конкурентность: каков наилучший уровень, который я реально могу достичь при решении конкретной задачи? Держать в уме эти уровни полезно и на этапе первичного проектирования (иногда небольшое изменение требований или высокоуровневого дизайна позволяют вам выйти на более выгодный уровень), а также при оценке уже существующих систем (для еще более точного понимания имеющейся производительности и выстраивания пути наименьшего сопротивления, ведущего к улучшениям).

Читать далее

Детальный анализ вредоносного ПО, замаскированного под NOTEPAD++

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

Lazarus привлекала своих жертв при помощи документов о вакансиях в таких компаниях, как LockHeed Martin, BAE Systems и Boeing. В данном конкретном случае злоумышленники привлекали жертв, ищущих работу в Boeing, при помощи документа Boeing BDS MSE.docx ( твит ShadowChasing1). Вредоносное ПО извлекает имя хоста, имя пользователя, информацию о сети, список процессов и другую информацию, которая затем должна была передаваться на один из четырёх серверов C2. Предназначенные для передачи данные сжимались, шифровались XOR, кодировались Base64 и отправлялись на сервер C2. Троян реализует четыре действия, в том числе скачивает и исполняет файл .exe или .dll, загружает PE (Portable Executable) в память процессов и исполняет шелл-код.
Читать дальше →

multiboot usb-drive. своими руками

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

Давненько пользуюсь мультизагрузочным внешним жестким диском, набитым различными дистрибутивами Linux. В свете последних событий и очередной волны импортозамещения понадобилось дополнить его и «отечественными» дистрибутивами. Решил сделать для себя небольшое HOWTO, заодно поделиться с сообществом.

Кому стало неинтересно — расходимся. Никаких сакральных знаний тут не будет.

Читать далее

Обновление производительности BonsaiDb: глубокое погружение в синхронизацию файлов

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

BonsaiDb – это новая база данных, которая должна стать самой удобной для разработчиков базы данных Rust. У BonsaiDb есть уникальный набор функций, предназначенных для решения большого количества распространенных проблем с данными. По ссылке можно узнать подробнее, что такое BonsaiDb?

tl; dr: BonsaiDb работает медленнее, чем сообщалось ранее 

Я настроил виртуальную машину сервера Ubuntu 20.04 под управлением ядра 5.4.0-110-generic и размышлял, как лучше отключить компьютер после вызова sync_file_range, когда @justinj снова пришел на помощь, указав, что существует /proc/sysrq-trigger. Он также поделился своим постом в блоге, где рассказывал о проведении аналогичных тестов против fsync. С их помощью он хотел изучить, как создавать надежный журнал базы данных. На следующий день после последнего поста @justinj сообщил, что они отследили один из примеров Nebari и не увидели ни одного выполненного системного вызова fsync. Это произошло из-за неправильного трактования термина "true sink" в std::io::Write. Оказалось, выполнение Write::flush() для std::io::File – это не операция, так как "true sink" было ядром, а не диском.

Я выпустил Nebari v0.5.3 в тот же день. Я запустил набор тестов Nebari и... ничего не изменилось. Я запустил пакет на GitHub Actions – никаких изменений. Я запустил пакет на своем выделенном VPS, который использую для более стабильной среды бенчмаркинга, чем GitHub Actions... никаких изменений. Я запустил пакет на своем Mac ... ужасное замедление. Я расскажу ниже, почему так произошло, но первоначальное впечатление было, что я каким-то образом увернулся от пули.

Читать далее

16-битная ОС на fasm + Cи. Часть 1

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

Данная статья в большей степени является не руководством и не мануалом, а просто моими заметками. Идея этой статьи собрать множество особенностей и знаний в одно целое, надеюсь, она кому-то пригодится =)

Читать далее

Rust 1.61.0: пользовательские коды возврата в main, расширение возможностей const fn и изменение IO-блокировок

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

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


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


rustup update stable

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


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

Читать дальше →

Динамический анализ инструкций с помощью Intel Pin

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

Исследование и изменение исполняемого кода в процессе работы программы – что может быть интересней? Intel Pin – фреймворк для динамической бинарной инструментации (Dynamic Binary Instrumentation, DBI) исполняемого кода. Этот фреймворк обладает широкими возможностями по анализу и модификации кода. Мне было очень интересно посмотреть вживую на доступные в нем функции по анализу отдельных инструкций. И наконец подвернулась такая возможность.

В статье будет рассмотрено получение адреса перехода для инструкции jmp, перехват вызова функции, находящейся за таблицей инкрементальной линковки (Incremental Linking Table, ILT) – и все это средствами Pin.

Читать далее

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

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

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

Я уже многократно писал,  что рассматриваю LiteX как некий аналог подсистемы Qsys из среды разработки Quartus. То есть, как удобное средство составить шинно-ориентированную систему из множества готовых ядер. Но если Qsys – он только для Альтер, то LiteX – он подходит и для Altera (Intel), и для Xilinx, и для Lattice. А сейчас я по работе плотно вожусь именно с Латтисами. У Латтисов самое узкое место – это параметр FMax. И вот построение базовых систем на базе шины Wishbone у Litex получается очень красиво. Там FMax выходит достаточно высоким. Даже у Латтисов он превышает 100 МГц.

В предыдущих статьях мы уже научились добавлять в систему устройства, доступные по шине через регистры команд-состояний (CSR), а также пассивные (Slave) устройства с шиной Wishbone. Сегодня мы добавим на шину активное (Master) устройство. Поехали!

Читать далее

Embox — открытая ОС на Эльбрусе

Время на прочтение3 мин
Охват и читатели18K
Всем привет.

Конечно, многие знают о том, какие Эльбрусы закрытые. Это является, наверное, самой главной претензией, предъявляемой к данным процессорам. Эти претензии небезосновательны, в МЦСТ их признают. Но, как говорится, нельзя “просто так взять и открыть исходники для Эльбруса”, ведь большинство работ велось для определенного заказчика и их разглашение — нарушение договора. С другой стороны, МЦСТ понимают проблему закрытости и стараются изменить ситуацию. Мы в проекте Embox тоже пытаемся этому способствовать по мере сил. О наших успехах в данном направлении вы можете узнать из этой статьи.
Читать дальше →

Погружение в систему — вот на что уходит основное время разработчика

Время на прочтение4 мин
Охват и читатели9.4K
Об авторе. Тудор Гриба — разработчик свободного редактора кода Glamorous Toolkit. Это программируемая MDE с движком визуализации и встроенной системой управления знаниями. В своей программной статье автор объясняет, с какой целью создана среда разработки Moldable Development Environment.

Давайте разберёмся, на что уходит время разработчиков. Самый старый из известных мне источников по этой теме — книга «Принципы разработки и проектирования программного обеспечения» Зелковица, Шоу и Гэннона (1979). Там написано, что две трети времени программиста уходит на сопровождение проектов.

Скан страницы:


Затраты на разработку программного обеспечения (1979)
Читать дальше →

Поддержка Arduino в ReactOS

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

Вадим Галянт написал драйвер usbser.sys для ReactOS, и теперь (барабанная дробь) появилась возможность программировать платы Arduino в ReactOS. И да, на реальном железе, не в Virtual Box.

Ну как.. теоретическая возможность на самом деле.

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

Читать далее

Динамические структуры в shared-памяти

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

Приветствую, читатель! Хотелось бы осветить свою небольшую библиотеку для C++, которая призвана помочь Вам создавать динамические структуры в shared-памяти. Далее - под катом.

Читать далее

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

Баг в ядре Linux и как правильно жаловаться

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

Я работаю системным программистом в компании КриптоПро. Нередко мои задачи связаны с ошибками, которые лежат на самом нижнем уровне современных операционных систем, под которые мы пишем ПО. Я хочу поведать тебе, Хабр, об одной из таких ошибок и о том, как я жаловался на неё разработчикам.

Я отвечаю за поддержку одной из наших библиотек с C-интерфейсом, написанной на C и C++. Мой коллега из другого отдела сообщил, что его нагрузочный тест нашей библиотеки на C# в Linux выдаёт ошибку в хитром сценарии: нужно иметь два процесса по пять потоков, делающих некоторые идентичные вызовы. Если процесс один, а потоков много, то проблема не проявляется. Если процессов два, но в каждом по одному потоку, то проблема не проявляется. Путём просмотра исходников нагрузочного теста и логов работы библиотеки удалось перенести проблему в маленький юнит-тест на C++ с использованием нашего API.

Узнать, что же это было

Как начать писать программный код Си в ОС Linux (Руководство для совсем начинающих)

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

Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux, или может быть долго были пользователями ОС Windows. Я попробую здесь показать прямое руководство к действию на примере ОС Ubuntu и тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux.

Читать далее

История: пишем скрипты на Go

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

Это история о том, как я попытался писать скрипты на языке Go. Здесь мы обсудим, когда вам может понадобиться скрипт на Go, какого поведения от него следует ожидать, а также рассмотрим его возможные реализации. В этой дискуссии мы глубоко обсудим скрипты, оболочку и шебанг-строки . Наконец, обсудим решения, обеспечивающие работоспособность скриптов на Go.

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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



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

Под катом подробнее об обоих решениях от Quest и ссылки на прошедшие вебинары.
Читать дальше →