XPost. CPIO под микроскопом.

Это кросспост моей статьи CPIO под микроскопом. Описание этого формата будет нам необходимо при рассмотрении вопроса создания RamFS. В статье приводятся примеры из HEX-редактора, так что удобнее, на мой взгляд, читать ее через браузер.

CPIO - это достаточно старый (1992 год), но в то же время очень удобный вариант архива. Он достаточно прост, и, возможно поэтому, получил широкое распространение. Например данный формат используют RPM, initramfs ядра Linux, а также установщик архивов "pax" от Apple.

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

Урок 6. Страничная адресация

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

Урок 5. Аппаратные прерывания

В этот раз мы с вами создадим обработчики аппаратных прерываний, один из которых будет вызывать прерыванием от аппаратного таймера.

Урок 4. GDT и IDT

GDT и IDT - это таблицы дескрипторов. Они представляют собой массивы флагов и битов, описывающих работу системы сегментации и таблицы векторов прерываний соответственно.

Перевод Multiboot Specification

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

Урок 3. Вывод на экран

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

Урок 2. Приступаем к работе.

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

2.1. Код для загрузки

Итак, настало время писать код. Хотя основной язык разработки ядра - С, есть некоторые модули, которые просто необходимо написать на языке ассемблера. Один из таких модулей - код инициализации и загрузки ядра.

Урок 1. Настройка окружения.

Нам нужен фундамент на котором мы начнем создание нашей ОС. Во-первых, предполагается что Вы используется *nix систему с набором утилит GNU. Под windows Вы можете использовать Cygwin, однако тогда написание сценариев сборки полностью на Вашей совести. Также у Вас должен быть установлен загрузчик GRUB2 и должна работать команда grub2-mkrescue.

GNU OWN OS

Сокращенно gOWNOS. 
То есть собственная операционная система - клон *nix.

Здесь я хочу опубликовать цикл статей, рассказывающих как написать собственный клон операционной системы UNIX.

Большая часть материала основана на переводе J. Molloy tutorials, а также более раннем Bran's Kernel Development Tutorial.

Статьи я буду выкладывать по мере их готовности раз в 3-4 дня. Всего предполагается, что будет 10 статей + введение.

Будут рассмотрены такие вопросы как:
  1. Взаимодействие с загрузчиком GRUB;
  2. Создание окружения ядра;
  3. Работа с аппаратными прерываниями;
  4. Организация работы с VFS;
  5. Реализация многозадачности.
Для сборки и запуска примеров вам понадобятся: GCC, ld, NASM и GNU make. Описание будет затрагивать только архитектуру x86 для защищенного 32-битного режима.

Полезные ссылки:
Intel manuals.
OSDev.org Wiki и OSDev.org forum.
OSDever.net

Код примеров планируется размещать на github.
Первая статья.