воскресенье, 10 ноября 2019 г.

Иван Михайлович Гостев. Операционные системы. Учебник и практикум. 2-е издание


Учебник написан доктором технических наук, профессором кафедры управления информационными системами и цифровой инфраструктурой Школы бизнес-информатики факультета бизнеса и менеджмента национального исследовательского университета "Высшая школа экономики", а короче - профессором из ВШЭ.

Ещё одна книга-лекарство от опрометчивости. Долго пытался понять, как она могла получиться. В конце-концов наиболее правдоподобным объяснением мне показался такой вариант: профессор подготовил список тем для рефератов, раздал их студентам, а получившиеся рефераты скомпоновал в книгу. Наверняка книгу потом заставляет покупать студентов в качестве учебного пособия по своему предмету. В общем-то, довольно распространённая практика, являющаяся сравнительно честным источником дополнительного дохода. Но это всё лишь мои догадки, поэтому не стоит подавать на меня в суд за клевету, оскорбление чести и достоинства. Мне не нужно много говорить, т.к. книга говорит сама за себя.

На многих иллюстрациях фигурируют английские надписи. В тексте книги эти надписи либо не переводятся вовсе (например, на стр. 19, рис. 1.3 или на стр. 34, рис. 1.11), либо снабжаются не точным, не адекватным переводом (например, на стр. 42 фраза Data Connetion переведена как "структура связей данных", хотя по смыслу больше подходит "связанные данные"). Удачно попала в кадр калька "мультипотоковая модель процесса".



На стр. 66 речь идёт о бит- и байт-ориентированных драйверах. Не понятно, откуда взялись эти термины, потому что в общепринятой терминологии такие драйверы принято называть драйверами символьных и блочных устройств. Если поискать бит- и байт-ориентированные устройства в глоссарии, и прочитать пояснение этих терминов, то совершенно ясно станет, что речь идёт именно о символьных и блочных устройствах.

Часто в тексте встречается непоследовательное изложение, когда в абзаце упоминается то, о чём ещё только будет рассказано в следующих абзацах. Например, на стр. 67 сначала рассказывается о механизме обмена данными DMA и он описывается так, как будто он не работает в отрыве от механизма прерываний, и только потом прерывания описываются сами по себе, уже без DMA. На самом деле опрос, прямой доступ в память и прерывания могут использоваться устройствами в самых разных сочетаниях.

Часто встречается несогласованность терминологии. Например, буферный кэш (стр. 67) иногда называют буфером кэша (стр. 76).


На стр. 71 в списке типов файлов фигурируют одновременно обычные файлы и жёсткие ссылки, хотя никаких файлов такого типа не существует, т.к. жёсткая ссылка представляет собой другое равноправное имя того же файла.

Встречается и несогласованность единиц измерения. Например, в табл. 4.1. на стр. 74 в одной и той же строке фигурируют 16 терабайт и 264. Почему автор не пытался привести эти числа к единому виду? Читателю для того, чтобы сравнить эти числа, приходится пересчитывать их в уме.

В главе 5 про сетевую подсистему абсолютно игнорируется существование IPv6, для добавления поддержки которого в API сокетов были внесены доработки. Например, на стр. 85 упоминается, что в значение поля sin_family в структуре sockaddr_in всегда равно AF_INET, на стр. 90 описывается функция gethostbyname из старого API, а в примере на стр. 91 используется функция inet_ntoa. С появлением поддержки IPv6 значение sin_family может быть равно AF_INET6, вместо gethostbyname нужно использовать getipnodebyname, вместо inet_ntoa есть аналог inet_ntop.

На стр. 94 сообщается, что не существует других способов передачи информации между операционными системами в сети, кроме механизма сокетов. Но сети существовали в Unix и до операционной системы BSD, в которой был добавлен механизм сокетов. Во-первых существовали терминалы и телетайпы, при помощи которых с системой могло работать множество пользователей. Во-вторых, линии связи, используемые терминалами и телетайпами, можно было использовать для пересылки файлов между системами. Для этого существовал протокол UUCP. В частности, электронная почта существовала до появления сети интернет и работала через протокол UUCP.

Интересно, что судя по списку команд Unix, приведённому на стр. 149-151, автор всё же знает о существовании UUCP, т.к. в этот крайне малый список попали команды uucp, uuname, uupick, uustat, uuto, которые в наше время используются настолько редко, что не входят в базовую поставку операционных систем и устанавливаются отдельно.

На стр. 107 не переведены комментарии в описании структуры. На стр. 112 - аналогично.


На стр. 114 перепутаны описания системных вызовов shmat и shmctl.

На стр. 116 отступы у комментариев бессистемны. На втором фрагменте можно заметить, как значение макроса fdip переехало на следующую строку - такая программа даже не скомпилируется.

На стр. 116-117 во втором листинге нет существенной части кода, иллюстрирующей использование системного вызова poll - есть только завершающий фрагмент, дублирующий окончание предыдущего листинга, иллюстрировавшего использование системного вызова select. Тут же можно заметить, как собрались в кучу закрывающие фигурные скобки. После бессистемных отступов комментариев это ещё одна иллюстрация небрежности к оформлению кода.

Глава 7 производит впечатление написанной автором лично, информация в ней хорошо структурирована и довольно актуальна. Но и тут не обошлось без недостатков. В разделе 7.9.3 автор не различает языков Java и JavaScript. То программы на Java называются скриптами, то скрипты выполняются на виртуальной Java-машине на стороне клиента. Речь могла бы идти о Java-апплетах, но они не являются скриптами и эта технология так и не получила широкого распространения.

В глоссарии книги можно ещё раз встретить многие из тех несуразностей, какими пестрит вся книга. Тут можно встретить:
  • и бит- и байт-ориентированные устройства вместо символьных и блочных,
  • и перевод термина deadlock как просто блокировки, а не взаимоблокировки,
  • и зомби-процесс, который завершился, но в то же время может и выполняться,
  • и кальку "изображение процесса" вместо "образа процесса",
  • и интерпретатор, преобразующий программу построчно в двоичные коды,
  • и квант времени, чудесным образом позволяющий одновременно выполнять множество процессов на одном процессоре,
  • и модульность, показывающая "на какое число параллельно выполняемых модулей можно разложить некий алгоритм",
  • ещё одну кальку "мультизадачность" вместо многозадачности,
  • и "переключатель русской клавиатуры на английскую аббревиатуру" в качестве примера резидентной программы (сразу повеяло DOS).
Первоначально я купил эту книгу потому, что, как мне показалось, в её достаточно малый объём вместились обзорные сведения по большому количеству тем. Например, из этой книги я впервые узнал о существовании очередей сообщений, реализуемых на уровне операционной системы (каюсь, Стивенса не читал). Но, технического редактора у книги нет, зато есть аж два рецензента, которые либо не читали книгу, либо разбираются в теме ещё хуже, чем автор. Если книгу довести до ума, то она могла бы быть вполне неплохой. Но при таком количестве ошибок, сумбура и наплевательского отношения к терминологии и оформлению, сомнительно, что автор сможет привести материал в сколь-нибудь божеский вид. Если можно охарактеризовать книгу одним словом, то этим словом может быть "небрежность". Я читал второе издание книги, остаётся только догадываться о том, какое качество имело первое издание.

Не стоит думать, что я дотошно искал в книге ошибки, чтобы радостно написать о книге пакости. Я просто читал книгу, первоначально игнорируя мелкие недостатки. Когда же стало понятно, что книга переполнена ими, после прочтения очередного фрагмента книги я садился перелистывать книгу с блокнотом, в котором отмечал самые запомнившиеся ляпы. Я потратил на эту книгу 580 рублей, которых она явно не стоит. (Для сравнения: в том же заказе была книга Тима Скоренко по цене в 607 рублей, тоже в твёрдой обложке, но объёмом и массой в три-четыре раза больше). Решил потратить несколько часов своего отпуска на то, чтобы ещё и отсканировать фрагменты книги и наглядно показать другим читателям, почему не стоит тратить деньги на эту книгу.

Комментариев нет:

Отправить комментарий