913просмотров
15 сентября 2025 г.
Score: 1.0K
Прежде чем углубиться в изучение внутренностей Linux, мне показалось верным сделать шаг назад и обратиться к истокам - к третьему изданию Operating Systems Design and Implementation Таненбаума. В ближайшем году труду исполняется 20 лет, и столь почтенный возраст уже начинает сказываться на актуальности материала - особенно если говорить о практической его части. Взявшись за книгу, я ожидал, что мне удастся проштудировать исходный код ОС в сопровождении обширных комментариев автора, поэкспериментировать с исходниками, пересобрать систему, но трудности всплыли на первом же шагу. Последняя версия Minix, 3.3.0 на текущий момент, уже далеко ушла от описанной в книге версии 3.1.0, и скорее представляет из себя сборку NetBSD с вкраплениями #if defined(__minix). Проект сильно изменил свою структуру, и сопоставить функции и файлы, о которых идёт речь в тексте учебника, с имеющимися в проекте, стало слишком сложно. Более того, собрать проект без доработок не выйдет - сначала надо исправить несколько ошибок в исходниках. В то же время вернуться к версии 3.1.0, описываемой в книге, ещё сложнее: Makefile ожидает, что исходники лежат по определённому пути, префиксы местами захардкожены, а python так и вовсе используется версии 1.5. Всё починить и завести, конечно, можно, но задача кажется объёмной и даже перевешивающей цель повозиться с самим кодом - в общем, от этой части плана пришлось отказаться. Книгу я изучал, просто читая исходный код. К качеству этого кода тоже есть вопросы, хоть и спорить с автором я желания не имею :) И всё же сбитые отступы, использование стандарта K&R, нарушения единого стиля и прочие мелочи заставляли мозг напрягаться лишний раз. Самой крупной проблемой оказался ошибочный комментарий в ассемблерном коде (использующим свой особый диалект, к слову), из-за которого пришлось несколько дней сверяться с OsDev Wiki: сегменты описаны как flat, значит, смещение сегмента должно быть равно нулю - а оно вычисляется. В конце-концов, большие надежды я возлагал на раздел, посвящённый управлению памятью, однако MINIX 3.1.0 не реализует виртуальную память. Описанный алгоритм ощутимо проще используемого в современном Linux и мне был уже не особо интересен. И всё же учебник замечателен - выше я сказал обо всех несоответствиях ожиданиям и недостатках, которые помешали мне вынести максимум из книги, и все они уместились в одну заметку в сравнении с текстом самого труда, занимающего более 600 страниц. В книге Таненбаум говорит не только о коде, он описывает и общую теорию, рассказывает про возможные алгоритмы. Пару слов об этом я даже оставлю в комментарии к заметке. Наконец, пара слов об актуальности MINIX. Да, эта ОС уже имеет мало общего с Linux, используемые при её построении подходы (например, "безопасность важнее производительности") могли не пройти проверку временем, и всё-таки MINIX имеет огромную академическую ценность и даёт базу для дальнейшего изучения Linux. Более того, оказывается, модуль Intel ME использует MINIX 3 в качестве прошивки!