Практикум для изучения ОС
Я решил систематизировать свои знания об устройстве операционных систем и читаю всякие книжки по этой теме. На отсутствие теории не могу жаловаться. А вот с практической стороной у меня сложилось не сразу. Чаще всего советуют для изучения ОС взять исходники Minix или одну из первых версий. Но у Minix очень большая кодовая база, а ядро Линукс это всё-таки еще не операционная система.
Для меня более подходящим полигоном для изучения и экспериментирования стал проект учебной ОС xv6. Это Unix-подобная ОС, которую используют в учебных целях в MIT и других университетах. Запустить её просто - нужно собрать загрузочный образ и загрузить с ним виртуальную машину:
$ make
$ make qemu
Набор пользовательских утилит сильно ограничен, но, например, можно посмотреть список файлов и запустить регресионные тесты:
Помимо исходного кода для xv6 доступен учебник с описанием её устройства.
Ещё один проект, который мне был полезен, это юнит-тесты для KVM. Каждый юнит-тест это простая программа на ассемблере, проверяет “железо”: наличие ACPI таблиц, возможность выделить память, порты ввода-вывода и т.д.