Изначальные планы по содержанию книги много раз приходилось корректировать, как говорится, по ходу пьесы; как можно легко убедиться, в первые два тома в итоге вошли первые четыре из исходно планировавшихся семи частей книги. На этой странице я привожу описание своего видения двух оставшихся томов; естественно, эта информация тоже приблизительная, всё может ещё не раз поменяться.
Том 3: системы и сети
С тех пор, когда я выпустил своё «Введение в операционные системы», прошло больше десяти лет. Изначально было понятно, что материал этой книжки, прежде чем его можно будет включить в новую книгу, придётся подвергнуть жесточайшей переработке; однако даже после того, как такая переработка вроде бы была предпринята, полученный на выходе текст всё ещё кажется мне безнадёжно сырым. Кроме того, даже сама логика подачи материала, судя по всему, должна быть изменена. Так, при описании общих принципов построения и работы ядра ОС уже нужно (например, для объяснения разницы между работой ядра в контексте процесса и вне такового) упоминать различные способы построения взаимоисключений; как следствие, материал, относящийся к работе с разделяемыми данными, к этому моменту уже должен быть пройден; есть и другие «зависимости» подобного рода. Всё это означает, что порядок тем, избранный когда-то для «Введения» (сначала общие принципы, потом практические сведения об интерфейсе системных вызовов Unix, и в самом конце — разделяемые данные) никуда не годится.
Третий том мне мыслится сейчас состоящим из четырёх частей:
- Часть 5: возможности и интерфейс операционной системы:
- общие сведения о целях, задачах и принципах операционной системы;
- файловые системы и ввод-вывод в ОС Unix;
- процессы, их свойства, управление процессами; сеансы и группы;
- права, привилегии, модель защиты ОС Unix;
- средства взаимодействия процессов;
- управление выполнением своего собственного процесса (sleep/pause/nice, select/poll...)
- Часть 6: компьютерные сети:
- вводная информация, понятие протокола;
- основные технические принципы работы сети Интернет; стек TCP/IP; обзор основных протоколов и служб — SMTP (+POP3/IMAP), HTTP, DNS, XMPP;
- интерфейс сокетов; семейства AF_UNIX, AF_INET и AF_INET6;
- дейтаграммная и потоковая модели взаимодействия, TCP vs. UDP;
- организация взаимодействия процессов в дейтаграммном режиме без установления соединения;
- клиент-серверная модель взаимодействия процессов по сети в потоковом режиме;
- проблема очерёдности действий и её решения; мультиплексирование ввода-вывода; событийно-ориентированные приложения и программирование в терминах явных состояний.
- Часть 7: параллельное программирование и разделяемые данные:
- откуда берутся и к чему приводят ситуации состязания; зачем нужны критические секции;
- методы организации взаимоисключений: алгоритм Петерсона и т.п.;
- семафоры и мьютексы;
- классические задачи синхронизации (пять философов, производители-потребители, читатели-писатели, спящий парикмахер);
- библиотека pthread.
- Часть 8: ядро изнутри:
- ещё раз о задачах ОС; привилегированный режим и прочее;
- ядро как обработчик запросов; точки входа в ядро; основные различия между обработкой аппаратных прерываний и всего остального;
- процесс и его жизненный цикл; легковесные процессы;
- менеджер памяти; виртуальная память и её основные модели;
- ввод-вывод, устройства, драйверы.
Том 4: высокоуровневое программирование
До этого тома дело дойдёт ещё не скоро, поэтому его структура пока мыслится крайне приблизительно.
- Часть 9: Объектно-ориентированное программирование и язык Си++.
- Часть 10: Построение программ с графическим интерфейсом пользователя.
- Часть 11: Скриптовое программирование на примере Tcl; графические интерфейсы на Tcl/Tk.
- Часть 12: Парадигмы программирования. Лисп, Пролог, Datalog, Hope.
Возможно, что в этот том войдёт что-то ещё.