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

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

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

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

Как написать свою маленькую ОС

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


Большое начинается с малого. Например, ядро Linux 0.0.1 состояло всего из 10 239 строк кода, из них 20% комментарии. Такой проект вполне может осилить студент в качестве курсовой или дипломной работы, программируя по вечерам на домашнем ПК (собственно, Линус и написал его во время учёбы в университете, когда вернулся из армии).

Если один студент смог это сделать тогда, то почему нельзя повторить? И действительно, в интернете есть даже специальные обучающие ресурсы для написания новых ОС и целые сообщества энтузиастов, которые помогают друг другу в этом непростом деле.
Читать дальше →
Всего голосов 101: ↑96 и ↓5 +91
Комментарии -23

Новости

Создание своего UEFI приложения

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

Привет, Хабр! Мне 16 лет, я студент, учусь на первом курсе колледжа на программиста. Начал увлекаться низкоуровневым программированием на Ассемблере и C/C++

Я заметил что на Хабре есть множество статей о написании своих простых "загрузчиков" для BIOS-MBR, которые выводят на экран "Hello World!". И при этом практически нет ни одной статьи о создании того же самого, но только для UEFI, хотя будущее именно за ним, ведь BIOS уже давно устарел! Это я и хочу исправить в этой статье.

Читать далее
Всего голосов 84: ↑83 и ↓1 +82
Комментарии 80

Нарушаем ограничения файловых систем *NIX

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

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

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

Под катом вас ждет небольшой экскурс в особенности работы файловых систем и набор экспериментов.
Читать дальше →
Всего голосов 69: ↑65 и ↓4 +61
Комментарии 48

Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки

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

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

Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе.

Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.

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

Истории

Можно ли запустить ембедед С-проект на базе РТОС в режиме симуляции под Windows?

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

Если у вас есть эмбедед(embedded) проект и он написан на С или на С++ вы можете попробовать запустить этот проект в режиме симуляции на десктопном ПК и даже под Windows, по крайней мере у нас это получилось.

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

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

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

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

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

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

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

Xv6: учебная Unix-подобная ОС. Глава 4. Прерывания и системные вызовы

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

Глава расскажет, как xv6 обрабатывает прерывания на RISC-V и о хитростях виртуальной памяти: как использовать ошибки доступа к страницам, чтобы оптимизировать работу ОС.

Глава расскажет о копировании страниц при записи, ленивой выдаче страниц, выдаче страниц по необходимости и сбросе страниц на диск.

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

ToolChain: Настройка сборки прошивок для микроконтроллеров Artery из Makefile

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

Настало время освоить очередное семейство микроконтроллеров: от компании Artery Technology.

Компания Artery Technology уже возвела полноценную экосистему для своих процессоров. Есть фирменные отладочные платы, программаторы, документация, исходные коды MCAL и даже кодо генераторы.

В этом тексте я представил пошаговую инструкцию того как запрограммировать микроконтроллер Artery.

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

Rust 1.76.0: обновление совместимости ABI, получение имени типа из ссылки

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

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


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


rustup update stable

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


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

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

Не пора ли валить с gnu libc на что‑то другое?

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

Пользуюсь открытым ПО значительное время. Сижу на Линуксе.

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

Последний эпизод коснулся совсем уж системного кода - стандартной библиотеки libc от GNU. Системнее может быть только ядро.

История такая. Собрал Хромиум (не быстро). Когда наконец сборка завершилась с попутным решением проблем, думал: ну вот наконец щас запущу, посмотрю как работают интересующие меня вещи. И тут произошёл облом. Хром падал почти в самом начале запуска с ошибкой доступа к памяти. Довольно быстро удалось выяснить, что падение происходит из-за ошибки обращения по нулевому указателю. И происходит оно в динамическом загрузчике, то бишь в libdl, при загрузке библиотеки через dlopen. libdl.so является одной из компонент пакета стандартной библиотеки и понятно, самой системной библиотекой в ОС. Подробности всей ситуации я описал в вопросе на stackoverflow.

Вкратце: при загрузке библиотеки libXcursor.so подтягиваются непонятно откуда взявшиеся зависимости, не имеющие никакого отношения к упомянутой библиотеке. И зависимости эти не инициализированы корректно. Откуда и происходит обращение по нулевому указателю. Впоследствии выяснилось, что проблема начинается с несовпадающих версий библиотек libQt5Core, в результате чего libdl делает полный отбой с попыткой отката всех изменений.

Но, видимо, этот откат реализован из рук вон плохо, поскольку после него начинают происходить весьма странные вещи. И загрузка неинициализированной зависимости с нулевыми указателями лишь одна из них. Я ещё сделал пробник в виде простого приложения, которое пытается воспроизвести ситуацию. И в этом пробнике также происходил сбой, но уже при инициализации (вызов init или конструктор в их терминологии) либы libpthread.so (тоже очень системная) - потерян адрес глобального на процесс хранилища либ.

Читать далее
Всего голосов 57: ↑44 и ↓13 +31
Комментарии 162

Xv6: учебная Unix-подобная ОС. Глава 3. Таблицы страниц

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

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

Глава рассказывает, как xv6 работает с виртуальной памятью и об устройстве виртуальной памяти RISC-V.

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

Устройство GPIO-драйверов в Linux

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

Рассмотрим, как устроены GPIO-драйверы в Linux, и почему это сделано именно так. Поймем, почему для простого мигания светодиодом в этой операционной системе надо пройти через N слоев абстракции.

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

Xv6: учебная Unix-подобная ОС. Инструменты для сборки и запуска xv6 под QEMU

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

Эта инструкция - приложение к книге об учебной ОС xv6.

Xv6 работает на RISC-V. Для сборки кода xv6 и запуска под QEMU понадобятся RISC-V версии инструментов: QEMU 5.1+, GDB 8.3+, GCC, и Binutils.

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

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

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

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

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

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

...

Часть 3: Inode, Lookup

Часть 4: Inode-операции: symlink, unlink

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

Xv6: учебная Unix-подобная ОС. Глава 2. Устройство операционной системы

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

Операционная система выполняет несколько процессов одновременно. ОС распределяет время работы с ресурсами компьютера между процессами. ОС даст каждому процессу шанс на выполнение, даже если число процессов больше числа процессоров.

ОС изолирует процессы друг от друга так, что ошибка в одном процессе не нарушит работу других.

ОС позволяет процессам взаимодействовать - обмениваться данными и работать совместно.

Глава 2 рассказывает, как xv6 выполняет эти требования, о процессах xv6 и как xv6 запускает первый процесс.

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

Xv6: учебная Unix-подобная ОС. Глава 1. Интерфейсы операционной системы

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

Эта книга рассказывает о принципах работы операционных систем на примере xv6. Операционная система xv6 реализует базовый интерфейс, который Кен Томпсон и Деннис Ритчи предложили в операционной системе Unix, и подражает внутреннему устройству Unix. Комбинации простейших механизмов Unix дают удивительную свободу действий. Современные операционные системы признали успех Unix и реализуют похожие интерфейсы - BSD, Linux, macOS, Solaris, и даже Microsoft Windows. Изучение xv6 поможет понять работу и других операционных систем.

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

Рыцарь-демон, Intel Xeon Phi в 2024-м, часть 0

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

Вы точно знаете о процессорах Intel. Вероятно, вы что-то слышали о видеокартах Intel. Но об этом устройстве не знает никто (effectively никто). Триста ватт, двести пятьдесят ядер, архитектура x86 (почти). Это чудовище из 2014-го зовут Intel Knights Corner или же Intel Xeon Phi... и это карта-сопроцессор для слота PCI-E.

И что дальше?
Всего голосов 40: ↑40 и ↓0 +40
Комментарии 25

Высокоскоростной SPI to Ethernet конвертер, при чем здесь DMA?

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

Чисто техническое, но не очень глубокое описание реализованной задачи с самыми простыми расчетами. Надеюсь, будет полезно соответствующим техническим специалистам или для тех, кто хочет понимать что-то про объем знаний необходимых для использования DMA над некоторым устройством периферии, например SPI.

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

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

Можно ли использовать DMA вместо memcpy в Linux

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

В интернете можно найти описание проблем, связанных с использованием DMA для стандартной функции копирования данных из памяти в память:

Linux – DMA memcpy operation in Linux

Давайте попробуем разобраться, как можно использовать интерфейс к DMA для реализации стандартной операции копирования memcpy и есть ли в этом смысл.

Читать далее
Всего голосов 17: ↑15 и ↓2 +13
Комментарии 47

Разработка HID-драйвера: шаг за шагом

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


Предлагаем погрузиться в мир Human Interface Device (HID) в контексте операционной системы реального времени «Нейтрино». В статье мы расскажем про архитектуру HID и коснемся практических аспектов создания драйверов для устройств ввода.


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

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

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