Книга М. Руссиновича и Д. Соломона «Внутреннее устройство Microsoft Windows»

book_windows_internalsНе так давно вышло шестое издание книги «Внутреннее устройство Microsoft Windows» (в оригинале «Windows Internals») таких известных среди программистов людей как Марк Руссинович и Дэвид Соломон. Руссиновича вы можете знать в первую очередь как автора многих утилит с сайта Sysinternals, который несколько лет назад перешел под крыло Microsoft.

Узнав, что вышла новая книга этих авторов про внутренности Windows, я не задумываясь ее купил. Предыдущие издания этой серии я не читал, и ожидал в первую очередь что-то наподобие знаменитой книги Джеффри Рихтера «Windows для профессионалов». В результате оказалось, что книга Руссиновича и Соломона еще более глубокая, в том смысле, что авторы залезают настолько глубоко во внутренности Windows, что становится непонятно, как это использовать в обычном прикладном программировании. Поэтому эта книга может быть полезна в первую очередь системным программистам, которые работают в режиме ядра и пишут драйверы.

Надо сказать, что это книга не по программированию, во всем 800-страничном талмуде можно насчитать от силы три программы, да и то две из них будут скриптами на Visual Basic. Авторы в первую очередь рассказывают о том, что находится под капотом Windows, причем за несколькими слоями абстракций, так что простому смертному программисту это знать не положено, чтобы он не захотел вдруг использовать какие-нибудь недокументированные функции, кои упоминаются в книге. Много места уделено тому, как Windows хранит внутреннее представление объектов, таких как потоки, процессы, дескрипторы безопасности. При обычном программировании до них тоже не доберешься, и чтобы их пощупать, авторы используют отладчик ядра и некоторые утилиты от Sysinternals.

Коротко перечислю основные темы, которые затрагиваются к книге. После введения о описания инструментов, которые понадобятся для того, чтобы проникнуть в кищащие дебри Windows, рассказывается о том, как условно можно поделить Windows на части, из каких подсистем состоит эта операционная система, как происходит абстракция от железа, насколько это возможно. После этого описывается, как Windows взаимодействует с процессором в плане обработки прерываний, как работает системный таймер, как устроены внутри такие объекты синхронизации такие как события, семафоры, мьютексы. Вот вы, например, знали, что мьютексы на уровне ядра называются мутантами?

Один из наиболее интересных на мой взгляд разделов посвящен Wow64 — той штуке, которая подменяет пути для 32-битных приложений на 64-битной системе и вообще обеспечивает обратную совместимость для старых 32-битных программ. В свое время, когда я впервые столкнулся с Wow64 (тогда еще не знал, как называется эта штуковина), она меня сильно удивила и озадачила из-за того, что 32-битные и 64-битные файловые менеджеры видят абсолютно разные пути в файловой системе. Читая эту книгу, вообще-то ужасаешься, сколько костылей приходится делать Microsoft для обеспечения обратной совместимости. Для пользователей это все замечательно, но программистам, наверное, не позавидуешь. К счастью, MS постепенно избавляется от груза старых систем. Наиболее заметный пример — отсутствие возможности запускать 16-битные приложения (написанные под DOS и Windows 3.1x) под 64-битными операционными системами.

Еще один раздел посвящен тому, как Windows запускает приложения или, говоря, более обще, запускает процессы. Эта глава может быть полезна и прикладным программистам, поскольку очень дотошно рассматривается процесс поиска файла с нужным приложением по всем специальным папкам, а также загрузку dll-ок. До этого я не знал о такой вещи как .LOCAL-перенаправление, позволяющую загружать нужные dll-ки. Процитирую авторов книги:

Механизм .LOCAL-перенаправления позволяет приложениям перенаправлять все загрузки, связанные с указанным базовым именем DLL, независимо от того, был ли указан полный путь, на локальную копию DLL в каталоге приложения. Это делается либо путем создания копии DLL с таким же базовым именем, за которым следует расширение .local (например, MyLibrary.dll.local ), либо путем создания файловой папки с именем .local в каталоге приложения и помещения копии локальной DLL-библиотеки в эту папку (например, C:\Program Files\My App\.LOCAL\MyLibrary.dll ). DLL-библиотеки, загрузка которых перенаправлена с помощью механизма .LOCAL, обрабатываются точно так же, как и те, для которых использовался механизм перенаправления SxS. (См. следующий пункт списка.) Загрузчик принимает .LOCAL-перенаправление загрузки DLL-библиотек только когда исполняемый файл не имеет связанного с ним либо встроенного, либо внешнего манифеста.

Еще один любопытный раздел посвящен тому, как работает гипервизор Hyper-V. Довольно подробно рассматривается работа реестра, рассказывается почему он состоит из разных файлов, разбросанных по файловой системе, как обеспечивается его защита от сбоев и восстановление после них.

Одна из наиболее интересных глав посвящена процессам и потокам. Для меня самым интересным там было описание вытесняющей многозадачности, как Windows выбирает, какой поток должен выполняться следующим.

Еще одна большая глава посвящена безопасности операционной системы. И последняя глава посвящена сети. В ней рассказывается про работу RPC, сокетов, именованных каналов и почтовых слотов. Рассказывается про службу «Автономные файлы» и о том, как работает кэширование в этой службе. Да и вообще эта глава дает понять, что может Windows 7 делать в сети, поддержка каких протоколов существует.

Последние две главы будут полезны администраторам, в них не рассказывается подробно, что и как делать для установки различных ограничений для пользователей, но по крайней мере позволяет узнать, что Windows предоставляет, и как это работает.

Если подводить итоги выше сказанного, стоит ли читать эту книгу — вопрос сложный. То есть понятно, что от прочтения любой книги есть польза, но не факт, что прочитав ее вы сразу же начнете использовать новые полученные знания, хотя что-то полезное примите к сведению. Наиболее полезна эта книга будет для тех, кто пишет драйвера устройств и системным администраторам больших корпоративных сетей. Насколько полезно — тоже сложный вопрос, поскольку я не являюсь ни тем, ни другим. Как я уже говорил, книга в первую очередь описывает глубокие внутренности Windows, программисты обычно работают на более высоком уровне абстракций.

Книга довольно тяжелая, во всех смыслах этого слова. 🙂 Тут у меня есть еще претензии к редакторам. Мало того, что книгу трудно читать из-за обилия различных сокращений (тут уж никуда не деться), да еще и многие фразы в тексте построены таким образом, что позавидует сам Лев Толстой, некоторые предложения приходилось перечитывать по несколько раз, разбирая в уме слои деепричастных оборотов. Встречаются опечатки и пару раз неправильные картинки. Хотя это, наверное, неизбежно для такой толстой книги.

В общем, покупать книгу или нет — решайте сами, ее можно найти без проблем в электронном виде, скачать и посмотреть, подходит ли она вам.

Но это только первая часть «Внутреннего устройства Windows». Интересно, когда выйдет вторая.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 1, средняя оценка: 5,00)
Загрузка...

Leave a comment

Subscribe without commenting