РЕФЛЕКСИИ

Программисты-ветераны утверждают, что несмотря на колоссальные достижения в микроэлектронике, в кремнии, который в просторечье зовется “железом”, в области ПО движение мало заметно. Возможно, поэтому мне было очень интересно прочитать вышедшее недавно четвертое издание книги Уильяма Сталлингса “Операционные системы. Принципы организации и конструирования” (William Stallings. Operating Systems. Internal and Design Principles. Prentice Hall, New Jersey, 2000. - 780 pp.), посвященной изложению концепций, структуры и механизмов современных ОС (Windows 2000 и Unix, включая Solaris и Linux).

Понятно, что выбор автором сделан из-за массовости этих ОС, хотя мне были бы более интересны Inferno и Mac 10. Насколько я знаю, этот замечательный труд сейчас переводят на русский язык в издательстве “Вильямс”, поэтому заранее советую обратить на него внимание. Дело в том, что в потоке всяческих руководств, захлестнувшем книжные прилавки, очень мало книг, объясняющих не где какую кнопку нажать, а как это сделано и как оно работает. Как известно, “знание общих принципов зачастую избавляет от необходимости знать детали”.

Свое знакомство с ОС я начинал в 1975 г. с разбора по дампу операционной системы ДОС АСВТ. Заняло это больше месяца, но многому научило (нынешним программистам прочитать по дампу Windows 98, например, не удастся). Написанная на Ассемблере очень элегантная ДОС АСВТ происходила от DOS ICL Spectra 70. Потом лицензию на машину Spectra 70 приобрела корпорация Siemens для своей Siemens 4004, а уж потом я с ней столкнулся на одной из лучших машин в СССР - М-4030, разработанной ИНЭУМом и выпускавшейся в 70-х годах Минприбором. Написал эту ОС Курт Веллер, о котором в те времена рассказывали всяческие легенды. Но кто теперь помнит Курта Веллера?

Есть две проблемы при знакомстве с конкретной ОС, главная из которых - необходимость знать структуру ее системных таблиц. Таблицы ДОС АСВТ были честно описаны в документации. Можно сказать, что таблицы в значительной мере определяют качество ОС. Глядя на структуру таблиц, можно оценить, насколько удачно спроектирована система, насколько она масштабируема, переносима и т. д. Например, таблицы ОС ЕС (OS IBM) поражали своей непродуманностью: в каждой новой версии этой системы они беспрерывно изменялись и было видно, какого труда стоит разработчикам решение проблемы совместимости, часто за счет разбухания кода ядра и ухудшения отношения времени работы ОС к времени работы приложения. В некоторых ОС это соотношение доходит до 50:50, т. е. половина времени тратится ОС на свои нужды, такие, как диспетчеризация задач, ввод-вывод, работа с экраном и др. Оценить характеристики Windows с этой стороны довольно непросто. Правда, совсем недавно вышла книга “Внутреннее устройство Microsoft Windows”, выпущенная, судя по выходным данным, совместно издательствами “Питер” и “Русская Редакция”. Книга более чем интересная, но трудная для чтения. Следуя какой-то внутренней американской традиции (терминология, используемая Digital, IBM, Apple Computers, SGI, сильно различается), Microsoft также ввела собственную терминологию, и некоторое время тратится на то, чтобы понять, что у них как называется. В книге приведена структура некоторых системных таблиц, однако пока она не прочитана, рано делать выводы. Отмечу как большое достоинство издания, что к нему прилагается компакт-диск, содержащий полный английский текст оригинала книги и ряд утилит для изучения ядра ОС.

Вторая трудность, с которой сталкиваются системные программисты, - отсутствие полных описаний архитектуры машины и процессора. Разбирая ДОС АСВТ по дампу, я совершенно не понял, что происходит в первый момент обработки прерывания, - в процедуре обработки не было команд сохранения контекста. К моему глубокому удивлению, у М-4030 оказался не один набор общих регистров, а четыре. В документации объяснения этому я не обнаружил, хорошо, что Александр Гиглавый намекнул мне тогда на генеалогическое древо данной машины. При возникновении прерывания в ее процессоре автоматически происходило переключение на нужный банк регистров и на этом экономилось до 40% времени обработки прерывания. Вообще говоря, кроме автора ОС, никому из программистов эта деталь архитектуры не видна (!).

Заметим, что в современных процессорах, где степень интеграции может достигать уже сотен миллионов вентилей, наверняка можно обнаружить массу забавных и не очень забавных недокументированных возможностей. Поэтому страна, претендующая на лидерство, должна использовать в военных и специальных приложениях процессоры собственной разработки, гарантированные от наличия в них анализаторов смеси исполняемых команд, систем утечки данных и схем блокирования работы процессора. (Примером может служить Китай, выпускающий свой 32-разрядный процессор.) В Интернете проходили сообщения, что в момент начала операции “Буря в пустыне” на закупленных Ираком французских истребителях “Мираж” отказала авионика. Если это соответствует действительности, то лучшего аргумента в пользу вышесказанного не придумаешь.

Вторым чудом архитектуры компьютера часто является так называемая затеняемая память. Ее можно путем записи некоторого значения в порт либо сделать доступной для процессора, либо снова спрятать. В момент переключения возможна аппаратная передача управления на некий хитрый адрес, обнаружить который по дампу также нельзя. Эта схема использовалась мною в мониторе ПК “Истра-4816” (см. www.computer-museum-ru). Сделано это было не для защиты ПО, а из-за архитектурных особенностей машины.

Конечно, фундаментальные концепции в программировании мало изменились. К традиционному курсу проектирования ОС, который я изучал четверть века назад, добавились два больших раздела: распределенные системы и безопасность. Первый из них подразумевает также изучение сетевых протоколов, прежде всего TCP/IP, и методов построения кластеров. На самом деле, как мне представляется, над некоторым доставшимся от машин третьего поколения базисом, реализованным на уровне архитектуры системы команд процессора, в настоящий момент наворочено с три короба программных слоев, делающих всю структуру плохо обозримой, слабо защищенной и неэффективной, а главное - в такой ситуации совершенно отсутствует перспектива. Поэтому сейчас все больше делается попыток создать новые компьютерные архитектуры. Но это уже другой разговор.

Версия для печати