софтComputer Review#7(38)

Том Р. Хафхилл (Tom R. Halfhill)

Компьютеры, которые не ломаются

 Почему ПК сегодня являются наиболее нестабильными в работе компьютерами из когда-либо созданных - и как вы можете сделать их более надежными.

 Мужчины произошли от Марса, женщины - от Венеры, компьютеры - от дьявола.

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

 «Когда происходит сбой в мэйнфрейме, вы не можете просто перезагрузить систему и продолжить работу. - говорит Стефен Рокфорд (Stephen Rochford), разработчик финансовых программных продуктов из Колорадо. - Вам требуется точно установить, почему система вышла из строя, сформулировать проблему и ее решение. Большинство пользователей ПК не озадачиваются настолько серьезно - они просто нажимают на кнопку перезагрузки.»

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

 Что касается самозащиты: Производители идут по пути борьбы за выгодную стоимость технической поддержки, тогда как альтернативные варианты типа сетевых компьютеров заставляют производителей больше задумываться о скрытых затратах на содержание ПК.

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

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

 Однако, радоваться пока рано - подобные изменения идут медленно, а ПК будут оставаться наименее надежными компьютерами еще долгие годы.

 Почему ПК виснут

 Прежде чем оценивать технические причины, по которым происходят сбои в системе ПК, полезно проанализировать психологию персонального компьютера - самую главную причину своего нестабильного поведения. Парадоксально, но факт: ПК по своему происхождению не могут быть хорошими.

 «Концепция персонального компьютера исходит из серии компромиссов, необходимо влекущих за собой более частные сбои, - заявляет Брайан Кролл (Bryan Croll), директор по маркетингу продукта Solaris компании Sun Microsystems. - Первые ПК проектировались так, что кибернетики хватались за голову, но идея при создании ПК была в том, чтобы компьютер был наиболее удобным и компактным. Профессия проектировщика подразумевает постоянный поиск компромиссов.»

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

 Например, чтобы выжать максимум производительности из медленных процессоров и небольшого количества оперативной памяти, ранние ПК запускали операционную систему, приложения и драйверы в общем адресном пространстве основной памяти. Любая ошибка в любом из компонентов обычно приводила к сбою всей системы. Однако, у разработчиков не было альтернативы, потому что первые процессоры не поддерживали концепцию защищенного режима памяти или режима «ядра» для изоляции операционной системы от запуска программ в пользовательском режиме. Все приложения работали в едином незащищенном адресном пространстве, поэтому одна ошибка вела за собой другую, и система прекращала нормальное функционирование.

 Вместе с тем, первые ПК были довольно устойчивы к зависаниям из-за примитивности их устройства. В 70-х и начале 80-х годов сбои в работе систем были не столь распространены, как в настоящее время. Этот факт не подтвержден документально, но очень многие из работавших тогда на ПК людей говорят, что это так. Основные проблемы начались у ПК по мере того, как они становились все более сложными.

 Заметьте, насколько громадными темпами растет размер исходных кодов операционных систем в современных ПК. Начальная версия Windows NT, появившаяся в 1992 году, состояла из 4 миллионов строк исходного кода - в то время считалось, что это довольно много. Windows NT 4.0, вышедшая в 1996 году, включала до 16,5 миллионов строк кода, а NT 5.0 1998 года будет содержать примерно от 27 до 30 миллионов строк. Почти 700% роста за шесть лет.

 «Люди, занимающиеся созданием надежных компьютерных систем, не делают в них частых радикальных изменений. - говорит Брайан Кролл (размер кода ОС Solaris держится на уровне 7-8 миллионов строк). - ПК, как правило, насыщены «сырым», не до конца протестированным кодом. Слишком большое количество строк кода повышает вероятность появления ошибок. Всем известно, что нельзя написать код, который бы совсем не имел ошибок.»

 С этой точкой зрения согласны создатели и пользователи мэйнфреймов и высоконадежных встраиваемых систем. «Иметь дело с 15 миллионами строк кода не так уж плохо, но гораздо хуже иметь 15 миллионов строк нового кода,» - отмечает Вэйман Томас, руководитель отделения мэйнфреймов компании Candle, занимающейся производством мониторов и программного обеспечения для крупных серверов и мэйнфреймов.

 Однако, по мнению Раса Мэдленера (Russ Madlener), менеджера по настольным ОС компании Microsoft, увеличение кода не ведет к непредсказуемым последствиям, если разработчики одновременно увеличивают затраты на тестирование. В группе, занимающейся выпуском Windows NT, на каждого программиста приходится по два тестера. «Я не могу сказать, что количество ошибок растет пропорционально коду,» - добавляет он.

 Надо отдать должное, что NT более устойчива к выходу из строя по сравнению с Windows 95. В свою очередь обе Windows имеют меньше проблем, чем Mac OS. NT имеет более надежную систему защиты памяти и основана на современном ядре, тогда как Windows 95 имеет упрощенную систему защиты памяти и слеплена из кусочков MS-DOS и Windows 3.1. Mac OS практически не имеет защиты памяти и поддерживает совместную многозадачность в едином адресном пространстве - наследние от своего «прародителя» начала 80-х годов.

 Будет интересно понаблюдать за тем, останется ли NT на нынешнем уровне стабильности по мере добавления к ней новых возможностей. Все хотят видеть современную ОС с большим количеством дополнительных свойств. Разработчикам программного обеспечения нужна база для того, чтобы создавать и продавать новые версии и продукты с новыми возможностями. Производители чипсетов и плат хотят создавать более быстрые компьютеры. Компьютерным журналам нужна информация для освещения. Пользователям кажется, что им нужно все больше разных «штучек», даже если они ими не будут пользоваться впоследствии. «Промышленность ПК становится похожа на полигон по бета-тестированию, - удивляется Павел Бойкавский, студент Амстердамского Университета, сталкивающегося в бесконечной чередой зависаний, переустановок программ и новых проблем. - Как насчет создания стабильных компьютеров по «старинке»? Или я упустил тенденцию к повальному росту количества мазохистов, получающим удовольствие от самоистязания.» Хотя существует множество причин, по которым происходят сбои ПК, все их можно свести к двум основным тенденциям: постоянное усложнение систем, которому не видно конца в обозримом будущем, и слабый акцент на надежность ПК. Попытки продавать более простые компьютеры (типа сетевых компьютеров) или урезанные приложения (типа Microsoft Write) часто встречают сопротивление со стороны пользователей, считающих такие товары недостаточно хорошими.

 «Если вы пользуетесь Microsoft Word, и система зависает, вы теряете какую-то часть своей работы, но не теряете своих денег - вообщем, от этого еще никто не умер, - комментирует Брайан Кролл. - Это стоящий компромисс.»

 Причины сбоев

 Технические причины выхода компьютера из рабочего состояния можно разделить на две категории: аппаратные и программные.

 Проблемы с «железом» ПК встречаются не слишком часто, но их нельзя не учитывать. Недавнее резкое снижение цен на компьютеры говорят о том, что производители пошли на дополнительные компромиссы. Недорогие ПК не обязательно являются дешевыми поделками, но такое иногда случается.

 Другая причина сбоев в системе вплоть до полного отказа от работы лежит за рамками данной статьи. Речь идет о вирусах разных типов, программах «Троянского коня» и т.п., которые хорошо изучены и описаны, но продолжают причинять массу неприятностей пользователям. Наконец, существуют проблемы, не связанные ни с программными, ни с аппаратными решениями. Одна из служб технической поддержки, проанализировав 10 тысяч звонков пользователей, обращающихся за помощью, выяснила, что ежемесячно поступает по 10 звонков от пользователей, в процессе общения с которыми обнаруживается, что причиной «выхода их компьютера из строя» является пропажа модулей оперативной памяти (видимо, позаимствованных соседними служащими).

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

 В этом случае единственным выходом является перезагрузка компьютера, не оставляющая шансов на восстановление несохраненной работы. А поскольку ни ОС, ни приложения не имеют возможности корректно завершить работу - закрыть открытые файлы, уничтожить временные файлы, сбросить выходные буферы на диск и т.д. - внезапная перезагрузка оставляет на винчестере ненужные следы, приводящие впоследствии к дальнейшей нестабильности, частым сбоям и потере данным.

 Почему происходят сбои в программах? Две из них: Возникает ситуация, которую не предвидели разработчики, и программа не может корректно на нее среагировать; или программа готова отреагировать на ситуацию, но делает это неадекватно.

 В идеале, каждая программа должна быть готова обработать любую возможную ситуацию или, по крайней мере, вызвать другую программу, которая сможет ее обработать, типа ОС. В действительности, программисты не могут учесть всех возможных ситуаций. Иногда они намеренно игнорируют условия, вероятность возникновения которых мала - в угоду более короткому, более быстрому коду или сдачи программы в срок. В таком случае, все проблемы перекладываются на ОС. «На уровне ОС вы должны предвидеть непредвиденное, - говорит Гуру Рао (Guru Rao), главный инженер мэйнфрейма System/390 компании IBM. - как ни глупо это звучит.»

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

 BYTE Magazine, Апрель 1998. Переведено и напечатано с разрешения The McGraw-Hill Companies, Inc., New York, NY, USA. Все права защищены.

 Продолжение следует. Перевод И.Зельберг


софтComputer Review#7(38)

Copyright © 1998 "Компьютерное обозрение"
Дизайн - leidenwebdesign - http://leiden.irkutsk.ru