Как стать автором
Обновить
72.58

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

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

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

Погружение в CPU и OS. PT1

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 2.4K
Перевод

Давайте начнем с основ того, как работает ваш компьютер на самом базовом уровне.

Устройство компьютера

Центральный процессор (ЦП) компьютера отвечает за все вычисления. Он - главный. Он начинает работу, когда вы включаете компьютер, исполняя одну инструкцию за другой.

Первый массово производимый центральный процессор был Intel 4004, разработанный в конце 60-х годов итальянским физиком и инженером Федерико Фаджином. Он имел 4-битную архитектуру вместо 64-битных систем, которые мы используем сегодня, и он был гораздо менее сложным, чем современные процессоры, но много из его простоты все еще остается.

"Инструкции", которые исполняют ЦП, представляют собой просто двоичные данные: несколько байтов, представляющих выполняемую инструкцию (опкод), за которыми следуют необходимые данные для выполнения инструкции. То, что мы называем машинным кодом, - это просто серия таких двоичных инструкций подряд. Ассемблер - это полезный синтаксис для чтения и записи машинного кода, который легче для человека, чем сырые биты; он всегда компилируется в двоичный код, которым ваш ЦП умеет читать.

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

Новости

Многопоточность (Multithreading) для практического программирования. То, о чем «забыть-нельзя-вспоминать» придется

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 8.5K
Обзор

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

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

Мне кажется нельзя считать что вы до конца понимаете концепцию многопоточности (Multithreading/ Concurrency) если вы не понимаете когда (для каких задач) ее можно и/или нужно использовать на однопроцессорной машине, 2-х процессорной, N‑процессорной машине и от чего это зависит.

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 11

Актуальный гайд по написанию простого Windows-драйвера

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

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

Читать далее
Всего голосов 58: ↑58 и ↓0 +58
Комментарии 38

Поиск по регулярным выражениям может быть простым и быстрым

Уровень сложности Средний
Время на прочтение 28 мин
Количество просмотров 6.9K
Перевод

Данный пост является переводом первой статьи 2007 года про устройство регулярных выражений от автора библиотеки RE2. Для понимания требуется немного терпения и свободного времени, чтобы осилить прочтение статьи до конца. Будет плюсом знакомство с теорией автоматов и языком программирования Си (но это необязательное требование).

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

Как оказалось, с тех пор мало что поменялось, так что статья не потеряла своей актуальности.

Обо всех ошибках и опечатках большая просьба сообщать, чтобы я мог их поправить.

Заблудиться в тёмном лесу
Всего голосов 34: ↑33 и ↓1 +32
Комментарии 6

Истории

Веб-консоль для загрузчика U-Boot

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 6.2K
Туториал

В данной статье я расскажу, как совместил U-Boot и TCP/IP стек LWIP, и c использованием LWIP написал веб-консоль на WebSocket, очень простой DHCP-сервер и HTTP-сервер. Код лежит на репозиториях U-Boot и LWIP.

Читать далее
Всего голосов 72: ↑72 и ↓0 +72
Комментарии 15

Rust 1.72.0: потенциально полезные отключенные элементы, неограниченные константные вычисления

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.9K
Перевод

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


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


rustup update stable

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


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

Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 0

А давайте убьем все фреймворки?

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 46K
Мнение

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

Технологии эволюционируют и функционируют, а новые технологии их полностью заменяют. Считаю, что сейчас наступает эпоха, когда технологии фреймворков и Электрона могут быть вытеснены генеративными AI. Рассмотрим несколько примеров.

Нажимайте вот эту вот кнопотуленку
Всего голосов 134: ↑108 и ↓26 +82
Комментарии 269

Варим C с компилятором Zig и его build.zig

Уровень сложности Простой
Время на прочтение 21 мин
Количество просмотров 2.8K
Туториал

По случаю выхода версии 0.11.0 языка Zig я решил написать ещё одну статью о языке Zig. В этот раз речь пойдет о системе сборки языка. А точнее, как пользоваться кодом написанным на языке C в проекте на языке Zig, с небольшими ответвлениями в стороны для описания некоторых возможностей системы сборки. Тем более, что она претерпела несколько изменений, о чём я так же коротко упомяну. Эксперименты проводились мной на Windows 11. Стоит сразу упомянуть, что указанные в статье команды будут работать и на других операционных системах. Это одна из особенностей языка Zig. Но пример кода линковки системных библиотек для сборки библиотеки raylib будет платформозависимый, так как для разных платформ набор библиотек отличается. Если интересно, то прошу...

пройти во внутрь
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 29

Тимлид про «чекбоксики» на собеседованиях, тонкости управления Rust-командой и мотивацию сотрудников

Время на прочтение 7 мин
Количество просмотров 1.5K
Интервью

В «Криптоните» работает Александр Авраменко. Он возглавляет направление системного программирования и вместе с командой создаёт сетевые сервисы и конвейеры обработки потоков больших данных с применением моделей машинного обучения в реальном времени.

Александр рассказал нам в интервью об особенностях управления группой разработчиков, «red flags» на собеседованиях, мотивации команды и ситуации на рынке труда «растистов». А скоро выйдет вторая, «техническая» часть интервью — о языке программирования Rust, проектах и тех.стеке команды.

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Комментарии 3

Как написать свой режим для GNU Emacs и опубликовать его в MELPA

Уровень сложности Сложный
Время на прочтение 13 мин
Количество просмотров 1.3K
Туториал

Некоторое время назад я разработал режим GNU Emacs для редактирования конфигурационных файлов операционной системы Embox. Кроме всестороннего изучения Emacs Lisp мне потребовалось разобраться со структурой модуля режима, а также процессом и требованиями к публикации пакетов в MELPA, наиболее популярном архиве пакетов для GNU Emacs. В этом руководстве я расскажу, что нужно знать, чтобы написать свой собственный режим, и как опубликовать свой собственный пакет.

Запускаем свой Emacs!
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 0

Замешиваем файлы в тэги. Часть 2

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 1.2K
Туториал

Продолжаем создавать модуль ядра в Линукс на примере виртуальной файловой системы.

Часть 1: Описание задачи, Модуль ядра

Часть 2: Модуль ядра, Регистрация файловой системы

Что в результате получилось можно увидеть по ссылкам: демо-видео, код.

Продолжаем разбираться
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

Проверка целостности исполняемых файлов

Время на прочтение 9 мин
Количество просмотров 2.7K
Туториал

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

В деле контроля целостности нам помогут хэш-функции.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 22

Zig для меня — это новый C

Время на прочтение 9 мин
Количество просмотров 12K

По случаю выхода версии 0.11.0 языка Zig я решил написать статью о том, что привлекло меня в языке, что мне в нём нравится. В Zig есть ряд интересных решений. И я рассматриваю его, как альтернативу языку C. Так собственно его позиционируют его создатели. И не без причин. Причина, по которой я решил изучать Zig - я не захотел полноценно учить C. Многое в C исторически устарело. И Zig для меня, как глоток свежего воздуха.

Читать далее
Всего голосов 41: ↑40 и ↓1 +39
Комментарии 111

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

Yandex Scale
Дата 25 – 26 сентября
Время 17:00 – 18:00
Место Москва Онлайн
Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
Business&IT Day: Retail CPG
Дата 28 сентября
Время 09:50 – 14:00
Место Онлайн
XIX конференция разработчиков свободных программ «Базальт СПО»
Дата 29 сентября – 1 октября
Время 10:00 – 19:00
Место Переславль-Залесский Онлайн
Kokoc Hackathon
Дата 29 сентября – 1 октября
Время 19:00 – 21:00
Место Онлайн
Ruby Russia 2023 Online
Дата 30 сентября
Время 11:00 – 21:00
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Joker
Дата 9 – 14 октября
Время 16:00 – 19:30
Место Санкт-Петербург Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн

Замешиваем файлы в тэги. Часть 1

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 1.7K
Туториал

Давным, давно ... искал средство организации видео-файлов.

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

Чтобы всё работало в обычном проигрывателе: кликнул "Открыть файл..."; выбрал Детектив, Фантастика, не-Ужасы; получил список фильмов и выбрал нужный. Без специальных файловых менеджеров и браузеров.

И тогда такое средство мне не нашлось. А сейчас ... сейчас решил сделать его сам.

Что в результате получилось можно увидеть по ссылкам: демо-видео, код.

Часть 1: Описание задачи, Модуль ядра

Часть 2: Модуль ядра, Регистрация файловой системы

Как это делалось
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 19

Как делается OpenSource: личный опыт

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 30K
Recovery Mode

Я - автор двух пакетов, входящих более-менее во все дистрибутивы Linux: sane-airscan и ipp-usb.

Кроме того, sane-airscan входит во все основные дистрибутивы BSD (FreeBSD, NetBSD и OpenBSD) и в ChromeOS. ipp-usb в ChromeOS не взяли потому, что он написан на Go, а у них там очень жестко с размером исполняемых файлов, вместо этого они написали свое на Rust, но предпочли бы взять моё изделие, если бы могли. Совсем недавно появился порт ipp-usb на FreeBSD, вероятно, другие BSD тоже скоро подтянутся.

Вместе эти два пакета образуют стек "бездрайверного" сканирования документов для Linux и *BSD, а в перспективе нескольких лет, когда старые сканеры, наконец, вымрут, вероятно других драйверов и не останется.

Кроме того, ipp-usb делает возможным "бездрайверную" печать на USB-устройствах.

Здесь я хочу рассказать, каково оно, быть автором популярных OpenSource пакетов. Хоть эта работа и не принесла мне особых денег (на что я, впрочем, особо и не рассчитывал), она принесла мне бесценный опыт.

В целом, я полагаю, продвижение OpenSource пакетов структурно близко к продвижению на рынок программных продуктов. Занимаясь этой деятельностью, очень хорошо начинаешь понимать разницу между (1) написать программу, которая работает для меня (2) написать программу, которую можно назвать продуктом (3) вывести продукт на рынок.

Первое занимает гораздо меньше времени, чем второе. Второе - гораздо меньше времени, чем третье.

Читать далее
Всего голосов 394: ↑394 и ↓0 +394
Комментарии 67

Как начинать проект на Go в 2023 году

Время на прочтение 14 мин
Количество просмотров 3.5K
Перевод

Когда-то я написал статью о том, как начинать проект на Go в 2018 году. С тех пор многое изменилось, и я захотел написать обновлённую версию статьи. В ней я расскажу всё, что нужно новичку, чтобы приступить к работе с Go.

Читать далее
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 0

Многопоточность (Multithreading) для практического программирования

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 4.9K

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

Мне хочется предложить на суд читателей мое собственное понимание таких неудобных аспектов, связанных с применением многопоточности для практического программирования, которое накопилось у меня за пару десятилетий успешного применения этой самой многопоточности на всех уровнях разработки от Embedded и аппаратно-ориентированных уровней до C#, WPF, Java высокоуровневых фронт-ендов.

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 5

Rust 1.71.0: C-unwind ABI, атрибуты визуализации отладчика и константная инициализация thread local

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.2K
Перевод

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


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


rustup update stable

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


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

Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 1

Профилирование boot sequence операционной системы «Нейтрино»

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 1.6K
Туториал

При использовании нашей операционной системы пользователи регулярно обращают внимание на то, что процесс её загрузки от передачи управления ядру, до начала выполнения прикладного кода, не всегда прозрачный. В результате анализа обращений мы пришли к выводу, что необходимо внедрить штатный механизм информирования и профилирования процесса загрузки системы (boot sequence). Основной особенностью внедренного решения является его децентрализованность, поскольку ОС является микроядерной и все привычные системные сервисы реализованы вне ядра. Технология прикладного профилирования (тот же gprof) в данном случае не самый подходящий инструмент.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 2

Заметка к примеру «procfs3.c» 7 главы книги «The Linux Kernel Module Programming Guide»

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 1.9K
Мнение

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

Что там?
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 7

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