Рубрика «низкоуровневое программирование»

Споры о самом сложном проекте во всем IT будут продолжаться вечно. Некоторые будут говорить что тяжелее всего написать ОС, другие скажут игровой движок, может еще попасться драйвер.

В этой статье я постараюсь подробно расписать свой опыт в написании ОС, работающей на BIOS.

Да что там такого?

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

Читать полностью »

❯ Глоссарий

  1. Программа – текстовый файл, который содержит в себе код на каком-либо языке программирования;

  2. Процесс – абстракция операционной системы, позволяющая следить и управлять ходом выполнения программы;

  3. Ядро – программа, лежащая в основе операционной системы, написанная на системном языке (например на C);

  4. Операционная система – ядро и стандартные пользовательские приложения;

  5. Модуль ядраЧитать полностью »

❯ Глоссарий

  1. Ассемблер — программа, которая преобразует (транслирует) код, написанный на языке ассемблера в машинный код;

  2. Язык Ассемблера — низкоуровневый язык программирования, где машинный инструкции (числа) заменены на мнемоники (слова) для удобства человека.

  3. Программа — текстовый файл, который содержит в себе код на каком либо из языков программирования;

  4. Процесс — абстракция операционной системы, позволяющая следить и управлять ходом выполнения программы;

❯ Введение: что будет в статье?

Читать полностью »

Всем здрасте, и сегодня мы начнем наше прохождение через низкоуровневый кодинг - написание ОС. Сегодня мы напишем загрузчик (точнее конфиг к GRUB) и простенькое ядро, которое будет выводить "Hello OSDev!"

Что нам понадобится:

  • Linux (у меня Kali Linux 2025.1a)

  • i686-elf-gcc и i686-elf-ld (тык)

  • qemu-system-i386

  • nasm

  • grub-mkrescue

Шаг 1. Структура папок

Создадим несколько папок:

mkdir boot #тут будет лежать скрипт для линковки
mkdir bin #тут - готовые бинарники
mkdir kernel #само ядро
mkdir iso #здесь будем собирать ISO
mkdir iso/boot #файл ядра
mkdir iso/boot/grub #тут конфиги GRUB

Читать полностью »

Длинное вступление

Утренняя работа над второй частью статьи началось не с запаха кофе, а с запаха нафталина, толстым слоем покрывающего микропроцессоры эпохи конца 1970-х годов. В этой знаменитой плеяде такие имена, как Zilog Z80, Motorola 68000, Intel 8086. Все они были выпущены с разницей буквально года два-три, и вполне могут считаться ровесниками.

Первая частьЧитать полностью »

Раз в несколько лет я устраиваю в нашей исследовательской группе челлендж «Напиши медленный код». Цель – написать код с минимально работоспособным количеством инструкций на цикл (IPC) с условием, чтобы этот код выполнялся на заранее подобранном сервере с архитектурой x86.

На первый взгляд, это абсурд! В сущности, так и есть. Однако, есть в этой безумной задаче и некоторая методическая ценность. Инженеры, проектирующие процессоры, прилагают все усилия ради достижения наивысшего возможного IPC… даже для очень неэффективного кода. Так и задумано, что писать код с очень высоким показателем IPC непростоЧитать полностью »

В первой части мы:

  • посмотрим, как работать с памятью и регистрами 8086

  • узнаем, как написать простую программу на ассемблере прямо в отладчике

  • изучим работу механизма прерываний и сделаем демонстрационный пример

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

Примеры в бинарном виде доступны по ссылке https://github.com/galilov/habr/blob/main/asm-8086-galilov.zip.

Что нужно знать перед стартом

Читать полностью »

Есть хороший способ начать свой путь в системное программирование: написать эмулятор и ассемблер для какого-нибудь простого процессора. Сегодня популярностью в узких кругах пользуются fantasy consoles: виртуальные игровые приставки в ретродухе. Я расскажу, как создать свой вариант виртуальной приставки BytePusher с процессором, имеющим всего одну команду. Если вы интересуетесь системным программированием, любите изучать необычные архитектуры процессоров или цените произведения из области демосцены, то эта статья для вас.

Почему BytePusher 

Читать полностью »

X11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.

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

А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.

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

А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.

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

Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js