"Ради удовольствия." - читать интересную книгу автора (Торвальдс Л., Даймонд Д.)

Однако мое сообщение не прошло незамеченным. Каждый знающий человек (а
кто еще станет читать сайт Minix?) понял, что я пишу операционную систему.
Иначе зачем бы мне понадобились правила POSIX? Мое сообщение вызвало
любопытство Ари Лемке, преподавателя из Технического университета Хельсинки
(где бы я непременно стал учиться, если бы меня не так привлекали
теоретические занятия). Ари по-дружески обратился ко мне, предложив выделить
на университетском FTP-сервере каталог, в который я смогу поместить свою
операционную систему, когда она будет готова, чтобы каждый при желании мог
ее оттуда скачать.





VII.

Похоже, Ари Лемке страдал излишним оптимизмом. Он создал каталог
(ftp.funet.fi) задолго до того, как у меня появилось что туда положить. У
меня был пароль, и все было готово для того, чтобы я мог просто войти в
систему и закачать свою программу. Но прошло долгих четыре месяца, прежде
чем мне захотелось чем-нибудь поделиться с миром или хотя бы с Ари и
несколькими другими фанатами операционных систем, с которыми я
переписывался.
Исходно я хотел написать такую операционку, которую мог бы использовать
вместо Minix. Мне не нужно было, чтобы она могла делать больше, чем Minix,
но она должна была выполнять те функции Minix, которыми я пользовался, а
также кое-что еще. Например, в Minix не только была плохая эмуляция
терминала, но и не было возможности перевести в фоновый режим программу,
которой временно не пользуешься. И управление памятью было очень упрощенным
-- в Mac OS оно и сейчас такое, кстати.
Как создать операционку? Надо выяснить, что должны делать системные
вызовы, и написать программы, которые будут это делать. Вообще говоря,
системных вызовов около двух сотен. Некоторые из них могут соответствовать
целому набору функций. Другие -- совсем просты. Наиболее фундаментальные
системные вызовы могут быть весьма сложными и в значительной мере зависят от
имеющейся инфраструктуры. Возьмем системные вызовы Write (запись) и Read
(чтение). Для записи на диск и чтения с диска нужно создать драйвер
дисковода. Возьмем вызов Open (открыть). Нужно создать весь уровень файловой
системы, который будет анализировать имена и определять, где что лежит на
диске. На один этот системный вызов ушло несколько месяцев. Но когда он был
уже готов, тот же самый программный код можно было использовать и для других
функций.
Так шла разработка на ранних этапах. Я читал стандарты в руководствах к
Sun OS и других книжках, брал системные вызовы один за другим и старался
написать что-нибудь работающее. Это было довольно изнурительно.
А все потому, что, когда ничего не происходит, трудно оценить объем
сделанного. Можно писать маленькие тестики, которые будут проверять то, что
ты только что добавил. Но при этом реально ничего не выполняется. Через
некоторое время я бросил перебирать системные вызовы по списку и перешел к
другому методу. Получилась довольно полная система, и мне захотелось