Добавить в корзинуПозвонить
Найти в Дзене

Пишем операционную систему Триалогия - Содержание

Это не руководство и не спецификация. Это история операционной системы, которую я пишу сам, кусок за куском, слой за слоем, и попытка рассказать её так, как я рассказал бы любопытному человеку за столом. Триалогия, это собственное ядро для 32-битного x86, собранное вручную. Оно стартует через свой загрузчик BIOS, переключается в защищённый режим, настраивает память и страничную трансляцию, и оттуда поднимает всё само: многозадачность со своим планировщиком, прерывания через IOAPIC и LAPIC, кучу, драйверы устройств для дисков и сети, собственную файловую систему рядом с FAT и EXT, и оконный менеджер, который работает как сервис в userspace. Программы говорят с ядром через интерфейс, в духе io_ring. Это живая система, не законченная. На одном ядре она работает стабильно, на двух пока не надёжно. Что-то прочно, что-то лишь каркас, и в каждой статье я честно говорю, что есть что. Попробовать её можно в QEMU или VirtualBox. Потому что это самое поучительное, что я знаю. Проектов ОС бессчёт
Оглавление

Триалогия, операционная система с нуля

Это не руководство и не спецификация. Это история операционной системы, которую я пишу сам, кусок за куском, слой за слоем, и попытка рассказать её так, как я рассказал бы любопытному человеку за столом.

Что это такое

Триалогия, это собственное ядро для 32-битного x86, собранное вручную. Оно стартует через свой загрузчик BIOS, переключается в защищённый режим, настраивает память и страничную трансляцию, и оттуда поднимает всё само: многозадачность со своим планировщиком, прерывания через IOAPIC и LAPIC, кучу, драйверы устройств для дисков и сети, собственную файловую систему рядом с FAT и EXT, и оконный менеджер, который работает как сервис в userspace. Программы говорят с ядром через интерфейс, в духе io_ring.

Это живая система, не законченная. На одном ядре она работает стабильно, на двух пока не надёжно. Что-то прочно, что-то лишь каркас, и в каждой статье я честно говорю, что есть что. Попробовать её можно в QEMU или VirtualBox.

Зачем вообще

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

Статьи

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

Начало

1. Почему я пишу собственную операционную систему

2. Система в общих чертах

3. Попробовать самому

Архитектура и загрузка

4. Мост между ядром и пользователем

5. Общение между приложением и оконным менеджером

6. Как работает загрузка

Память

7. Управление памятью и страничная память в ядре

8. Аллокатор кучи (kmalloc / kfree)

9. Отображение MMIO: говорить с железом как с памятью

10. Аллокатор стеков ядра

Многозадачность и планирование

11. Многозадачность: много программ, один CPU

12. Планировщик: кто пойдёт следующим

Прерывания и синхронизация

13. Прерывания: IDT, IOAPIC и LAPIC

14. Синхронизация: spinlock и sleeping-mutex

15. Ещё о синхронизации: wait-очередь, семафор и event

Башня файловой системы

16. Файловые системы: от open() до диска (обзор)

17. Система виртуальных устройств (VDS)

18. Виртуальная файловая система (VFS)

19. Абстрактный слой ФС

20. Разделы: MBR и GPT

21. Слой Storage

22. IDE: обращение к диску через порты

23. AHCI: SATA через DMA

24. Конкретные файловые системы

Центральные интерфейсы ядра

25. IPC между процессами: каналы, разделяемая память и сигналы

26. Загрузчик ELF: как из файла получается работающая программа

27. Подписанные программы: подписи ELF через ECDSA и SHA-256

Обнаружение и управление устройствами

28. Шина PCI: как находят устройства, config space, BAR

29. ACPI и MADT: LAPIC, IOAPIC и таблицы прошивки

30. UDM, универсальное управление устройствами: сопоставление драйверов, hotplug, эвристика

31. Device manifest: как помнить железо в файле TOML

Userspace и инструменты

32. ULES, Userspace Lazy (deferred) Event System: события ядра для программ

33. Оконный менеджер изнутри: компоновщик, поверхности и z-order

34. Библиотеки userspace: libc, libgfx, libterm и стартовый кусок crt1

35. Две оболочки: консоль ядра против trish, то же имя и другой код

36. Встроенные команды ядра: dmesg, taskstats, cpuload, vgainfo, netstat

37. Программы кольца 3: оконные приложения, инструменты оболочки и как они стартуют

Сеть

38. Сетевые карты: E1000, Realtek, PCnet, кольца дескрипторов и DMA

39. KNP: мост zero-copy между ядром и сетевым стеком

40. Стек TCP/IP в ring 3: Ethernet, ARP, IP, ICMP, TCP и UDP

41. DHCP и DNS: откуда система берёт свои адреса

42. NetworkManager и сокеты: как программы пользуются сетью

Строительные блоки и драйверы

43. Последовательный порт: простейшее устройство и важнейшее при отладке

44. Драйверы дисплея: VGA, VESA и VMware SVGA II под одним HAL

45. Ввод PS/2: scancodes, раскладки и пакет мыши

46. Дата и время: часы, что никогда не спят

47. Таймеры: от выключенного PIT до точного сердцебиения

48. SMP: оживить несколько ядер

49. Stdlib: собственный маленький набор инструментов

50. Логирование: как сообщения идут сквозь систему

51. Парсер TOML: как система читает свои настройки

52. Форматы изображений: как система распаковывает картинки

53. Текстовые форматы: один байт для каждого языка мир

*Система не стоит на месте, поэтому тексты со временем могут расходиться с фактическим состоянием.