Операционные системы - статьи

         

Переход к Windows 2000 - ПОВРЕМЕНИТЬ ИЛИ ПОТОРОПИТЬСЯ?


Журнал , #02/2000

Шон Дьюби

10 аргументов "за" и 10 "против"

Переход на новую операционную систему требует предварительного планирования, как стратегического, так и тактического. А для того, чтобы составить стратегический план модернизации существующей сети Windows NT до уровня Windows 2000, необходимо четко понимать, в чем состоят сильные и слабые стороны новой операционной системы. Неоднократные переносы даты ее выпуска (на сегодня Windows 2000 побила все рекорды Microsoft по числу отсрочек) тем не менее не дают достаточных оснований откладывать модернизацию в долгий ящик. В конце концов, выход продукта откладывали затем, чтобы внести в него дополнительные усовершенствования, и хочется верить, что операционная система от этого только выиграла.

В данной статье я рассматриваю проблему с точки зрения стратегических факторов. Итак, вниманию читателей предлагаются 10 аргументов в пользу перехода на Windows 2000, 10 аргументов против, а также соображения относительно того, сколь долго стоит ждать.



с Windows 9x, подумайте, не


Еще одно предостережение: если у вас есть работоспособная и сравнительно стабильная машина с Windows 9x, подумайте, не лучше ли оставить все как есть. Вы сэкономите сумму, которую потратили бы на модернизацию, а кроме того, гарантируете максимальную совместимость как с новейшим, так и с самым что ни на есть устарелым аппаратным и программным обеспечением. В любом случае Microsoft заявляет, что Windows 2000 лучше всего подходит для бизнеса, а не для использования дома. Владельцам домашних компьютеров корпорация планирует позже (но в течение 2000 г.) предложить усовершенствованную версию Windows 98, которая сейчас носит кодовое название Millennium. Она должна обеспечивать почти универсальную аппаратную и программную совместимость Windows 98, простой переход с существующих версий Windows и улучшенную поддержку цифровой аудио- и видеотехники.

И все же некоторые пользователи, работающие с Windows 2000 в офисе, возможно, пожелают взять ее также домой. Почему бы и нет? Многие особенности системы - скажем, закованная в стальные латы многопользовательская защита и надежная, как скала, стабильность - идеальны для домашних офисов, а в Millennium их может не оказаться.

Если вы сейчас работаете с Windows NT 4.0, модернизация по большей части не составит труда. Windows 2000, будучи прямым потомком NT, обладает всеми ее достоинствами, а многие из самых вопиющих ее ограничений при этом снимает. В Windows 2000 появилась поддержка шины USB, PC-карт, шины AGP и DVD-устройств, а также технологии Plug&Play, которой славится Windows 98, - автоматического распознавания и установки устройств.

На тестовых машинах, имевших как 64, так и 128 Мбайт оперативной памяти, Windows 2000 продемонстрировала в целом чуть более высокое быстродействие, чем Windows 98 и NT 4.0. А пользователей портативных компьютеров наверняка порадует поддержка управления электропитанием для интерфейса ACPI.

Но Windows 2000, в отличие от "совместимой со сбоями" Windows 98, не отступает от правил и не пытается наладить контакт с некорректно работающей программой или устройством (например, с программой, которая обращается к аппаратуре непосредственно, а не через драйвер). Это отчасти добрая весть: в результате система стала более стабильной. Однако многие программы, как-то барахтавшиеся в более либеральной Windows 98, к сожалению, не смогут делать этого в Windows 2000.


Переменные


Одной из наиболее полезных особенностей SMS Installer является возможность автоматического использования переменных для обозначения типовых каталогов. Например, в процессе создания установочного пакета для компьютера с операционной системой Windows 9x, файлы которой размещены в каталоге C:\Windows\ System, SMS Installer заменит все ссылки на эту папку переменной SYS. Установщик достаточно "интеллектуален" - если установить данный пакет на компьютер с операционной системой Windows NT, файлы будут скопированы туда, куда нужно - в каталог \Winnt\System32. Точно так же установочный пакет может помещать значки в профиль занимающегося установкой пользователя, а не копировать их в какой-то общий каталог.

Те, кто разбирается в вопросах редактирования реестра, могут с помощью этой методики сделать свои пакеты более надежными. Предположим, требуется установить встраиваемую библиотеку для пользователей Microsoft Internet Explorer (IE). Конечно, мастер способен создать установочный пакет, который скопирует библиотеку в каталог Program Files\ Internet Explorer\Plugins. Этот пакет будет работать в большинстве случаев, однако если IE установлен, например, в каталоге D:\IE4 или C:\Program Files\Plus!\Microsoft Internet, то запустить пакет не удастся.

ЭКРАН 2. Определение месторасположения Internet Explorer.

Чтобы DLL случайно не был установлен не в тот каталог, можно, как показано на Экране 2, выяснить имя каталога IE с помощью команды Get Registry Key Value, которая скопирует его из соответствующего ключа реестра в заданную переменную.



ЭКРАН 3. Задание пути для копирования файлов с помощью переменной IEPATH.

Имя этой переменной, например IEPATH, можно использовать в ходе установки файлов (см. Экран 3). Путь к каталогу IE указан в одном из параметров раздела реестра HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\IE Setup\Setup (см. Экран 2). Скопировав значение этого параметра в переменную IEPATH, можно воспользоваться командой копирования файла библиотеки в каталог %IEPATH%\ Plugins. Такой подход гарантирует, что установочный пакет будет работать у всех пользователей независимо от того, где на их компьютерах установлен Internet Explorer.

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



Перенос каталога /boot в DOS-раздел


Последние версии ядра Linux поддерживают возможность размещения файлов, необходимых на этапе загрузки, в файловой системе MS-DOS (или UMSDOS). Поскольку в большинстве случаев разделы DOS занимают как раз те области диска, где связанные с BIOS ограничения не действуют, это позволяет решить многие проблемы больших дисков, возникающие в тех случаях, когда раздел, отведенный для Linux, не может быть использован для размещения в нем каталога /boot.

Для того, чтобы реализовать такой вариант загрузки, DOS-раздел монтируется в режиме чтение/запись, создается каталог (например, /dos/linux), в который перемещаются все файлы из каталога /boot и образы ядер Linux, каталог /boot заменяется символической ссылкой на каталог /dos/linux, новое местоположение каталога /boot указывается в файле /etc/lilo.conf, и, наконец, запускается /sbin/lilo.



Переписанные или разрушенные файлы


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

Для восстановления поврежденных или некорректных файлов на томах NTFS вы можете использовать либо параллельно установленную систему NT, либо процедуру восстановления программы установки. Для восстановления на томах FAT можно воспользоваться загрузочными дисками от DOS или Windows 9x.

Заменить файл, воспользовавшись параллельной установкой системы, очень просто, если только вы точно знаете, какой из файлов разрушен или некорректен. В качестве меры предосторожности создайте каталог на жестком диске, который послужит местом хранения файлов для установки системы NT. Можно использовать для этого и CD-ROM. В этом каталоге должны находиться копии файлов ядра NT для той версии сервисного пакета, который вы установили в системе. Если вы развернули параллельную систему с тем же сервисным пакетом, что и для первой системы, то вы можете использовать каталог второй системы как каталог для установки. Если это не так, то создайте в параллельной системе отдельный каталог с файлами первичной установки системы NT самой последний версии.

Чтобы процесс восстановления мог заменить поврежденные или конфликтующие файлы, выберите опцию Verify Windows NT System Files из списка, выводимого программой установки. Microsoft реализовала эту функцию, чтобы можно было быстро найти файлы, отличные от первоначальных установочных файлов NT.
Однако после установки на систему сервисного пакета слишком много файлов будут отличаться от первоначальных, поскольку они были модифицированы. В данном случае лучше всего выбрать вариант "А", чтобы позволить программе установки заменить все неоригинальные файлы и затем, после восстановления системы и ее запуска, повторить установку сервисного пакета.

Иначе вы можете заменить системные файлы NT их первоначальными версиями, используя параметр модернизации Upgrade в программе установки. И хотя некоторые пользователи обходят описанный выше процесс восстановления и сразу приступают к модернизации, нам этот метод решения кажется неудачным по нескольким причинам. Во-первых, процесс модернизации обычно занимает намного больше времени, чем процесс восстановления. Во-вторых, он более запутан и связан с большим риском для вашей системы. И наконец, даже если процесс установки успешно разрешил ваши первоначальные проблемы, он может вызвать появление голубого экрана с ошибкой, вызванной драйвером tcpip.sys (STOP error 0x00000050). При установке NT 4.0 или NT 4.0 SP1 поверх NT4.0 SP2 или более поздней программа установки не заменяет драйвер tcpip.sys из SP2 или более поздний его ранней версией. Соответственно - этот драйвер вызывает сбой в NT 4.0 или NT 4.0 SP1. Чтобы избежать такой ситуации, нужно вначале использовать процедуру Verify Window NT System Files для замены существующих файлов их первоначальными версиями. Тогда, если процедура восстановления не привела к нормальной загрузке системы, вы сможете спокойно запускать процедуру модернизации, поскольку файл tcpip.sys SP2 или поздней версии уже был заменен первоначальным.


Перспективы


Несмотря на все недостатки, Corel LINUX - прекрасная система. Мощная, достаточно удобная и очень даже неплохо сделанная. Если корпорация Corel быстро доведет свою систему до кондиции, "подчистив" код, то Corel LINUX будет пользоваться такой же популярностью, как и Windows.

В начале 2000 г. появится офисный пакет Corel's Office Suite for Linux, в который войдут текстовый процессор WordPerfect 9, электронная таблица Quattro Pro 9 и программа создания презентаций Corel Presentations 9. Для полного удовольствия пользователей довольно скоро на рынке появятся пакет векторной графики CorelDRAW 9, художественная система Corel PHOTO-PAINT 9 и программа компьютерной верстки Corel VENTURA.

При умной политике продаж и поддержки Corel может отхватить здоровенный кусок рынка операционных систем. Вопреки мрачным прогнозам, рынок Microsoft не будет подорван на корню. Да, может произойти определенный отток потенциальных покупателей. Однако следует помнить, что многие пользователи рады будут установить не одну, а сразу две ОС на свой компьютер.

Вот где действительно может развернуться конфликт, так это между Corel и немецкой компанией SuSE. Последняя, безусловно, лидирует по продажам Linux корпоративным заказчикам и, разумеется, предлагает великолепную поддержку. SuSE - не новичок, тем не менее ее дистрибутив Linux не может похвастаться такой легкой установкой и столь удобной настройкой, какие мы видим в Corel LINUX. К тому же Corel предлагает аналогичную SuSE 30-дневную техническую поддержку установки по электронной почте. Следовательно, SuSE придется весьма энергично поработать для того, чтобы защитить свой сектор рынка. Как бы то ни было, если среди производителей начинается конкуренция, пользователю живется намного лучше.

Чем отличается стратегия Corel от действий других компаний, выпускающих коммерческие и бесплатные версии Linux? Тем, что Corel не пытается заставить пользователей переучиться на работу в UNIX-среде, тем более под лозунгом "Мы делаем это для вашей же пользы!". Специалисты создают такую UNIX-среду, работая в которой обычный адепт Windows не напрягается, силясь научиться заклинаниям shell-скриптов, а просто садится за дисплей и начинает делать что-то полезное.



в 219 долл. превышает ту,


-Сумма в 219 долл. превышает ту, которую вы были бы готовы заплатить за усовершенствованный вариант Windows 95 или 98 (пользователи NT 4.0 платят только 149 долл., а удовольствия получают больше).

-У вашего ПК меньше 64 Мбайт памяти или слишком медленный процессор (необходим быстрый Pentium).

-Windows 2000 не поддерживает определенные ключевые программы или устройства, с которыми вы сейчас работаете на своей машине.

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

-Изготовитель вашего ПК не обеспечивает необходимую для установки Windows 2000 модернизацию BIOS.



у вас слишком часто происходят


+Под управлением Windows 9x у вас слишком часто происходят сбои, замедления работы и необъяснимые конфликты.

+Вам нужна более надежная защита на входе в систему и при доступе к файлам, чем имеющаяся в Windows 9x.

+Вы намучились с Windows NT 4.0 на портативном ПК.

+Вы работаете с NT 4.0 или Windows 95 на настольном компьютере с DVD-, USB- или другими устройствами, которые эти операционные системы не поддерживают или поддерживают плохо.

+У вас самая ранняя версия Windows 95 (без поддержки USB и без FAT32), и вы подумываете о переходе на Windows 98, но хотели бы получить больше возможностей.


Плата за грехи: переименование, перемещение или удаление файлов


Рассмотрим некоторые способы предотвращения ошибок, связанных с неправильной загрузкой службы или драйвера. Один из них - это переименование, перемещение или удаление соответствующего данной службе файла для предотвращения ее загрузки. Если известно имя файла, вызывающего такого рода ошибку, следует загрузиться в режим DOS, если тип основной файловой системы FAT, или в параллельную NT систему, если это NTFS. Далее необходимо временно переименовать исходный файл. В большинстве случаев этот способ устраняет сообщение об ошибке, но в установках NT остаются ссылки на несуществующий файл. Если идти таким путем, дальше потребуется переустановить службу или драйвер, или же полностью удалить их из системы при условии, конечно, что система NT загрузилась. Метод переименования не работает и может вызвать проблемы в случае наличия зависимых друг от друга служб или драйверов, как было продемонстрировано в предыдущем примере с программой удаленного управления.



Почему GNU будет совместима с Unix


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



Почему именно Performance Monitor?


Performance Monitor - отличный инструмент для оценки производительности NT Workstation или NT Server. О том, как работать с ним в целях сбора информации о компьютере, можно узнать из документации Microsoft и специальной литературы. Однако я хочу обратить внимание на средства Performance Monitor, позволяющие оценивать производительность приложений. Особенно полезными мне представляются два его объекта: Process и Memory. Объект Process собирает информацию обо всех работающих процессах, будь то системные процессы, пользовательские процессы или службы Windows NT. Объект Memory собирает данные, описывающие компоненты подсистемы управления памятью Windows NT, включая файловый кэш, физическую память, а также несколько выгружаемых и невыгружаемых пулов памяти, которые Windows NT использует для системных процессов.

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

Такие проблемы, как "пробуксовка" диска, зачастую являются симптомами некорректной работы самих приложений. Хотя интенсивный рост файла подкачки отчасти можно увязывать с медленной дисковой подсистемой или чрезмерно фрагментированным диском, в первую очередь следует выяснить первопричину этого явления. В приведены объекты и счетчики, которые позволяют следить за работой приложения, и здесь же кратко описано их назначение. Если на основании показателей этих счетчиков создать файл рабочей области Performance Monitor (.pmw), то всегда можно быстро загрузить его для осуществления контроля за работой приложения. Однако следует помнить, что файлы рабочих областей содержат имя рабочей станции или сервера, на которых они были созданы. Поэтому после загрузки таких файлов на другом компьютере это имя необходимо скорректировать.



Почему я должен написать GNU


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

Чтобы я мог использовать компьютеры с чистой совестью, я решил собрать вместе достаточное количество свободных программных продуктов, с тем, чтобы я мог обходится без какого-либо несвободного программного продукта. Я ушел из Лаборатории ИИ, чтобы иметь возможность отказать МТИ на любых законных основаниях помешать мне раздавать GNU.



Почему многие программисты хотят помочь


Я встретил много программистов, которые заинтересовались GNU и захотели помочь.

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

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



Почему у систем случаются отказы?


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

Тесно связанный вопрос относится к первопричине аварийных отказов. Ведь если бы каждый модуль был безупречным, то не возникала бы потребность в изоляции сбоев между модулями, поскольку не было бы самих сбоев. Мы утверждаем, что большая часть сбоев возникает из-за ошибок программирования, вследствие чрезмерной сложности и использования чужого кода. Исследования показывают, что в программном обеспечении в среднем содержится от одной до шестнадцати ошибок на тысячу строк кода [27, 22, 2], и что верхняя граница этого диапазона явно занижена, поскольку учитывались только те ошибки, которые, в конце концов, удавалось обнаружить. Очевидным заключением является то, что в большем объеме кода содержится большее число ошибок. По мере развития программного обеспечения в каждой его новой версии появляется все больше возможностей (и, соответственно, больший объем кода), и часто новая версия является менее надежной, чем предыдущая. В [22] показано, что число ошибок на тысячу строк кода стремится к стабилизации по мере роста числа выпущенных версий, но асимптотически этот показатель отличается от нуля.

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

Вторая проблема состоит в привнесении в операционную систему чужого кода. Наиболее искушенные пользователи никогда бы не позволили сторонней организации вставить незнакомый код в ядро операционной системы, хотя, когда они покупают новое периферийное устройство и инсталлируют соответствующий драйвер, они именно это и делают. Драйверы устройств обычно пишутся программистами, работающими на изготовителей периферийных устройств, и контроль качества их продукции обычно ниже, чем у поставщиков операционных систем. В тех случаях, когда драйвер относится к open-source, его часто пишет благонамеренный, но не обязательно опытный доброволец, и контроль качества обеспечивается на еще более низком уровне. Например, в Linux частота появления ошибок в драйверах устройств от трех до семи раз выше, чем в других частях ядра [7]. Даже компания Microsoft, у которой имеются стимулы и ресурсы для применения более плотного контроля качества, не может добиться намного лучших результатов: 85% всех аварийных отказов Windows XP обуславливается наличием ошибок в коде драйверов.

В последнее время появились публикации о родственных работах, посвященных изоляции драйверов устройств с использованием аппаратуры MMU [26] и виртуальных машин [19]. Эти методы концентрируются на решении проблем в унаследованных операционных системах; мы обсудим их в разд. 6. В отличие от этого, при применении нашего подхода надежность достигается путем разработки новой облегченной операционной системы.


Почему Unix?


Unix используется как в качестве как сервера, так и рабочей станции.

В номинации серверов с ним конкурируют MS WindowsNT, Novell Netware,

IBM OS/2 Warp Connect, DEC VMS и операционные системы мэйнфреймов.

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

WindowsNT - для администраторов, которые предпочитают удобный интерфейс

экономному расходованию ресурсов и высокой производительности.

Netware - для сетей, где нужна высокая производительность файлового и

принтерного сервиса и не столь важны остальные сервисы. Главный недостаток -

на сервере Netware трудно запускать приложения.

OS/2 хороша там, где нужен "легкий" сервер приложений. Ресурсов требует

меньше чем NT, в управлении гибче (хотя в настройке может и сложнее),

а многозадачность очень хорошая. Авторизация и разграничение прав доступа

не реализованы на уровне ОС, что с лихвой окупается реализацией на уровне

приложений-серверов. (Впрочем, зачастую остальные OS делают то же самое).

Многие станции FIDOnet и BBS сделаны на базе OS/2.

VMS - мощный, ничем не уступающий Unix'ам (а во многом и превосходящий

его) сервер приложений, но только для платформ VAX и Alpha фирмы DEC.

Мэйнфреймы - для обслуживания очень большого количества пользователей

(порядка нескольких тысяч). Но работа этих пользователей как правило

организована в виде не клиент-серверного взаимодействия, а в виде

хост-терминального. Терминал же в этой паре скорее не клиент, а сервер

(Мир Internet, N3 за 1996-й год). К преимуществам мэйнфреймов надо отнести

более высокую защищенность и устойчивость к сбоям, а к недостаткам -

соответствующую этим качествам цену.

Unix хорош для квалифицированного (или желающего стать таковым) администратора,

т.к. требует знания принципов функционирования происходящих в нем процессов.

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

надежность функционирования системы, хотя в производительности файл- и

принт-сервисов Unix'ы уступают Netware.


Недостаточная гибкость предоставления прав доступа пользователей к файлам

по сравнению с WindowsNT затрудняет организацию _на_уровне_файловой_системы_

группового доступа к данным (точнее, к файлам), что на мой взгляд

компенсируется простотой реализации, а значит меньшими требованиями

к аппаратуре. Впрочем, такие приложения, как SQL-сервер решают проблему

группового доступа к данным своими силами, так что отсутствующая в Unix

возможность запретить доступ к _файлу_ конкретному пользователю на мой

взгляд является явно избыточной.

Практически все протоколы, на которых основан Internet, были разработаны

под Unix, в частности стек протоколов TCP/IP придуман в университете Berkeley.

Защищенность Unix при правильном администрировании (а когда это не так?)

ни в чем не уступает ни Novell, ни WindowsNT.

Важным свойством Unix, которое приближает его к мэйнфреймам, является

его многотерминальность, много пользователей могут одновременно запускать

программы на одной Unix-машине. Если не требуется использовать графику,

можно обойтись дешевыми текстовыми терминалами (специализированными или

на базе дешевых PC), подключенными по медленным линиям. В этом с ним

конкурирует только VMS. Можно использовать и графические X-терминалы, когда

на одном экране присутствуют окна процессов, выполняющихся на разных машинах.

В номинации рабочих станций с Unix конкурируют MS Windows*, IBM OS/2,

Macintosh и Acorn RISC-OS.

Windows - для тех, кто ценит совместимость больше эффективности; для тех, кто

готов купить большое количество памяти, дискового пространства и мегагерц;

для тех, кто любит не вникая в суть, щелкать мышкой по кнопочкам в окошке.

Правда, рано или поздно все равно придется изучить принципы работы системы

и протоколов, но тогда уже будет поздно - выбор сделан. Немаловажным

преимуществом Windows надо признать также возможность украсть кучу

программного обеспечения.

OS/2 - для любителей OS/2. :-) Хотя по некоторым сведениям OS/2

лучше других взаимодействует с мэйнфреймами и сетями IBM.

Macintosh - для графических, издательских и музыкальных работ,

а также для тех, кто любит понятный, красивый интерфейс и не хочет

(не может) разбираться в подробностях функционирования системы.

RISC-OS, прошитая в ПЗУ, позволяет не тратить время на инсталляцию

операционной системы и восстановление ее после сбоев. Кроме того,

практически все программы под ней очень экономно расходуют ресурсы,

благодаря чему не нуждаются в свопинге и работают очень быстро.

Unix функционирует как на PC, так и на мощных рабочих станциях

с RISC-процессорами, под Unix написаны действительно мощные САПР

и геоинформационные системы. Своей масштабируемостью Unix из-за его

многоплатформенности на порядок превосходит любую другую операционную

систему из известных мне.


Почему все пользователи компьютеров получат выгоду


Как только GNU будет написана, каждый сможет получить хороший свободный программный продукт так же свободно, как воздух.2

Это означает гораздо больше, чем просто экономию каждому стоимости лицензии на использование Unix. Это означает, что будет устранена большая часть расточительного дублирования усилий по системному программированию. Эти усилия смогут пойти вместо этого на продвижение технологии.

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

Учебные заведения смогут обеспечить более мощную образовательную среду, поощряя всех студентов изучать и улучшать системные коды. Гарвардская компьютерная лаборатория раньше проводила следующую политику: никакая программа не могла быть установлена в системе, если все ее исходные коды не были предоставлены на всеобщее обозрение; и это фактически поддерживалось отказом устанавливать определенные программы. Это меня очень вдохновило.

Наконец, будут ликвидированы расходы на рассмотрение того, кто владеет системным программным продуктом и что он вправе или не вправе делать с ним.

Соглашения о том, что люди должны платить за пользование программой, включая лицензирование копий, всегда влекут за собой громадные затраты для общества из-за громоздких механизмов, необходимых для подсчета того, сколько (то есть, за какие программы) должен платить человек. И только полицейское государство может заставить каждого подчиниться им. Рассмотрим космическую станцию, где производство воздуха должно стоить очень дорого: взимание с каждого живого существа платы за литр воздуха может быть справедливо, но ношение противогаза но счетчиком и день и ночь невыносимо, даже если каждый в состоянии заплатить по счету за воздух. А телевизионные камеры повсюду, чтобы следить, не снимаете ли вы противогаз, возмутительны. Лучше уж содержать завод по производству воздуха на средства от поголовного налога и сбросить противогазы.

Копирование всей или части программы присуще программисту как дыхание и также плодотворно. И оно должно быть столь же свободным.



Под лежачий камень...


Итак, в своих статьях я рассказал о передовых методах и полезных утилитах, которые имеет смысл применять в экстремальной ситуации, если вдруг система Window NT не загрузится. Что более важно, я описал превентивные меры, которые можно предпринять уже сейчас, дабы увеличить вероятность успешного восстановления системы при сбое и сэкономить время, которое придется потратить на решение возникших проблем. В документации компании Microsoft, как обычно, предлагается воспользоваться программой установки системы NT с параметром Repair или восстановить последнюю рабочую конфигурацию системы, выбрав вариант LastKnownGoodConfiguration при начальной загрузке. Но, к сожалению, эти меры недостаточно эффективны. По большому счету, если активно готовиться к возможным авариям, используя в том числе описанные в статье методы, подобной рекомендацией от Microsoft не придется воспользоваться никогда.



Поддержка задач управления предприятием


С самой первой версии операционная система Windows NT включала в себя встроенные средства мониторинга производительности и системных событий. Прикладные программы и сама система обычно выдают сообщения об ошибках и диагностические сообщения с помощью Event Manager. Встроенная в Windows NT утилита Event Viewer позволяет администраторам просматривать события, произошедшие как на локальном компьютере, так и на других машинах в сети. Подобным образом Performance API позволяет прикладным программам и подсистемам собирать статистику по производительности, которую администраторы затем могут просмотреть через Performance Monitor.

Хотя средства NT для сбора статистики о событиях в системе и производительности отвечают большинству требований, они все же имеют ряд ограничений. Например, интерфейсы программирования этих средств отличаются друг от друга, что увеличивает сложность прикладных программ сбора данных, контролирующих и события и производительность. Эффективность Performance API может быть низкой, особенно в сети, так как этот интерфейс может предоставить "все или ничего": у приложения нет возможности запросить информацию о производительности отдельных компонентов. Вероятно, самый существенный недостаток современных средств контроля состоит в том, что они имеют очень небольшую расширяемость, и ни одно не обеспечивает возможность двухстороннего взаимодействия с API управления, которое так необходимо. Обычно прикладные программы предоставляют данные в определенных форматах для регистрации событий или сбора других данных. Performance API не дает приложению никакой возможности для получения уведомлений о событиях, связанных с производительностью, и прикладные программы, которые запрашивают у Event Manager уведомления о событиях, не могут ограничить извещение отдельными типами событий или данных. Наконец, клиенты или средства сбора информации не имеют возможности связываться с источником событий или рабочих данных через Event Manager или Performance API. Создание интерфейса Windows Management Interface (WMI) - следующий шаг к реализации усовершенствованной поддержки управления средствами Windows.

WMI разработан специалистами Microsoft на


WMI разработан специалистами Microsoft на базе технологии управления предприятием через Web - Web-Based Enterprise Management (WBEM). WBEM - это стандарт, определенный консорциумом Distributed Management Task Force (DMTF). WBEM определяет структуру расширяемого набора данных о предприятии и возможности администрирования, необходимые для управления локальными и удаленными системами, включающими произвольные компоненты. Разработчики Microsoft реализовали WMI в Windows 98 и в Win95 OSR2, сделали его доступным для NT 4.0, начиная с Service Pack 4 (SP4), и, наконец, интегрировали в Windows 2000. Тем не менее в большей степени WMI предназначен для использования в Windows 2000. Так как независимые производители уже начали поставлять инструментальные средства управления, основанные на WMI, администраторы получат возможность удаленно управлять всеми компонентами своих систем (Windows 2000, NT или 9x). В этой статье мы заглянем внутрь WMI. То, что здесь будет рассказано о WMI, применимо ко всем платформам Windows, но при обсуждении подробностей выполнения я буду делать акцент на Windows 2000.


Подготовка к двойной загрузке


Прежде чем создавать систему с двойной загрузкой, необходимо определиться с разделами на диске и используемыми файловыми системами. Windows 2000 и Windows 98 поддерживают 16- и 32-разрядные версии файловой системы FAT, а NTFS 5.0 "понимает" только Windows 2000. Поэтому для организации двойной загрузки Windows 2000 и Windows 98 нужно создать по крайней мере один раздел в формате FAT16 или FAT32. Более того, если не использовать программные продукты независимых компаний, обеспечивающие дополнительные возможности переключения между разделами с различными файловыми системами (например, PartitionMagic компании PowerQuest), то диск C должен содержать раздел в формате FAT16 или FAT32. Это связано с тем, что диск C используется в процессе начальной загрузки обеих операционных систем.

Microsoft не поддерживает возможность размещения Windows 2000 и другой операционной системы на одном разделе, так как не все элементы ОС размещаются в единой иерархии каталогов. В обеих системах создаются каталоги для совместно используемых программ, а также для документов и параметров настройки. При установке Windows 2000 и Windows 98 на один и тот же раздел каждая из операционных систем будет пытаться разместить свои компоненты в одном и том же месте. При этом нельзя гарантировать, что аналогичные компоненты двух систем полностью совместимы друг с другом. (Дополнительную информацию о конфигурировании компьютеров с несколькими операционными системами см. в статье Шона Дейли "Безумие многовариантной загрузки", Windows 2000 Magazine/RE, октябрь 1999.)

В результате ряда экспериментов, когда я устанавливал каждую из систем на отдельном диске, мне удалось выявить некоторые интересные особенности. Напомню, что производительность Windows 2000 повышается, если страничный файл поместить на отдельный диск. У меня в системе на этом диске была также установлена Windows 98.

После того как разделы подготовлены, можно приступать к установке второй операционной системы. Если система с двойной загрузкой создается не с нуля, вначале необходимо сделать резервную копию файлов данных и убедиться, что в наличии имеются дискеты для восстановления системы. В принципе установка двойной загрузки - безопасная процедура, но в некоторых случаях она может привести к тому, что система не будет нормально загружаться. Если предполагается добавить Windows 98 к уже установленной Windows 2000 Professional, следует с помощью процедуры Windows 2000 Backup создать диск экстренного восстановления системы (Emergency Repair Disk, ERD), который позволит восстановить систему в случае повреждения реестра. Если же Windows 2000 Professional добавляется к Windows 98, нужно предварительно создать загрузочный диск Windows 98, используя значок установки/удаления программ (Add/Remove Programs) Панели управления (Control Panel).



Подготовка к инсталляции.


Устанавливать Linux можно одним из следующих способов:

с локального CD-ROM;

с жесткого диска, на который скопирован дистрибутив Linux;

с файл-сервера локальной сети по NFS;

с другого компьютера в локальной сети через SMB;

с удаленного компьютера (в том числе из Интернета) по протоколу FTP;

с одного из WWW-серверов Интернета по протоколу HTMP.

На мой взгляд, наиболее удобен и практичен вариант установки Linux с CD-ROM, тем более, что купить нужный компакт-диск теперь не проблема.

Прежде чем приступить к инсталляции, соберите (запишите на листе бумаги) всю необходимую информацию о конфигурации вашего компьютера. Если ваш компьютер пока что работает под ОС Windows 95/98, то многое можно найти, щелкнув правой кнопкой мыши по значку My Computer (Мой компьютер), а затем выбрав команду Properties (Свойства). Там можно найти почти всю необходимую информацию. Если чего-то не найдете, придется искать другими способами, вплоть до того, что открыть компьютер и прочитать надписи на самих устройствах.

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

BIOS:

фирма-производитель;

версия.

Контроллеры жестких дисков: тип (IDE или SCSI) и объем ваших жестких дисков (если у вас IDE диски, вы должны проверить, что BIOS вашего компьютера обеспечивает доступ к ним в режиме LBA):

hda (Master на 1 контроллере или Primary Master);

hdb (Slave на 1 контроллере или Primary Slave);

hdc (Master на 2 контроллере или Secondary Master);

hdd (Slave на 2 контроллере или Secondary Slave).

фирма-производитель и номер модели SCSI адаптера (если имеется).

Объем оперативной памяти (в килобайтах).

CD-ROM:

тип интерфейса (IDE, SCSI, или иной);

для не-IDE, не-SCSI CD-ROM — фирма-производитель и номер модели.

Мышь:

тип (serial, PS/2, или bus mouse);

протокол (Microsoft, Logitech, MouseMan, и т.
д.);

число кнопок;

для мыши на последовательном порту также номер порта, к которому она подсоединена.

Адаптер дисплея:

фирма-производитель;

номер модели (или чипсет, который использован);

количество видео-памяти;

Монитор:

фирма-производитель;

номер модели;

граничные значения (min, max) частоты вертикальной и горизонтальной развертки (эти данные вы можете найти только в документации на монитор, их Windows не выдает, а между тем они очень важны при настройке графического интерфейса).

Если вы собираетесь работать в сети (а UNIX вообще в первую очередь — сетевая ОС), то запишите следующие данные:

фирма-производитель и номер модели сетевой карты;

ваш IP адрес;

сетевое имя вашего компьютера;

маска подсети;

IP адрес шлюза (gateway IP address);

IP адреса серверов (основного и резервных) доменных имен (DNS server);

IP адреса серверов WINS (Windows Internet Name Service);

имя домена вашей организации.

Тип и производитель звуковой карты и игровых контроллеров (если таковые имеются).


Подготовьте свой ПК


Если вы решились на модернизацию, то первым делом нужно убедиться, что компьютер отвечает основным требованиям Windows 2000 Professional. Эта ОС, так же как и Windows 9x и NT 4.0, любит оперативную память. Причем аппетиты у нее повыше, чем у предшественниц: 32 Мбайт - это минимум, а рекомендуется 64 Мбайт. И действительно, по нашим наблюдениям, 64 Мбайт достаточно для большинства повседневных задач (128 Мбайт обеспечивают лишь небольшое увеличение производительности).

Требования к процессору не столь жесткие: рекомендуется Pentium-133. Мы установили Windows 2000 поверх Windows 95 на ПК с Pentium-133 и 32 Мбайт оперативной памяти. Установка прошла без проблем, но быстродействие новой системы оказалось едва-едва приемлемым. На машине с Pentium-166, имевшей 64 Мбайт памяти, результат понравился нам намного больше, а на машинах с более быстрыми процессорами - еще больше (что, впрочем, неудивительно).

Для инсталляции Windows 2000 Professional нужно не менее 650 Мбайт свободного дискового пространства, но на некоторых машинах может потребоваться до 1 Гбайт. В установленном виде система занимает около 500 Мбайт - примерно вдвое больше, чем Windows 98. Так что если диск уже забит, подумайте о том, чтобы приобрести новый.



Подключение


На рис. 2 мы видим параметры запуска программы pppd, которая реализует протокол физического уровня при установлении связи по телефонной линии. Ее основными параметрами являются имя драйвера для модема, скорость соединения между модемом и компьютером и некоторые другие. В Linux драйверы устройств представлены в виде файлов со специальными атрибутами, которые находятся, как правило, в каталоге /dev. Причем файл /dev/modem обычно является ссылкой на конкретный порт компьютера, к которому подключен модем (например, /dev/ttyS1, т. е. первый COM-порт). Если модем будет подключен к другому порту, можно просто изменить эту ссылку, не меняя остальные настройки.

Рис. 3. Закладка для конфигурирования соединения

Вся информация, которая содержится на закладке Hardware, записывается в файл ifcfg-"имя соединения", расположенный в каталоге /etc/sysconfig/network-scripts. Формат его очень прост - имя и значение параметра отделяются знаком =. Сценарий организации соединения анализирует этот файл и конфигурирует pppd в соответствии со значениями параметров. Опция defaultroute для программы pppd говорит о том, что маршрутизация соединения возлагается на сервер провайдера, поэтому именно такое значение и должно быть вписано в поле PPP option.

Закладка Communication содержит информацию по chat-сценарию. Программа chat - это стандартная UNIX-программа, которая позволяет автоматизировать процесс набора номера провайдера и вашу авторизацию у него. Впрочем, она универсальна, и с ее помощью можно выполнять и другие действия. Chat следит за потоком ввода и сравнивает его содержимое со своей базой правил. Правила отображают связку ключ - значение, и как только из потока ввода поступает последовательность символов, обозначающая один из ключей, программа посылает в поток вывода соответствующее ему значение. Таким образом, chat-сценарий представляет собой набор ключей с их значениями.

Общение с модемом начинается с тестовой команды atz (в верхнем поле закладки), на которую он должен ответить OK.
Программа chat, получив эти два символа, посылает в ответ команду для набора номера atpd (at - команда модема, p - импульсный режим набора номера, а d - указание набрать номер, следующий за командой). Параметры этой команды находятся во втором и третьем полях закладки. Затем модем набирает номер и устанавливает соединение с провайдером.

Как только устанавливается связь, сервер поставщика услуг Internet запрашивает имя пользователя. Обычно в приглашении "набрать имя" содержится строка login:. Именно этого значения и ждет программа chat, которая выдает в ответ имя пользователя. Аналогично передается и пароль. Сценарий можно продолжить и далее - все зависит от того, что запрашивает сервер провайдера. Параметр timeout не является ключом, а используется самой программой chat для определения времени ожидания ответов модема и сервера провайдера.

Когда сервер провайдера перейдет в режим ppp, chat прекратит свою работу и передаст контроль над соединением программе pppd, которая и обеспечит двунаправленную связь. При этом linuxconf сгенерирует chat-сценарий, необходимый для установления модемного соединения в каталог /etc/sysconfig/network-scripts/, и сам файл, который получит название chat-"имя соединения". Его можно использовать и без посредничества linuxconf и сценария /etc/sysconfig/network-scripts/ifup, который обычно задействуется конфигуратором для установления соединения организации связи. Это можно сделать, например, с помощью команды:

# /usr/sbin/pppd /dev/modem 38400 defaultroute connect "/usr/sbin/chat -f /etc/ sysconfig/network-scripts/ chat-ppp0 > /dev/null &

Нужно сказать, что в chat-сценарии содержится конфиденциальная информация - ваше имя и пароль для доступа к провайдеру. Поэтому необходимо правильно установить права доступа к этому файлу, например командой:

# chmod 600 /etc/sysconfig/ network-scripts/chat-ppp0

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


Подведем итоги


Цель этой заметки - ответить на два вопроса. Первый - может ли пользователь (не программист и не системщик), установив Linux, сразу начать выполнять некую элементарную текущую работу. С тем, чтобы проблемы операционной системы изучать по ходу их возникновения, а не перед тем, как ему надо написать страничку элементарного текста с простенькой иллюстрацией. И при этом поначалу не выходя за пределы штатных средств. Надеюсь, я выразился понятно?

Ответ, хотя и с некоторыми оговорками - положительный. Штатных средств Linux'а и XWindow (в модификации KDE) вполне достаточно, особенно если работа пользователя ориентирована, так сказать, на Сетевое представление. Разумеется, для бумажного представления, а также мало-мальски неэлементарной векторной графики, инструментария маловато. Однако не забудем, что в комплекте Windows (хоть какой версии) положение с этим еще хуже.

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

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

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

Я уже гоорил, что положение Word'а или Excel'а как фактического стандарта в постсоветском делопроизводстве обязано не маркетинговому гению российского представительства Microsoft'а, а исключительно усилиям пиратов.
Так же как популярность прочих компонентов джентельменского набора любого пользователя - CorelDraw и PhotoShop'а. Неужели вы купили бы их за свои кровные, если вся задача - нарисовать пару кривых или подправить контрастность фотографии? Ведь для этих целей существует (или существовало не так давно) немеренно маленьких, быстрых и простых в обращении программ. Но кто же о них теперь вспомнит...

А пользователь Linux'а, приобретя дистрибутив за 5 уев (или, паче того, за казенный счет скачав его с Сети), может спокойно и с чистой совестью (а чистая совесть - великая вещь, по крайней мере, так говорят те, кто знает, что это такое) может удовлетворять свои насущные потребности. И даже - порочные склонности.

Однако я отвлекся. Вернемся к первому вопросу. Да, в Linux'е (по крайней мере при наличие KDE) можно почти сразу после установки начать набирать тексты, изготовлять рисунки, верстать все это в web-страницы. Слушая при этом арию тореадора с компакт-диска Бизе, песенки Визбора с mpeg-диска или скачанных с Сети (например, с http://www.bards.ru/ - очень рекомендую, кто любит) современных бардов в формате RealAudio.

Однако тут возникает второй вопрос: каждый ли это может? И здесь ответ - однозначно отрицательный. Работа в Linux'е не для каждого. И дело тут не в том, что нужно быть семи пядей во лбу. Хотя Linux, конечно, не для полных идиотов (помните - была такая книжка, QuarkPress для полных идиотов?). И не в том дело, что требуется некоторый обязательный минимум начальной подготовки: подготовка - дело наживное.

А в том дело, что, в отличие от Windows (но не от DOS - Windows в этом отношении развился; или - деградировал), в Linux'е невозможно обойтись набором готовых рецептов. Практически каждое, самое элементарное, действие требует чтения документации, книг, Сетевых материалом. А часто (страшно сказать) даже размышлений.

Конечно, как говорил вечно живой - любая кухарка может управлять государством. Правда, вскоре расстрелянный добавлял - под наблюдением комиссара. Так и тут.Вероятно, любая секретарша смогла бы работать в Linux'е. Под наблюдением сисадмина. Однако вопрос - захочет ли? Думается, вряд ли.

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

А ведь если при советской власти наука являлась способом удовлетворения любопытства индивидуума за счет государства, то теперь его приходится удовлетворять любым доступным способом. А Linux - не только достойный, но и один из наименее дорогих способов такого удовлетворения.

Алексей Федорчук

Щербинка, 4 августа 1999 года

дополнено 15 августа



Подведению итогов


Из всего сказанного, возможно, создалось впечатление, что я стремился всячески обругать StarOffice. Уверяю, это не так. Просто лично я вообще не люблю офисные комплекты. Предпочитая самостоятельно подобранный инструмент для каждой операции, закаленный и отточенный ("свое дело - для каждого, и каждый - для своего дела", как говаривал персонаж известной новеллы Альфреда Бестера).

Но если оценивать StarOffice по принятым среди них меркам - безусловно, он будет среди лучших. И по степени интеграции компонентов друг с другом и с Сетью, и по широте и оригинальности возможностей, и по уровню их реализации.

Отсутствие поддержки русского языка - ну что ж, это наша беда, не его. И можно было бы надеяться, что когда-нибудь таковая появится. Узнали же о русском языке такие Linux-дистрибутивы, как RedHat, Suse, не говоря уже о Mandrake.

Сложности с русскими буквами на экране? Это проблема не только пакета, но и шрифтов. Может быть, кто-нибудь наконец склепает нормальные русские шрифты Type 1 - и все придет в норму? Сам бы занялся, да фонт-дизайнер из меня...

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

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

Иное дело - StarCalc. Как полнофункциональная электронная таблица, заслуживает всяческого одобрения. Все, что нужно пользователю от такого орудия - есть (правда, есть и многое, что - не очень нужно). Лично я принял ее на вооружение.

StarDraw - вызывает противоречивые чувства. С одной стороны, как собственно рисовалка - выше всяческих похвал (одно всамделишнее 3D дорогого стоит). Но как универсальный дизайнерский инструмент (подобно CorelDraw, который, как пятиборец, умеет делать все) - не пригоден.
Из- за тех же русских букв. Впрочем, если готовить иллюстрации для Сети, рисованные продукты все равно придется экспортировать в растр. И уже в растровом редакторе (GIMP, скажем) добавить русские буквы.

StarImpress по определению к использованию не пригоден. Ведь не в Америку же мы со своей презентацией поедем. А на Руси многие все же предпочитают русские буквы.

Относительно Database - ничего не скажу. Потому как такой компонент в офисном комплекте полагаю архитектурным излишеством. Не картотеку же личного винного погреба им делать? Так ведь пока сделаешь, все выпьешь - и начинай по новой...

И в заключение - несколько слов о системных ресурсах и прочем. Неоднократно отмечалось, что StarOffice весьма требователен к быстродействию и объему памяти, иначе устойчивость его оставляет желать лучшего, а о быстродействии лучше и не говорить. Вероятно, это действительно так. Однако, на достаточно мощной машине (P-III/533, RAM 128 MB, видеокарта Matrox G400 с 16 MB памяти) проблем не возникает. Ни одно из опробованных мной приложений StarOffice ни разу не зависло. И быстродействие было вполне приличным. Существенное торможение появлялось только на вставке трехмерных объектов. Но ведь на этом кто угодно тормозится.

На чем и заканчиваю.

Алексей Федорчук

Щербинка, 13 декабря 1999 г.



Подвести итоги.


Проведенный обзор был написан с претензией на полноту. Однако за истекшее время появилось еще несколько web-инструментов, с которыми я ознакомиться не успел. Это

Galway (последняя версия - 0.33) - (Ariel Rios)

KWebDev (v0.4.1) Эрика Банкера (Eric Banker)

screem Дэвида Найта (David A Knight)

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

В целом сегодняшнее положение с web-редакторами под Linux я удовлетворительным бы не назвал. WISIWIG-редакторов, пригодных для практического использования в наших условиях (при необходимости работы с кириллицей) - просто нет. Не то, чтобы они так уж необходимы - просто их наличие или отсутствие отражает общий уровень развития web-технологий на данной платформе.

Однако и классические html-редакторы под Linux развиты явно недостаточно. Хорошо задуманным Bluefish или KDreamsite - еще расти и расти до уровня бесплатных html-редакторов под Windows, Erwin - на мой взгляд, откровенно слаб, ну а asWedit явно не рассчитывался на работу с кириллицей.

Таким образом, на данный момент времени практически единственным web-редактором, пригодным для практического использования, является WebMaker. Однако и он имеет резервы для совершенствования: неразвитость средств управления проектом затрудняет его использование для построения большого и сложно структурированного контент-сайта.

Хочется, однако, надеяться, что все сказанное - не более, чем временные трудности. И не пройдет и ... (боюсь загадывать точный срок), как в нашем распоряжении будут мощные html-редакторы со встроенными средствами визуального проектирования, подобно HomeSite, и полнофункциональные WISIWIG-редакторы с возможностью эффективного редактирования html-кода, сходные с Macromedia Dreamweaver.

Алексей Федорчук

Щербинка, 19 декабря 1999 г.



Поиск и анализ "троянских коней" под UNIX


Mixter

Security papers -

Перевод:

Этот документ - попытка дать представление о методах анализа исполняемых файлов ОС UNIX для предсказания действий, которые они могут произвести в системе. Эти методы применимы для исследования обнаруженных "троянских коней" и другого вредоносного программного обеспечения. Они также будут полезны для анализа прекомпилированного программного обеспечения с целью убедиться в его надёжности.

При использовании программного обеспечения с открытым исходным кодом пользователь может получить исходный код программы и откомпилировать свою, надёжную версию. Однако, исходный код может содержать возможности троянского коня, которые нелегко заметить. Некоторые из изощрённых способов производства скрытых действий используют системные вызовы system() или exec для передачи команд, вызывающих преднамеренные переполнения или небезопасные ситуации, интерпретатору shell. Используется также непосредственное выполнение инструкций ассемблера путём создания указателя ("void (*fp)()") на двоичную строку с последующим его исполнением. Однако, бывает, что программы прекомпилированы, например, как часть rpm или подобного двоичного пакета, или части коммерческого программного обеспечения, или двоичные файлы скомпилированы из непроверенного исходного кода, к тому же удалённого после компиляции.

К счастью, большинство UNIX-систем предлагают множество инструментов для разработки и отладки, которые облегчают анализ двоичных файлов. Прежде всего, всё должно делаться в "чистой", то есть, надёжной среде, где обнаруженный двоичный файл исследуется, но не был ещё исполнен. Естетственно, нужно использовать непривилегированную учётную запись (account). Если Вам действительно нужно искать и анализировать возможных "троянцев" в ненадёжной системе, то нужно использовать автономный интерпретатор shell (sash), который должен быть объединён статически (statically linked). В таком случае единственной программой, играющей роль "троянца" может быть модуль ядра, отвественный за упаковку системных вызовов open и read, но такие "троянцы" достаточно редки.
При использовании автономного интерпретатора shell наиболее значимыми являются команды ls, more и ed.

Первое, что должно быть сделано для поиска "троянца" - поиск явных кодограмм в двоичном файле. Это может быть сделано с использованием strings или просмотром при помощи less. Автор первоисточника предпочитает редактор joe, который позволяет просматривать и редактировать почти все не-ascii символы. Кодограммы обычно включают жёстко запрограмированные имена используемых файлов, ascii-строки, которые программа записывает в другие файлы или статические строки, которые она может искать, или имена используемых библиотечных функций, если из файла не удалены символы. Они могут также содержать имена необычных библиотек или библиотек, котрые они не намереваются использовать будучи "троянцем". Лучше всего проверить это, используя ldd для определения зависимостей от библиотек и file для определения были ли удалены символы, была ли программа статически связана и других специальных форматов.

На следующем этапе анализа программы нужно проследить вызовы функций, выполняемые программой и сравнить их с функциями, которые программа, по предположению, должна выполнять. Системные вызовы могут быть прослежены в большинстве систем с помощью strace, ktrace в BSD, или truss в Solaris. Следует обратить внимание на все попытки доступа к файлам (open/stat/access/read/write), вызова гнёзд (socket calls), особенно, вызовы listen() и fork(). Порождённые процессы могут быть прослежены при помощи опции -f во всех этих программах.

Заслуживает интереса подобный инструмент для Linux - ltrace, который распознаёт все библиотечные вызовы, производимые программой в обход системных программ и позволяет создать очень подробный список параметров программы.

Наконец, немаловажно то, что программа может и должна быть дизассемблирована, предпочтительно, с использованием gdb. Дизассемблирование, в основном, означает обнаружение функций в двоичном файле и перевод двоичного кода обратно в команды ассемблера.


Сначала должна быть определена точка входа в программу. Это - адрес начала функции, которая будет выполнена при запуске программы и которая, если из программы не была модифицирована или из неё не были удалены символы, всегда называется main или _start. Следуя за этой функцией можно проследить процесс выполнения программы и увидеть, что может, а чего не может сделать программа. Особенно интересны вызовы инструкций (function calls) и инструкции jmp/int, если они используют небиблиотечные вызовы ядра или скомпилированы статически. Типичные точки входа для двоичных файлов архитектуры x86 выглядят примерно так:

0x8048f97 <_start+7>: call 0x8048eac <atexit> 0x8048f9d <_start+13>: call 0x8048dcc <__libc_init_first> 0x69662 <__open+18>: int $0x80

Последней деталью рассмотрения являются строки, находящиеся в определённых частях программы и аргументы, передаваемые функциям. Строки (содержащиеся в символьном или другом буферах) упоминаются в программе определёнными общими способами, например:

void do_something (char *y) {}; char *h = "hello world"; int main() { char *text = h; int x = getchar(); do_something(text); return 0; }

Это соответствует следующим командам ассемблера: 0x804847e <main+6>: movl 0x804950c,%eax 0x8048483 <main+11>: movl %eax,0xfffffffc(%ebp)

Сохранить указатель по относительному адресу. Указатель ссылается на статическую, жёстко запрограммированную строку "hello world" в коде. 0x8048486 <main+14>: call 0x80483cc <getchar> 0x804848b <main+19>: movl %eax,%eax 0x804848d <main+21>: movl %eax,0xfffffff8(%ebp)

Вызвать функцию getchar и поместить результат (видимо, целое. хранящееся в регистре EAX) в стек. EBP - базовый указатель, используемый для ссылки на адреса относительно текукщей функции в стеке. 0x8048490 <main+24>: movl 0xfffffffc(%ebp),%eax 0x8048493 <main+27>: pushl %eax 0x8048494 <main+28>: call 0x8048470 <do_something>

Здесь полученный обратно указатель на строку отправляется как первый и единственный аргумент функции do_something в стеке.Следовательно, очевидно, строка, на которую ссылается указатель, передаётся функции.

Теперь мы можем вручную разыменовать указатель при помощи команды x

: (gdb) x/a 0x804950c /* x option /a displays the memory content as an address, to see which address a pointer actually points to */ 0x804950c <h>: 0x80484fc <_fini+28> (gdb) x/s 0x80484fc /* x option /s displays the memory content as string up to the point where a terminating \0 is found */ 0x80484fc <_fini+28>: "hello world"

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



Полезные советы


Меры безопасности во время изменения правил фильтрации

Во время изменения правил фильтрации некоторые нежелательные пакеты могут проскочить через firewall. Рекомендуется следующий подход: # сначала вставляем во все цепочки правила, уничтожающие все пакеты ipchains -I input 1 -j DENY ipchains -I output 1 -j DENY ipchains -I forward 1 -j DENY ... делаем все необходимые изменения ... # убираем безусловное уничтожение пакетов ipchains -D input 1 ipchains -D output 1 ipchains -D forward 1

Динамическое изменение правил фильтрации

Если у вас есть непостоянный интерфейс, то во время начальной загрузки вы можете, например, установить первое правило во входной цепочке '-i ppp0 -j DENY'

а после поднятия интерфейса, например, в скрипте ip-up, выполнить что-нибудь типа: # восстановить цепочку ppp-in ipchains-restore -f < ppp-in.firewall # заменить первое правило входной цепочки ipchains -R input 1 -I ppp0 -j ppp-in

Соответственно, скрипт ip-down может выглядеть так: ipchains -R input 1 -i ppp0 -j DENY

Сохранение и восстановление правил фильтрации

С помощью скрипта ipchains-save, входящего в комплект ipchains-scripts ( ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz) можно записать текущие правила одной или всех цепочек в файл. Это делается так: ipchains-save > my-firewall

В качестве параметра можно указать имя одной цепочки. Если имя не указано, то записываются правила всех цепочек. Кроме того, можно указать флаг '-v', который позволит посмотреть правила по мере их записи.

Для восстановления правил из фала применяется скрипт ipchains-restore: ipchains-restore < my-firewall

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

Какие пакеты не надо уничтожать

Прежде чем уничтожать все ненужные вам пакеты, учтите следующее:

ICMP-пакеты, помимо всего прочего, используются для индикации ошибок в других протоколах (например, в TCP и UDP).
Блокирование таких пакетов приведет к тому, что вы никогда не получите сообщений Host unreachable или No route to host, и попытки соединиться с такими хостами будут ожидать ответа, который никогда не придет. Это плохо, но не фатально.

Гораздо хуже другая проблема - использование ICMP для определения MTU (Maximum Transfer Unit - максимальный размер пакета для передачи по некоторому каналу связи). Все хорошие реализации TCP (в том числе и Линукс) используют определение MTU с целью вычислить максимальный размер пакета, который может дойти до получателя без промежуточной фрагментации. Фрагментация замедляет передачу данных, особенно если фрагменты иногда теряются. Определение MTU производится путем посылки получателю пакетов с установленным флагом "Don't Fragment" (Не фрагментировать). Если в ответ приходит ICMP-квитанция "Fragmentation needed but DF set" (требуется фрагментация, но установлен флаг Не фрагментировать), то посылается пакет меньшего размера. Если же такая квитанция не будет получена, то размер пакета не будет автоматически уменьшаться, что может привести к сильному замедлению или вообще блокированию передачи данных.

TCP-соединения с DNS-серверами. Если вы запрещаете исходящие TCP-соединения, помните, что DNS не всегда использует UDP. Если размер ответа от сервера превышает 512 байт, то клиент использует TCP-соединение с сервером (также на 53 порт). Если ваши DNS-запросы всегда посылаются на один DNS-сервер, то вам надо разрешить TCP-соединения на 53 порт DNS-сервера либо с 53 порта вашей машины (если у вас установлен собственный кэширующий DNS-сервер), либо с непривилегированных портов (>1023). Либо и то, и другое.

FTP может работать в двух режимах: один из них (стандартный) называется активным, а другой - пассивным. WWW-браузеры обычно работают в пассивном режиме, а обычные ftp-клиенты - в активном.

В активном режиме если удаленный сервер хочет передать клиенту данные (не только файл, но даже результат выполнения команды ls или dir), он пытается установить соединение с клиентской машиной.


Следовательно, вы не можете запрещать такие входящие TCP-соединения, не мешая нормальной работе активного ftp-клинета. Если у вашего клиента есть возможность работы в пассивном режиме, это прекрасно. В пассивном режиме соединение устанавливается от клиента к серверу, даже для приема данных. В противном случае рекомендуется разрешить входящие TCP-соединения на порты 1024 и выше, кроме портов 6000-6010, потому что они используются системой X-Windows.

Защита от атак по IP

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

Ping of Death - основан на посылке ненормально больших ICMP-пакетов, которые вызывают переполнение входного буфера пакетов и зависание. Для защиты запретите пересылку фрагментов ICMP-пакетов. Нормальные ICMP-пакеты маленькие, фрагментации не подвергаются, и на них запрет не скажется. Хотя все известные программы, использующие эту атаку, генерируют ICMP-пакеты, никто не запрещает использовать для той же цели TCP или UDP-пакеты, так что эта защита не слишком надежна.

Teardrop и bonk - в основном применяются против Windows NT, основаны на пересекающихся фрагментах. Либо заставьте ваш шлюз дефрагментировать все пересылаемые пакеты, либо запретите пересылку фрагментов на чувствительные к этой атаке машины.

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

Внимание! Это далеко не полный перечень известных атак по протоколу IP, и указанные здесь действия не гарантируют безопасность и работоспособность ваших компьютеров.



Защита от спуфинга

IP-спуфингом (spoofing) называется посылка пакетов с обратным адресом другой машины. Поскольку фильтрация пакетов во многом основывается на адресе отправителя, спуфинг может использоваться, чтобы обмануть фильтр пакетов. Кроме того, он используется для маскировки атакующего при атаках типа SYN, Teardrop, Ping of Death, и других. Если вы не знаете, что это такое, это не важно ;-)

Лучший способ защититься от IP-спуфинга называется Проверка Адреса Отправителя (Source Address Verification), и выполняется программами маршрутизации, а не фильтрации пакетов. Проверьте, существует ли у вас на машине файл /proc/sys/net/ipv4/conf/all/rp_filter. Если да, то верным решением будет включение Проверки Адреса Отправителя во время начальной загрузки машины. Для этого следует вставить следующие команды в один из ваших скриптов инициализации, до инициализации сетевых интерфейсов: # Включаем Проверку Адреса Отправителя и получаем # защиту от спуфинга на всех существующих и будущих интерфейсах if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then echo -n "Setting up IP spoofing protection..." for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done echo "done." else echo PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED. echo "CONTROL-D will exit from this shell and continue system startup." echo # Start a single user shell on the console /sbin/sulogin $CONSOLE fi

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

К примеру, у вас на машине 3 интерфейса - eth0, eth1, ppp0. Вы можете использовать ifconfig, чтобы узнать какие адреса и маски сети используются на каждом из интерфейсов. Предположим, eth0 соединен с сетью 192.168.1.0/255.255.255.0, eth1 - с сетью 10.0.0.0/255.0.0.0, а ppp0 - с остальным интернетом (поэтому на этом интерфейсе возможны любые адреса, кроме локальных сетей). Тогда надо добавить следующие правила: ipchains -A input -i eth0 -s ! 192.168.1.0/24 -j DENY ipchains -A input -i ! eth0 -s 192.168.1.0/24 -j DENY ipchains -A input -i eth1 -s ! 10.0.0.0/8 -j DENY ipchains -A input -i ! eth1 -s 10.0.0.0/8 -j DENY



Такое решение хуже, чем Проверка Адреса Отправителя, поскольку при изменении сетевой конфигурации вам придется переделывать правила фильтрации. Ядра 2.1.x и выше автоматически отвергают пакеты с адресом отправителя 127.*.*.*, если они приходят не с локального интерфейса. Если у вас ядро 2.0.x, вы можете таким же образом защитить интерфейс lo: ipchains -A input -I !lo -s 127.0.0.0/8 -j DENY

Где взять

На официальной странице ipchains: .

Скрипты для ipchains:

Ссылки

Официальная страница ipchains:

Руководство по ipchains by Paul Russell, на котором по большей части основывается эта статья

Руководство по настройке firewall'ов, в том числе и с помощью ipwfwadm by Mark Grennan:

Краткое руководство по IP-маскарадингу by Ambrose Au and David Ranch: . Там, в частности, есть советы по конфигурированию машин в локальной сети, которые ходят в интернет через маскарадящий шлюз, для многих операционных систем и конкретных программ.

Руководство сетевого администратора Линукса:

Официальная домашняя страница маскарадинга для Линукса:

Indyramp Consulting - дополнительная информация о маскарадинге, список рассылки по маскарадингу и его архив:

© Александр Дилевский 06-15.06.1999.



Полезные ссылки


Е. Горный, , .

С. Богомолов, , .

,

, .

Д. Колисниченко, , .



Полезные утилиты


Рассказ о методах восстановления систем NT будет неполным без упоминания об утилитах производства независимых компаний, значительно облегчающих этот процесс. ERD Commander и Remote Recover компании Winternals Software, а также NTRecover от Systems Internals относятся к числу весьма полезных программных продуктов производства ведущих поставщиков программ восстановления. И хотя каждая из этих утилит упрощает процесс восстановления разрушенной системы NT, в них используются различные подходы, и они обладают разными возможностями. Так, NTRecover компания Systems Internals позволяет получить доступ к жесткому диску не загружающейся системы через последовательный порт с работоспособной машины. После установления соединения можно копировать и удалять файлы, запускать программу проверки диска Chkdsk или антивирусную программу на жестком диске удаленной системы. В большинстве случаев возможностей программы будет вполне достаточно для успешного восстановления незагружающейся системы.

ERD Commander - мечта администратора NT, ставшая явью. Тот, кто целыми днями мучается с установочными дискетами DOS или Windows 95 несомненно оценит ее по достоинству. Утилита с интерфейсом в виде командной строки загружается с простой трехдюймовой дискеты и может читать и записывать на тома с NTFS. На Экране 4 показан интерфейс утилиты ERD Commander.

ЭКРАН 4. Выполнение операций восстановления утилитой ERD Commander.

Профессиональная версия данной программы предоставляет дополнительные возможности, такие, как поддержка избыточных наборов дисков (наборы дисков, поддерживаемые драйвером NT ftdisk.sys), способность запуска Chkdsk, восстановление утраченных паролей, чтение дисков с FAT32, а кроме того, возможность работы с утилитой Expand и параметры командной строки, которые позволят выборочно управлять начальным состоянием служб и драйверов или деактивировать их.

Remote Recover - новейшая разработка компании Winternals. Эта программа со своим загрузочным диском, который включает в себя сетевой драйвер спецификации NDIS2, позволяющий обеспечить удаленный доступ к томам NTFS не стартующей системы по сети. После получения доступа к файлам системы можно выполнять процедуры восстановления, подобные NTRecover и ERD Commander.



Получение информации о процессах


Для работы с информацией о процессах, которую выводят на терминал программы ps и top, в Linux используется достаточно необычный механизм: особая файловая система procfs. В большинстве дистрибутивов она монтируется при запуске системы как каталог /proc. Данные о процессе с номером 1 (обычно это /sbin/init) содержатся в подкаталоге /proc/1, о процессе с номером 364 - в /proc/364, и т. д. Все файлы, открытые процессом, представлены в виде символических ссылок в каталоге /proc/<pid>/fd, а ссылка на корневой каталог процесса хранится как /proc/<pid>/root.

Со временем у файловой системы procfs появились и другие функции. Например, командой

echo 100000 > /proc/sys/fs/file-max

суперпользователь может определить, что в системе разрешается открыть до 100 000 файлов, а команда

echo 0 > /proc/sys/kernel/cap-bound

отнимет у всех процессов в системе все дополнительные права, т. е. фактически лишит систему понятия "суперпользователь".

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

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



Последствия модернизации


И все-таки соблюдение всех перечисленных мер предосторожности и следование нашим советам еще не гарантирует, что вы плавно войдете в Windows 2000. Чтобы получить реалистичную оценку, мы протестировали с новой ОС много машин. И хотя в целом на нас произвели положительное впечатление стабильность системы и ее новообретенная компетентность в области аппаратного обеспечения, в отдельных случаях несовместимость испортила нам всю картину. Вот главные моменты. (К тому времени, как вы прочтете этот материал, определенные драйверы, не включенные в состав последних предварительных версий, а возможно, и в окончательный продукт, должны появиться на Web-узле www.windowsupdate.com.)

Компьютеры. Здесь все зависит от везения. На удивление многие из 24 машин, на которых мы устанавливали Windows 2000, страдали различными дефектами совместимости. Некоторые проблемы могли быть связаны с тем, что тестировались предварительные версии, но похоже, они повторятся и в готовой системе.

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

Так, нам не удалось уговорить Compaq Presario с новым процессором Athlon-500 показывать DVD-фильмы; на портативном Hewlett-Packard Pavilion (с Celeron-433) не подключились модем и аудиосистема; на Dell Dimension XPS T600 (процессор Pentium III-600) было невозможно вернуться к установленным на заводе ОС (Windows 98 SE) и программам, используя диск Dell; Compaq Presario 5700 изводил нас (а заодно компании Compaq и Microsoft) загадочной ошибкой, в результате которой система останавливалась сразу после окончания установки. И наконец, хотя Windows 2000 почти идеально работала на портативном ПК Sony Z505S (после модернизации BIOS), она оказалась неспособной поддерживать встроенные утилиты, обеспечивающие несколько дополнительных функций, таких как прокрутка на сенсорном планшете и затемнение экрана.

Графические адаптеры и звуковые платы.
Сложности возникали только с новейшими платами. К примеру, графическая плата Matrox G200s работала просто великолепно даже в режиме с двумя дисплеями, тем не менее компания Matrox готовит новые драйверы для Windows 2000 и платы G200s, а также для новой Millennium G400.

За исключением упомянутой выше проблемы с HP Pavilion ситуация со звуковыми платами была аналогичной: сравнительно старые вели себя прекрасно, а новые нет; некоторые из них, возможно, останутся немы до тех пор, пока их изготовители не выпустят драйверы для Windows 2000. Наиболее серьезные сложности возникли с платами Sound Blaster Live и X-Gamer компании Creative Labs. В компании нам сообщили, что драйвер для Sound Blaster можно получить на Web-узле Creative с середины февраля.

Мыши и клавиатуры. Для большинства протестированных устройств ввода приходилось пользоваться общими драйверами, поскольку специфические драйверы для Windows 2000, как правило, отсутствовали. В результате Windows 2000 обеспечивала основные операции указания и набора символов, но специальные функции, такие как использование колесика мыши или мультимедийных клавиш, были доступны далеко не всегда. Скажем, с USB-мышью MouseWorks компании Kensington и с мультимедийной USB-клавиатурой MediaBoard компании Belkin они не работали. Отрадным исключением стала мышь Logitech Wheel Mouse: все ее функции после замены ОС оказались на месте. Если для вас существенны дополнительные функции устройства ввода, то перед заменой ОС выясните, имеются ли у их производителя драйверы для Windows 2000.

Модемы и сетевые платы. С модемами и сетевыми адаптерами при переходе на Windows 2000 не возникло почти никаких проблем. Единственный встретившийся нам дефект состоял в том, что модем Zoom на 56 кбит/с отказался работать непосредственно после замены Windows 98 на Windows 2000. Однако после повторной установки его драйвера в Windows 2000 все наладилось.

Принтеры. Подобно модемам и сетевым платам, принтеры после перехода на Windows 2000 в конце концов начали работать.


Но это не означает, что все шло абсолютно гладко. Анализатор готовности к Windows 2000 предупредил нас о несовместимости двух принтеров - HP Deskjet 882C и Lexmark Optra M410n. Однако после загрузки Windows 2000 оба стали отлично печатать.

Сканеры. По сравнению с принтерами поддержка сканеров выглядела явно слабее. Сканер Epson Perfection 1200U вообще не поддерживался, хотя в компании нас заверили, что ко времени появления Windows 2000 в продаже драйвер будет готов. Ведущий производитель сканеров, компания Hewlett-Packard, не планирует поддерживать интерфейс USB в Windows 2000 для многих из своих нынешних моделей, включая протестированные нами ScanJet 3300Cse, работающую только с USB, и ScanJet 6350C для SCSI/USB. А поскольку NT не поддерживает USB, драйверы для NT 4.0, которые обычно работают под управлением 2000, бессильны помочь с этим типом периферийных устройств.

Производители, подобные HP, решили вкладывать свои силы туда, где выше прибыль: не в написание новых драйверов для старых устройств, а в новые устройства. Если вы собираетесь использовать сканер HP под управлением Windows 2000, предварительно узнайте в HP, получится ли это. В ожидании обновления драйверов и ПО придется либо подключать устройство через параллельный или SCSI-интерфейс (при условии, что он имеется), либо загружать для работы с ним Windows 9x (если единственный интерфейс - USB). Эти обходные пути применимы и для цифровых камер.

Цифровые камеры. Мы тестировали цифровой фотоаппарат Canon PowerShot A50; он подсоединяется к ПК через последовательный порт, но тем не менее после установки Windows 2000 работать перестал. Прилагавшаяся к аппарату программа для ПК запускалась и опознавала подключенное устройство, но добраться до снимков не удавалось. Цифровым камерам с интерфейсом USB, как и сканерам, для успешной работы с Windows 2000 необходимы новые драйверы. Например, камера Kodak DC265 не заработала у нас с новой ОС, поскольку ее USB-драйвер рассчитан на Windows 9x. Компания Kodak сообщила, что драйвер для Windows 2000 должен быть готов примерно ко времени выхода ОС.



Программное обеспечение. С прикладными программами возникло намного меньше проблем, чем с аппаратурой. Большинство популярных программ, включая все три ведущих офисных пакета, прошли через смену ОС на всех парусах. (Outlook 2000 при первом запуске после установки Windows 2000 просит достать инсталляционный диск Office и заново установить несколько dll-файлов, но это - всего лишь мелкое неудобство.)

Возможны трудности с некоторыми программами для работы с CD-дисками. В результате изменений в одном общем dll-файле Windows стало невозможно запускать использующие его программы записи звуковых CD-дисков (CD-burners), такие как CD-Maker Pro компании NTI. Разработчики программ обещают вскоре создать их версии, совместимые с Windows 2000.

Нам встретилась и еще пара дефектов. После перехода на Windows 2000 бесплатная версия программы Pretty Good Privacy 6.5.1 компании Network Associates выдает сообщение об ошибке - предупреждение, что пароль может быть сброшен в страничный файл (файл подкачки Windows), где он в принципе доступен для посторонних глаз. Обновленная версия 6.5.2, работающая с Windows 2000, имеется на Web-узле центра распространения PGP при Массачусетском технологическом институте (web.mit.edu/network/pgp.html). Кроме того, мы обнаружили, что в Windows 2000 невозможно установить Norton SystemWorks 2000 - этот пакет, как многие утилиты, работает только под управлением Windows 9x. (По сообщению Symantec, версия SystemWorks для Windows 2000 сейчас разрабатывается.)


Построение надежных операционных систем, допускающих наличие ненадежных драйверов устройств


Йоррит Хердер (Jorrit N. Herder), Херберт Бос (Herbert Bos), Эндрью Таненбаум (Andrew S. Tanenbaum)

Перевод -

Оригинал: A Lightweight Method for Building Reliable Operating Systems Despite Unreliable Device Drivers (), Technical Report IR-CS-018, January 2006

Я некоторое время колебался, стоит ли переводить этот материал после публикации своего (очень подробного) пересказа замечательной, на мой взгляд, статьи "Можем ли мы сделать операционные системы надежными и безопасными". В данном случае мы имеем дело не со статьей, а с техническим отчетом, и, конечно, текст является менее качественным (в частности, имеются повторы). Но, подумав, я решил, что высокие технические качества статьи перевешивают ее небольшие литературные недостатки. Во-первых, здесь изложены все основные технические идеи ОС MINIX 3. Их простота и эффективность воодушевляют. Во-вторых, в отчете содержится очень хороший обзор литературы по современным операционным системам. Мне кажется, что этот материал может быть полезен всем людям, интересующимся технологией операционных систем и, прежде всего, преподавателям и студентам ВУЗов. Я проявил дополнительную заботу о читателях и нашел в Internet свободные ссылки на полные тексты большинства статей, перечисленных в списке литературы. Эти ссылки добавлены мною в список литературы. К сожалению, остальные тексты доступны только подписчикам электронных библиотек и .

Сергей Кузнецов

Обсудить статью можно на сайте CITKIT.ru



Преамбула


Лицензии на большую часть программного обеспечения (ПО), составлены так, чтобы лишить вас свободы совместно использовать и изменять его. Напротив, Универсальная Общественная Лицензия GNU предназначена гарантировать вашу свободу совместно использовать и изменять свободное ПО, т.е. удостоверить, что ПО является свободным для всех его пользователей. Эта Универсальная Общественная Лицензия применима к большей части ПО Фонда Свободного ПО и ко всем другим программам, чьи авторы принимают на себя обязательства ее использовать. (Вместо нее для части ПО Фонда Свободного ПО применяется Универсальная Общественная Лицензия GNU для библиотек.) Вы тоже можете использовать ее для своих программ.

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

Чтобы защитить ваши права, нам нужно ввести такие ограничения, которые запретят кому бы то ни было отказывать вам в этих правах или потребовать от вас отказаться от этих прав. Эти ограничения переводятся в некоторые обязательства для вас, если вы распространяете копии ПО или если вы модифицируете его.

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

Мы защищаем ваши права в два этапа: (1) сохраняем авторские права на ПО и (2) предлагаем вам эту лицензию, которая дает вам законное право копировать, распространять и/или модифицировать ПО.

Также, чтобы защитить нас и каждого автора, мы хотим удостовериться, что все понимают, что гарантий на это свободное ПО нет.
Если ПО модифицируется и передается кем- то еще, мы хотим, чтобы получатели ПО знали, что то, что у них есть --- это не оригинал, чтобы любые проблемы, созданные другими, не отразились на репутации первоначальных авторов. И наконец, каждой свободной программе постоянно угрожают патенты на ПО. Мы хотим избежать опасности, что повторные распространители свободной программы самостоятельно получат патенты, делая программу таким образом частной собственностью. Чтобы предотвратить это, мы явно заявляем, что любой патент должен быть либо предоставлен всем для свободного использования, либо не предоставлен никому. Ниже следуют точные определения и условия для копирования, распространения и модификации.

ОПРЕДЕЛЕНИЯ И УСЛОВИЯ ДЛЯ КОПИРОВАНИЯ, РАСПРОСТРАНЕНИЯ И МОДИФИКАЦИИ.

0.Эта Лицензия применима к любой программе или другому произведению, содержащему уведомление, помещенное держателем авторских прав и сообщающее о том, что оно может распространяться при условиях, оговоренных в данной Универсальной Общественной Лицензии. В последующем термин "Программа" относится к любой такой программе или произведению, а термин "произведение, основанное на Программе" означает Программу или любое произведение, содержащее Программу или ее часть, дословную, или модифицированную, и/или переведенную на другой язык. (Здесь и далее перевод включается без ограничений в понятие "модификация".) Каждый обладатель лицензии адресуется как "вы". Виды деятельности, не являющиеся копированием, распространением или модификацией не охватываются этой Лицензией; они за пределами ее влияния. Использование Программы по ее функциональному назначению не ограничено, и выходные данные Программы охватываются этой Лицензией, только если их содержание является произведением, основанным на Программе (вне зависимости от того, были ли они получены в процессе использования Программы). Являются ли они таковыми, зависит от того, что что именно делает Программа. 1.Вы можете копировать и распространять дословные копии исходного кода Программы по его получении на любом носителе, при условии что вы соответствующим образом помещаете на видном месте в каждой копии соответствующее уведомление об авторских правах и отказ от гарантий; оставляете нетронутыми все уведомления, относящиеся к данной Лицензии и к отсутствию каких-либо гарантий; и передаете всем другим получателям Программы копию данной Лицензии вместе с Программой. Вы можете назначить плату за физический акт передачи копии и можете по своему усмотрению предоставлять гарантии за вознаграждение.


2. Вы можете изменять свою копию или копии Программы или любой ее части, создавая таким образом произведение, основанное на Программе, и копировать и распространять эти модификации или произведение в соответствии с Разделом 1, приведенным выше, при условии, что вы выполните все нижеследующие условия: Вы обязаны снабдить модифицированные файлы заметными уведомлениями, содержащими указания на то, что вы изменили файлы, и дату каждого изменения. Вы обязаны предоставить всем третьим лицам лицензию на бесплатное использование каждого произведения, которое вы распространяете или публикуете, целиком, и которое полностью или частично содержит Программу или какую-либо ее часть, на условиях, оговоренных в данной Лицензии. Если модифицированная программа обычно читает команды в интерактивном режиме работы, вы должны сделать так, чтобы при запуске для работы в таком интерактивном режиме обычным для нее способом она печатала или выводила на экран объявление, содержащее соответствующее уведомление об авторских правах и уведомление о том, что гарантий нет (или, наоборот, сообщающее о том, что вы обеспечиваете гарантии), и что пользователи могут повторно распространять программу при этих условиях, и указывающее пользователю, как просмотреть копию данной Лицензии. (Исключение: если сама Программа работает в интерактивном режиме, но обычно не выводит подобное объявление, то ваше произведение, основанное на Программе, не обязано выводить объявление.)

Эти требования применяются к модифицированному произведению в целом. Если известные части этого произведения не были основаны на Программе и могут обоснованно считаться независимыми и самостоятельными произведениями, то эта Лицензия и ее условия не распространяются на эти части, если вы распространяете их как отдельные произведения. Но если вы распространяете эти части как часть целого произведения, основанного на Программе, то вы обязаны делать это в соответствии с условиями данной Лицензии, распространяя права получателей лицензии на все произведение и, таким образом, на каждую часть, вне зависимости от того, кто ее написал. Таким образом, содержание этого раздела не имеет цели претендовать на ваши права на произведение, написанное полностью вами, или оспаривать их; цель скорее в том, чтобы развить право управлять распространением производных или коллективных произведений, основанных на Программе. Кроме того, простое нахождение другого произведения, не основанного на этой Программе, совместно с Программой (или с произведением, основанным на этой Программе) на том же носителе для постоянного хранения или распространяемом носителе не распространяет действие этой Лицензии на другое произведение. 3.Вы можете копировать и распространять Программу (или произведение, основанное на ней) согласно Разделу 2) в объектном коде или в выполнимом виде в соответствии с Разделами 1 и 2, приведенными выше, при условии, что вы также выполните одно из следующих требований:


Сопроводите ее полным соответствующим машиночитаемым исходным кодом, который должен распространяться в соответствии с Разделами 1 и 2, приведенными выше, на носителе, обычно используемом для обмена ПО; или, Сопроводите ее письменным предложением, действительным по крайней мере в течение трех лет, предоставить любому третьему лицу за вознаграждение не большее стоимости физического акта изготовления копии полную машиночитаемую копию соответствующего исходного кода, подлежащую распространению в соответствии с Разделами 1 и 2, приведенными выше; или Сопроводите ее информацией, полученной вами в качестве предложения распространить соответствующий исходный код. (Эта возможность допустима только для некоммерческого распространения, и только если вы получили программу в объектном коде или в выполнимом виде с предложением в соответствии с Пунктом b) выше.)

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

4.Вы не можете копировать, изменять, повторно лицензировать, или распространять Программу иначе, чем это явно предусмотрено данной Лицензией.


Любая попытка копировать, изменять, повторно лицензировать, или распространять Программу каким-либо другим способом неправомерна и автоматически прекращает ваши права данные вам этой Лицензией. Однако лицензии лиц, получивших от вас копии или права согласно данной Универсальной Общественной Лицензии, не прекратят своего действия до тех пор, пока эти лица полностью соблюдают условия. 5.Вы не обязаны соглашаться с этой Лицензией, так как вы не подписывали ее. Однако тогда вы не получаете права модифицировать или распространять Программу или основанные на Программе произведения. Эти действия запрещены законом, если вы не принимаете к соблюдению эту Лицензию. А значит, изменяя или распространяя Программу (или произведение, основанное на Программе), вы изъявляете свое согласие с этой Лицензией и всеми ее условиями о копировании, распространении или модификации Программы или произведений, основанных на ней. 6.Каждый раз, когда вы повторно распространяете Программу (или любое произведение, основанное на Программе), получатель автоматически получает лицензию от первоначального держателя лицензии на копирование, распространение или модификацию Программы, обсуждаемую в этих определениях и условиях. Вы не можете налагать каких-либо дополнительных ограничений на осуществление получателем прав, предоставленных данным документом. Вы не несете ответстенности за соблюдение третьими лицами условий этой Лицензии. 7.Если в результате судебного разбирательства, или обвинения в нарушении патента или по любой другой причине (не обязательно связанной с патентами), вам навязаны условия, противоречащие данной Лицензии (как по решению суда, так и нет), то это не освобождает вас от соблюдения Лицензии. Если вы не можете заниматься распространением так, чтобы одновременно удовлетворить требованиям и этой Лицензии, и всем другим требованиям, то вы не должны заниматься распространением Программы. Например, если патент не позволяет безвозмездное повторное распространение Программы всем, кто получил копии от вас непосредственно или через посредников, то единственным способом удовлетворить и патенту, и этой Лицензии будет ваш полный отказ от распространения Программы. Если какая-либо часть этого раздела не имеет силы или не может быть применена при любых конкретных обстоятельствах, то подразумевается, что имеет силу остальная часть раздела, и весь Раздел имеет силу при других обстоятельствах. Цель этого раздела не побудить вас делать заявления о нарушениях прав на патент, или других претензиях на право собственности, или оспаривать правильность подобных претензий; единственная цель этого раздела --- защита целостности системы распространения свободного ПО, которая реализуется использованием общих лицензий.


Многие люди благодаря этой системе внесли щедрый вклад в широкий спектр распространяемого ПО полагаясь на согласованное применение этой системы; автору принадлежит право решать хочет ли он или она распространять ПО в этой системе или в какой-то другой, и получатель лицензии не может влиять на принятие этого решения. Этот раздел предназначен для того, чтобы тщательно прояснить, что полагается следствием из остальной части данной Лицензии. 8.Если распространение и/или применение Программы ограничено в ряде стран либо патентами, либо авторскими правами на интерфейсы, первоначальный обладатель авторских прав, выпускающий Программу с этой Лицензией, может добавить явное ограничение на географическое распространение, исключив такие страны, так что распространение разрешается только в тех странах, которые не были исключены. В этом случае данная Лицензия включает в себя это ограничение, как если бы оно было написано в тексте данной Лицензии. 9.Фонд Свободного ПО может время от времени публиковать пересмотренные и/или новые версии Универсальной Общественной Лицензии. Такие новые версии будут сходны по духу с настоящей версией, но могут отличаться в деталях, направленных на новые проблемы или обстоятельства. Каждой версии придается отличительный номер версии. Если в Программе указан номер версии данной Лицензии, которая к ней применима, и слова "любая последующая версия", вы можете по выбору следовать определениям и условиям либо данной версии, либо любой последующей версии, опубликованной Фондом Свободного ПО. Если в Программе не указан номер версии данной Лицензии, вы можете выбрать любую версию, когда-либо опубликованную Фондом Свободного ПО. 10.Если вы хотите встроить части Программы в другие свободные программы с иными условиями распространения, напишите автору с просьбой о разрешении. Для ПО, которое охраняется авторскими правами Фонда Свободного ПО, напишите в Фонд Свободного ПО; мы иногда делаем исключения для этого. Наше решение будет руководствоваться двумя целями: сохранения свободного статуса всех производных нашего свободного ПО и содействия совместному и повторному использованию ПО вообще.



НИКАКИХ ГАРАНТИЙ

11. ПОСКОЛЬКУ ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ БЕСПЛАТНО, НА ПРОГРАММУ НЕТ ГАРАНТИЙ В ТОЙ МЕРЕ, КАКАЯ ДОПУСТИМА ПРИМЕНИМЫМ ЗАКОНОМ. ЗА ИСКЛЮЧЕНИЕМ ТЕХ СЛУЧАЕВ, КОГДА ПРОТИВНОЕ ЗАЯВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИЕ СТОРОНЫ ПОСТАВЛЯЮТ ПРОГРАММУ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. ВЕСЬ РИСК В ОТНОШЕНИИ КАЧЕСТВА И ПРОИЗВОДИТЕЛЬНОСТИ ПРОГРАММЫ ОСТАЕТСЯ ПРИ ВАС. ЕСЛИ ПРОГРАММА ОКАЖЕТСЯ ДЕФЕКТИВНОЙ, ВЫ ПРИНИМАЕТЕ НА СЕБЯ СТОИМОСТЬ ВСЕГО НЕОБХОДИМОГО ОБСЛУЖИВАНИЯ, ВОССТАНОВЛЕНИЯ ИЛИ ИСПРАВЛЕНИЯ. 12.И В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ ПОДХОДЯЩИМ ЗАКОНОМ ИЛИ НЕ УСЛОВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, НИКАКОЙ ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ ИЛИ НИКАКОЕ ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СПЕЦИАЛЬНЫЕ, СЛУЧАЙНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ, ПОНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ЛЮБЫМИ ДРУГИМИ ПРОГРАММАМИ), ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ. КОНЕЦ ОПРЕДЕЛЕНИЙ И УСЛОВИЙ


Предостережения и рекомендации


Перед тем, как приступить к экспериментам по установке Linux как второй ОС, очень рекомендую принять некоторые меры предосторожности. Дело в том, что вам, возможно, придется произвести переразбиение диска, изменить загрузочные записи и поэкспериментировать с загрузочными и конфигурационными файлами. Все эти действия далеко не безобидны, и результатом может стать то, что компьютер вообще перестанет загружаться. Сумеете ли вы восстановить после этого всю нужную вам информацию с диска — это еще вопрос. Мой опыт говорит о том, что оказаться в такой ситуации очень легко.

Поэтому, во-первых, необходимо изготовить загрузочную или спасательную дискету для вашей старой системы (если вы это еще не сделали). Во-вторых, стоит сохранить все ценную для вас информацию, наработанную в старой системе (сделать back-up всех ценных файлов). И, в-третьих, подготовить (разыскать, запасти) комплект установочных файлов для вашей старой системы.

И еще одна важная рекомендация: если что-то пошло не так, не паникуйте. Могу поделиться своим печальным опытом: когда я первый раз устанавливал Linux на компьютере, на котором стояла Windows NT, я быстро потерял возможность ее загружать, и, не разобравшись в ситуации, посчитал, что ничего другого не остается, как отформатировать диск и установить все заново. Теперь я понимаю, что мог бы все восстановить, если бы не принял поспешного решения. Поэтому могу сказать, что Вернер Альмесбергер прав, когда в своем руководстве по загрузчику LILO дает следующие советы оказавшимся в затруднительной ситуации.

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

Читайте документацию. Особенно в тех случаях, когда система делает не то, что вы от нее ожидаете.

Можно добавить еще один общеизвестный совет.

Смотрите log-файлы, т. е. протоколы работы системы (забегая вперед, скажу, что искать их надо в каталоге /var/log).

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

Во-первых, не спешите и внимательно читайте те сообщения, которые появляются на экране, а также вдумывайтесь в то, какие варианты вы выбираете из числа предлагаемых вам на появляющихся экранных формах. В подтверждение этого совета могу рассказать, что когда я ставил Red Hat 7.1, то автоматически давил на кнопку Next, считая, что предлагаемый по умолчанию вариант вполне приемлем. В результате, после завершения инсталляции, я не смог достучаться до компьютера ни по одному из сетевых протоколов (telnet, ftp, NFS, Samba), хотя вроде бы задавал работу компьютера в сети. Оказалось, что в варианте, предлагаемом по умолчанию, устанавливается firewall, который закрывает доступ из сети. Чтобы такой доступ открыть, надо в ходе инсталляции явно задать, какие сервисы оставить открытыми. Но мы же так спешим!

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

После того, как необходимые меры предосторожности приняты, необходимо решить, каким образом вы будете осуществлять многовариантную загрузку, и подготовить диск к установке нескольких ОС, для чего разбить его на соответствующее число разделов (partition). Но прежде, чем перейти к конкретным процедурам подготовки диска, мне представляется необходимым хотя бы кратко рассмотреть устройство диска и процедуры загрузки ОС, чтобы не вклинивать теоретические вопросы и объяснения в изложение конкретных процедур. У кого не хватает терпения на чтение этих теорий, тот может пропустить их и перейти сразу к вопросу о выборе программы-загрузчика.


Причуды regback.exe


Regback.exe - одна из самых полезных утилит, поставляемых в составе Microsoft Windows NT Server 4.0 Resource Kit. Однако она имеет некоторые изъяны. Основной недостаток связан с тем, как утилита обращается с частью реестра, содержащей установки текущего пользователя (а именно HKEY_CURRENT_USER) при создании резервной копии. Regback.exe выводит имена файлов ветвей системного реестра, копии которых она создает (например, SOFTWARE, SYSTEM, SECURITY).



Приложения в системе с двойной загрузкой


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

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

В связи с этим я стараюсь устанавливать для каждой операционной системы только те приложения, которые действительно необходимы. Windows 2000 Professional у меня используется в качестве основной ОС, поэтому там установлены приложения типа Microsoft Office. Windows 98, как правило, применяется для тестирования, поэтому там устанавливаются только тестируемые программы. Некоторые приложения, такие, как Dynalink Technologies Clip'nSave, могут понадобиться при работе с обеими операционными системами. Обе ОС используют одну и ту же копию этих программ.



Примеры awk-программ


1) awk '{print ($2, $3)}' f-awk

Результат:

И.И. 1980

А.В. 1979

С.К. 1979

И.Х. 1970

2) awk '/е/ {print ($2, $3)}' f-awk

Результат:

А.В. 1979

И.Х. 1970

3) awk '/е/ {print ($1, 2000 - $3)}' f-awk

Результат:

Петров 21

Хведоров 30

4) awk '{ s = s + $4}

END {print ("Суммарный возраст:" s)

print ("Средний возраст:" s/NR)}' f-awk

Результат:

Суммарный возраст:190

Средний возраст:47.5

5) awk '{ s += $4 }

{print("NR="NR, "NF="NF)}

END {print ("FILENAME=" FILENAME)

print ("Значение позиционной переменной" $4 "\"пусто\" \

после окончания просмотра)")

print ("Суммарный возраст:" s)

print ("Средний возраст:" s/NR)}' f-awk

Результат:

NR=1 NF=4

NR=2 NF=4

NR=3 NF=4

NR=4 NF=4

FILENAME=f-awk

Значение позиционной переменной"пусто"

(после окончания просмотра)

Суммарный возраст:190

Средний возраст:47.5



Принципы разработки


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

Модульность.

Наименьшая авторизация.

Отказоустойчивость.

Во-первых, мы сохраняем свою систему настолько простой, насколько это возможно, так что ее легко понять, и можно с большей вероятностью поддерживать ее в корректном состоянии. Это относится как к высокоуровневому проектированию, так и к реализации. Наша разработка позволяет структурно избежать известных проблем, таких как исчерпание ресурсов. При потребности мы явно обмениваем ресурсы и эффективность на надежность. Например, в ядре статически объявляются все структуры данных вместо того, чтобы динамически выделять память при необходимости. Хотя мы можем недоиспользовать некоторую память, этот подход является очень простым и никогда не приводит к ошибкам. Другим примером является то, что мы умышленно не реализовали нити. Может быть, мы заплатили за это некоторой потерей эффективности (а может быть, и нет), но зато не должны беспокоиться о потенциальных «состояниях гонок» (race condition) и синхронизации, что существенно облегчает жизнь программистам.

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


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

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


Проблемы монолитных систем


Как показано на рис. 1, в стандартной монолитной системе ядро содержит все операционную систему, скомпонованную в едином адресном пространстве и выполняемую в режиме ядра. Ядро может быть структурировано на компоненты, или модули, показанные на рисунке в виде прямоугольников с пунктирными сторонами, но между компонентами отсутствуют защитные границы. В отличие от этого, прямоугольники со сплошными сторонами соответствуют отдельным процессам, выполняемым в режиме пользователя; каждый из этих процессов выполняется в отдельном адресном пространстве, защищаемом аппаратурой MMU (Memory Management Unit, устройство управления памятью).

С монолитными операционными системами связан ряд проблем, свойственных их архитектуре. Хотя некоторые из этих проблем уже упоминались во введении, мы приведем здесь их сводку: Отсутствует должная изоляция сбоев.

Весь код выполняется на наивысшем уровне привилегированности.

Огромный размер кода предполагает наличие многочисленных ошибок.

В ядре присутствует ненадежный сторонний код.

Сложность систем затрудняет их сопровождение.

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

Предполагается корректность ядра, в то время, как только лишь его размер означает, что оно должно содержать многочисленные ошибки [27, 22, 2]. Более того, для всех операционных систем, в которых код выполняется на наивысшем уровне привилегированности, и не обеспечивается должное сдерживание распространения сбоев, любая ошибка может стать фатальной. Например, неправильно работающий драйвер устройства, предоставленный сторонним разработчиком, может легко разрушить ключевые структуры данных и вывести из строя всю систему. Реальность подобной угрозы следует из того наблюдения, что аварийные отказы большинства операционных систем случаются по вине драйверов устройств [7, 25]. Дополнительной проблемой является то, что огромный размер монолитных ядер делает их очень сложными и трудно понимаемыми. Без общего понимания ядра даже опытный программист может легко внести ошибки за счет недостаточной осведомленности о побочных эффектах своих действий.


Рис. 1. Структура монолитной системы. Вся операционная система выполняется в режиме ядра без должной изоляции сбоев.



ПРОБЛЕМЫ РУССКОГО ЯЗЫКА


Специфической проблемой некоммерческих UNIX для России остается слабая поддержка русского языка. И хотя поддержка реализована гораздо лучше, чем в коммерческих UNIX, но тем не менее она уступает имеющейся в Windows.

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

Исторически сложилось так, что поддержка русского языка - это настоящее проклятие программного обеспечения. Наши местные горе-программисты и разработчики стандартов вместе с западными производителями ПО сделали все возможное, чтобы максимально затруднить жизнь российским пользователям. При всем желании нельзя отыскать другого примера, чтобы для отображения национального языка применялось более десяти различных и несовместимых кодировок. Каждая из систем - Windows, MS-DOS, MacOS, UNIX, MVS - имеет свой набор русских кодировок. Если коммерческие UNIX ориентированы на кодировку ISO8859-5, то в некоммерческих UNIX используется главным образом KOI-8.

В режиме консоли (текстовый режим) некоммерческие UNIX русифицировать достаточно просто, о чем можно прочитать в сопроводительной документации HOWTO и на многочисленных серверах Internet. Вся процедура состоит в загрузке шрифта и переключателя клавиатуры, причем он обычно активизируется нажатием клавиши <Caps Lock>. Ряд программ, в частности Midnight Commander, работает в локализованном режиме, для чего пользователю необходимо настроить переменные локализации (LANG и другие). Тем не менее множество унаследованных программ не поддерживает даже русификацию.


В графическом режиме лучше всего использовать оболочки KDE и GNOME, поскольку они по большей части локализованы. В этом смысле особенно хороша оболочка KDE, поскольку в ее состав изначально входит переключатель клавиатуры kikbd. Тем не менее в X Window System (X11), поверх которой запускаются графические оболочки, пользователи могут столкнуться с рядом проблем. Дело в том, что при нажатии клавиш X11 транслирует их скан-коды в промежуточные символы keysym, которые и передаются приложениям. Используемая для русского языка таблица XK_CYRILLIC задействует три полубайта (коды 0x6ad-0x6ff). Эти символы понимает большинство приложений X11, но, к сожалению, далеко не все. Такие популярные программы, как Star Office, Maxwell, klyx, Gxedit, отказываются обрабатывать символы XK_CYRILLIC. Поэтому в X11 для "нестандартных" приложений вводится так называемая "хакерская" раскладка, когда для ввода русских символов применяется таблица XK_LATIN1, задействующая только два полубайта (коды 0x20-0xff). Таким образом, для работы с русским языком в X11 приходится использовать переключатель с тремя раскладками (латинской, основной кириллической и хакерской кириллической). Такой режим, в частности, поддерживает уже упоминавшийся kikbd. Другие переключатели клавиатуры можно отыскать на серверах российских любителей некоммерческого ПО. Мне, например, понравилась программа для русификации Linux kkb компании IPLabs (). Тем не менее ряд программ не понимает русского языка в принципе, хотя число их невелико.

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

Огорчение вызывает невысокое качество и ограниченный выбор русских шрифтов для X11. Кроме как в UNIX, кодировка KOI8-R нигде больше не применяется, поэтому профессиональные разработчики шрифтов не торопятся восполнить пробел.

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


Проблемы с большими дисками


В MS-DOS и первых версиях Windows доступ к дискам был организован через прерывание 13 (Int 13h) BIOS (в том числе на этапе начальной загрузки ОС). При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (C/H/S). Точнее:

AH — выбор операции;

CH — младшие 8 бит номера цилиндра;

CL — 7-6 биты соответствуют старшим битам номера цилиндра, 5-0 биты соответствуют номеру сектора;

DH — номер считывающей головки;

DL — номер диска (80h или 81h).

(Заметим в скобках, что нумерацию физических цилиндров и дорожек принято начинать с 0, а сектора на дорожке нумеруют, начиная с 1). Однако практически головок было не более 16-ти, а число секторов на дорожке — не более 63, и хотя для указания цилиндра использовалось 10 бит, все равно BIOS не мог работать с дисками объемом более 1024x63x16x512 = 528 Мбайт.

Для преодоления этого ограничения стали применять разные хитрые приемы (подробнее об этом вы можете узнать из [П4.2]). Например, Extended CHS (ECHS) или "Large disk support" (иногда обозначается просто как "Large") использует еще три незанятых бита номера головки для увеличения числа адресуемых цилиндров. Это позволило использовать "фальшивую геометрию диска" в 1024 цилиндра, 128 считывающих головок и 63 сектора/дорожку. Трансляцию Extended CHS в реальный CHS-адрес (который может иметь до 8192 цилиндров) осуществляет BIOS. Это позволяет работать с дисками, объемом до 8192x16x63x512 = 4 227 858 432 байт или 4,2 Гбайт.

Но разработчики все увеличивали плотность записи на диск, число пластин и дорожек, изобретали другие способы увеличения объема дисков. В частности, число секторов на дорожках стало разным (на более длинных дорожках, расположенных ближе к краю пластин, число секторов стали увеличивать). В результате три числа C/H/S уже перестали правильно отражать "геометрию диска", а старые версии BIOS перестали обеспечивать доступ ко всему дисковому пространству.

Тогда придумали другой прием для работы с большими дисками через Int 13h — линейную адресацию блоков ("Linear Block Addressing" или LBA).
Если не вдаваться в подробности, то можно сказать, что все сектора на диске нумеруются последовательно, начиная с первого сектора на нулевой дорожке нулевого цилиндра. Вместо CHS-адреса каждый сектор получает логический адрес — просто его порядковый номер в общем массиве секторов. Нумерация логических секторов начинается с нуля, причем нулевой сектор содержит главную загрузочную запись (MBR). В Setup BIOS поддержка преобразования линейного номера в CHS-адрес обозначается как "поддержка LBA". Таким образом, в новых версиях BIOS обычно имеется выбор из трех вариантов: "Large", "LBA" и "Normal" (последнее означает, что трансляция адресов не производится).

Но и в режиме LBA обращение к физическому диску все равно осуществляется через функции Int 13h, которые используют 3D нотацию (C,H,S). В силу этого возникает ограничение на возможный объем диска: BIOS, и, следовательно, MS-DOS и ранние версии Windows, не могли адресовать диски объемом более 8,4 Гбайт.

Надо заметить, что указанное ограничение относится только к дискам с интерфейсом IDE. В контроллерах SCSI-дисков номер сектора переводится в команды SCSI, а далее сам диск находит нужную позицию, поэтому такого ограничения на объем диска не возникает.

Еще раз хочется отметить, что все перечисленные ограничения существенны только на этапе загрузки ОС, поскольку сама Linux и последние версии Windows при работе с дисками уже не используют прерывание 13 BIOS, а используют собственные драйвера для работы с дисками. Но, прежде чем система сможет использовать собственный драйвер, она должна как минимум его загрузить. Поэтому на этапе начальной загрузки любая система вынуждена пользоваться BIOS. Это и вызывает ограничения на размещение многих систем за пределами 8 Гбайт, они не могут оттуда загружаться, хотя после успешной загрузки могут работать с дисками гораздо большего объема. Для того, чтобы понять, как можно обойти эти ограничения, нам потребуются некоторые знания о том, как происходит загрузка ОС Linux.


Процесс и программа


Вы скажете: все это замечательно, но если новый процесс - всегда копия существующего, то каким образом в системе ухитряются работать разные программы? И откуда берется самая первая из них?

Процессы, выполняющие разные программы, образуются благодаря применению имеющихся в стандартной библиотеке Unix функций "семейства exec": execl, execlp, execle, execv, execve, execvp. Эти функции отличаются форматом вызова, но в конечном итоге делают одну и ту же вещь: замещают внутри текущего процесса исполняемый код на код, содержащийся в указанном файле. Файл может быть не только двоичным исполняемым файлом Linux, но и скриптом командного интерпретатора, и двоичным файлом другого формата (например, классом java, исполняемым файлом DOS). В последнем случае способ его обработки определяется настраиваемым модулем ядра под названием binfmt_misc.

Таким образом, операция запуска программы, которая в DOS и Windows выполняется как единое целое, в Linux (и в Unix вообще) разделена на две: сначала производится запуск, а потом определяется, какая программа будет работать. Есть ли в этом смысл и не слишком ли велики накладные расходы? Ведь создание копии процесса предполагает копирование весьма значительного объема информации.

Смысл в данном подходе определенно есть. Очень часто программа должна совершить некоторые действия еще до того, как начнется собственно ее выполнение. Скажем, в разбиравшемся выше примере мы запускали две программы, передающие друг другу данные через неименованный канал. Такие каналы создаются системным вызовом pipe; он возвращает пару файловых дескрипторов, с которыми в нашем случае оказались связаны стандартный поток ввода (stdin) программы wc и стандартный поток вывода (stdout) программы dd. Стандартный вывод wc (как, кстати, и стандартный ввод dd, хотя он никак не использовался) связывался с терминалом, а кроме того, требовалось, чтобы командный интерпретатор после выполнения команды не потерял связь с терминалом. Как удалось этого добиться? Да очень просто: сначала были отпочкованы процессы, затем проделаны необходимые манипуляции с дескрипторами файлов и только после этого вызван exec.

Аналогичного результата (как показывает, в частности, пример Windows NT) можно было бы добиться и при запуске программы за один шаг, но более сложным путем. Что же касается накладных расходов, то они чаще всего оказываются пренебрежимо малыми: при создании копии процесса его индивидуальные данные физически никуда не копируются. Вместо этого используется техника, известная под названием copy-on-write (копирование при записи): страницы данных обоих процессов особым образом помечаются, и только тогда, когда один процесс пытается изменить содержимое какой-либо своей страницы, она дублируется.



Процесс загрузки ОС фирмы Microsoft


Какую бы операционную систему мы ни рассматривали, для того, чтобы ОС могла начать управлять компьютером, ее необходимо загрузить в оперативную память. Поэтому давайте кратко рассмотрим, как происходит процесс загрузки разных ОС. Поскольку нас интересует только загрузка с жестких дисков, то мы не будем рассматривать особенности загрузки с дискеты, CD-ROM и по сети. Начнем с доброй старой MS-DOS и MS Windows (не забывайте, что разработка и совершенствование персональных компьютеров шло параллельно с развитием ОС от Microsoft и решения, использованные в этих ОС, оказывали сильное влияние на те решения, которые принимались разработчиками аппаратуры).

Как вы знаете, при включении компьютера вначале запускается программа POST (Power On Self Test). Она определяет количество доступной памяти, тестирует ее, определяет наличие других компонент (клавиатура, винчестер...), инициализирует карты адаптеров. На экране обычно появляются сообщения о количестве памяти, о ее тестировании, перечень обнаруженных устройств (гибкие и жесткие диски, процессор, COM-порты и т. д.).

После завершения тестирования POST вызывает Int 19h, которое пытается найти загрузочное устройство. Поиск производится в том порядке, который определен в Setup BIOS, и осуществляется путем опроса нулевых секторов соответствующих устройств. Если диск является загрузочным, то в его нулевом секторе находится главная загрузочная запись — Master Boot Record (MBR). Последние два байта MBR — это "магическое число", которое является признаком того, что данный сектор есть MBR, а, следовательно, диск является загрузочным. Кроме "магического числа" MBR содержит таблицу разделов диска, о которой уже было сказано выше, и маленькую программу — первичный загрузчик, объемом всего 446 (0x1BE) байт.

В табл. 2.1 представлена структура главного загрузочного сектора, создаваемого при инсталляции Windows.

Таблица 2.1. Структура главного загрузочного сектора.

СмещениеСодержание
0x000Код первичного загрузчика
0x1BEТаблица разбиения диска
0x1FE"Магическое число" (0xAA55)
<
MS-DOS, Windows95 и NT записывают DOS MBR при инсталляции. Стандартное для MS содержимое MBR можно также записать командой fdisk /mbr.

Но вернемся к описанию процесса загрузки. Прерывание 19h BIOS загружает первичный загрузчик в память компьютера и передает управление этой программе. Но такой маленькой программе не под силу загрузить ОС; все, что она может сделать — это загрузить в память более мощную программу — вторичный загрузчик.

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

В разделе, отформатированном под файловую систему FAT, вторичный загрузчик занимает один сектор (512 байт). В разделе, отформатированном под файловую систему NTFS, вторичный загрузчик занимает уже несколько секторов.

Вторичный загрузчик загружает первый слой программ, необходимых для запуска операционной системы. В случае MS DOS программа-загрузчик загружает IO.SYS по адресу 700h, затем MSDOS.SYS и передает управление разделу SYSINIT модуля IO.SYS.

Если по каким-либо причинам на диске не найден активный раздел, процесс загрузки продолжается обработкой прерывания 18h. Эта ветвь реально используется очень редко, но такая возможность может быть очень полезна в некоторых ситуациях. При удаленной загрузке, когда операционная система загружается с сервера, это прерывание перенаправляется программой POST на ROM сетевой карты.

Для других ОС от Microsoft процесс загрузки происходит аналогично

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


Таким образом, загрузочные сектора DOS и Windows95 одинаковые.

Windows NT4 использует MBR DOS, но заменяет загрузочную запись активного раздела таким образом, что вместо IO.SYS загружается NTLDR. Это уже мощная программа, которая многое может сделать. В частности, она находит файл boot.ini и, если параметр timeout > 0, предлагает меню загрузки.

Каждая строка секции [operating systems] файла boot.ini определяет один из вариантов загрузки и строится по следующему шаблону

адрес_вторичного_загрузчика="название_варианта"

Адресом вторичного загрузчика может являться указание на конкретный раздел диска или на файл загрузчика. Вот пример файла boot.ini:

[operating systems] multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS" multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS [VGA mode]" /basevideo /sos C:\="Microsoft Windows" C:\BOOTSECT.LNX="Linux"

Если пользователь выбирает NT, то выполняется загрузка по адресу раздела, указанному в первой строке раздела. В строке, соответствующей Microsoft Windows, указан просто диск "C:\", так как имя загрузочного файла берется по умолчанию: bootsect.dos. Файл грузится в память и загрузка продолжается так, как если бы загрузочная запись раздела была загружена программным кодом из MBR.

Для загрузки других систем можно воспользоваться таким же приемом. Для этого в boot.ini нужно добавить строки, содержащие ссылки на другие загрузочные файлы. При выборе такой строки будет загружаться соответствующая ОС. В приведенном выше примере этим способом обеспечивается загрузка Linux. Для этого в файле C:\BOOTSECT.LNX должно быть предварительно записано содержимое загрузочной записи, создаваемой Linux (точнее — LILO, стандартным загрузчиком Linux).


Процессы в системе


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

адресное пространство (CLONE_VM); информацию о файловой системе (CLONE_FS): корневой и текущий каталоги, а также umask; таблицу открытых файлов (CLONE_FILES); таблицу обработчиков сигналов (CLONE_SIGHAND); родителя (CLONE_PARENT) - конечно, в этом случае будет порожден не дочерний, а сестринский процесс.



Продвинутые средства общения


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

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

Если два процесса обращаются таким образом к одному и тому же участку одного и того же файла, данные будут переданы непосредственно от одного процесса к другому. Конечно, периодически ядро сбрасывает данные на диск. В некоторых случаях это полезно, но когда mmap обеспечивает только общение процессов между собой, обмен с диском лишь замедляет работу. Для процессов, имеющих общего предка, можно использовать флаг MAP_ANONYMOUS, указывающий, что данные не должны попадать в файл (дескриптор файла тогда никак не используется и может быть любым).

Вызов mmap применяется также для "загрузки в память" исполняемых файлов и библиотек, так что если программа использует 25 библиотек общим объемом во много десятков мегабайт, это вовсе не значит, что она и в памяти будет занимать такое же количество мегабайт.

С помощью временных файлов можно, кроме того, синхронизировать работу процессов, используя возможности системы, предназначенные для работы с рекомендательными (advisory) блокировками файлов. Это позволяют сделать системные вызовы fcntl и его более быстрый и простой вариант flock.

Иногда создавать временные файлы нежелательно, поэтому в Linux включены также функции для общения процессов из Unix SVR4 (Unix System V Release 4). Это shmget - создание области памяти для общения процессов, semget - создание семафора, msgget - создание очереди сообщений. В версии 2.4 к ним добавились еще более мощные функции mq_open, shm_open из SUS2 (Single Unix Specification Version 2).



Профилактика Вирусов


Программный продукт DG/UX B2 Security Option обеспечивает защиту системы от вирусов с помощью Иерархической Организации Блоков Информации (Information Hierarchy Regions). Такие защищенные блоки, а также стратегия обязательного контроля за доступом (MAC), реализуемая продуктом DG/UX B2 Security Option, предоставляют защиту, включающую следующие три метода:

Предотвращение заражения системы Предотвращение выполнения зараженных пользовательских программ Предотвращение модификации контрольных записей, что позволяет отслеживать проникновение вирусов



ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ НЕКОММЕРЧЕСКИХ UNIX


Все некоммерческие UNIX комплектуются, в общем-то, одними и теми же программами.

Когда говорят о Linux и FreeBSD, то их часто рассматривают в контексте проекта GNU. Разработанный в рамках проекта GNU программный продукт обязательно должен поставляться вместе с исходным кодом, причем любой желающий может его исправить и модернизировать. За распространение продукта разработчик или дистрибьютор имеет право брать деньги, хотя продукт нередко распространяется бесплатно. Эта концепция лежит в основе лицензионного соглашения, называемого GNU General Public License (GPL).

Чтобы устранить препятствия для широкого распространения продуктов GNU, инициативная группа движения GNU ввела еще один тип лицензий - GNU Library General Public License (LGPL). Согласно GNU LGPL коммерческие продукты, не подпадающие под условия лицензии GNU GPL, тем не менее могут использовать Си-библиотеку GNU.

Распространение ядра Linux осуществляется в соответствии с лицензией GNU. В то же время ядро FreeBSD распространяется по лицензии Berkley, которая не оговаривает обязательного предоставления исходных кодов.

Что касается включаемых в дистрибутивы программ, то они подпадают под самые различные лицензионные соглашения. Значительная часть программ соответствует лицензиям GNU. Отдельную категорию составляют бесплатные (freeware) продукты, поставляемые в исходных кодах, но не имеющие никакого отношения к GNU; в частности, разработчик может запрещать взимание денег за их распространение. Некоторые программы (например, популярная программа обработки изображений xv) относятся к категории условно-бесплатных (shareware), за использование которых, в принципе, надо платить. Кроме того, некоторые бесплатные программы (в частности, Netscape Communicator) не поставляются в исходных кодах. Наконец, в оригинальные дистрибутивы нередко включаются коммерческие продукты, распространяемые по обычным для компьютерной индустрии правилам.

Для некоммерческих UNIX доступно огромное количество программ, как некоммерческих, так и коммерческих.
Любой дистрибутив содержит несколько сотен приложений, а в Internet их количество исчисляется тысячами (по некоторым подсчетам, число программ для Linux доходит до пяти тысяч).

Для некоммерческих UNIX можно найти продукты почти на все случаи жизни: для предоставления сервисов Internet, для офисных работ, для файлового сервиса и сервиса печати (в том числе с помощью эмуляции сетевого сервиса LAN Manager/Windows и NetWare), сервиса удаленного доступа и многого другого.

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

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

Что касается настольных приложений, то для Linux отсутствуют:

программы обработки графической информации;

мощные САПР;

программы распознавания текстовой информации, вводимой со сканеров;

программы инженерных расчетов и т. д.

Кроме того, имеющиеся офисные приложения слабо совместимы со ставшим стандартом де-факто пакетом Microsoft Office.

Следует иметь в виду, что абсолютное большинство некоммерческого ПО доступно не только для Linux и FreeBSD, но и для коммерческих UNIX, за что честь и хвала сторонникам GNU. Недаром идейный вдохновитель движения GNU Ричард Столлман не устает повторять, что GNU - это не Linux. Иначе говоря, разработчики GNU не ограничивают себя рамками некоммерческих ОС. Таким образом, пользователи коммерческих UNIX не чувствуют себя сколько-нибудь обделенными по сравнению с Linux.


Программы для разбиения диска


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

В составе дистрибутивов Red Hat и BlackCat ( вероятно, и в других тоже) имеется программа fips, которая служит для переразбиения диска. Однако отзывы, которые я слышал, не воодушевили меня на использование этой программы. Поэтому мой вам совет — если хотите переразбить диск без потери информации, найдите программу Partition Magic фирмы Power Quest (www.powerquest.com) и воспользуйтесь ею.

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

Во-вторых, эта программа (даже в варианте для DOS) предоставляет вам удобный графический интерфейс, так что все осуществляемые действия вы видите наглядно. Никакого сравнения с интерфейсом командной строки программы fdisk. Я пользовался 5-ой версией этой программы. Она отказывается работать под Windows 2000 и Windows NT, однако в ее дистрибутиве имеется возможность изготовить две дискеты, которые служат для загрузки компьютера в режиме DOS (вариант Caldera DR-DOS) и последующего запуска программы. Эти дискеты прекрасно позволяют переразбить и диск, на котором установлена Windows NT или 2000.

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

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



Программы для редактирования Реестра


WinHacker 95 ()

Удобна и освобождает от прямого редактирования Реестра, несмотря на свое подозрительное название.

Рис. 1

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

Рис. 2

а также писать свои подключаемые модули (plug-in) и использовать чужие. Однако будьте осторожны: если чего-то не знаете, то лучше и не трогайте. Размер программы - 1,15 Мбайт. (Рис. 1-3.)

Рис. 3

Win-eXpose-Registry ()

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

Registry Search + Replace ()

Рис. 4

Дает возможность просматривать и заменять параметры в Реестре не только локального, но и удаленного компьютера, причем в ключах определенных типов с последующим сохранением всех настроек. Размер архива программы - 0,66 Мбайт. (Рис. 4.)

Registry Cleaner ()

Когда возникают проблемы с системой после проведения экспериментов с программным обеспечением (а кто этим не занимался?), перед пользователем встает альтернативный вопрос - что же лучше: переустановить Windows или убрать все ненужные файлы, оставшиеся от стертых и неиспользуемых программ. В этом им поможет утилита MS Registry Cleaner - нужно просто выполнить инструкции, приведенные в файле справки.

Рис. 5

Анализирует Реестр Windows, исправляет ошибки и/или удаляет ненужные разделы и ключи, а также создает файл "отката" (помогающий восстановить все в первоначальном варианте). Размер архива программы - 0,8 Мбайт. (Рис. 5.)

ArkoSoft System Snapshot 1.0 ()

Рис. 6

Позволяет сделать "моментальный снимок" системы до и после инсталляции любой программы и получить отчет об изменениях, произведенных при установке. Размер программы - 0,534 Мбайт. (Рис. 6.)

Regmon 4.23 ()

Рис. 7

Помогает отслеживать и выводить (с использованием фильтров при показе) все обращения системы к Реестру. Рекомендуется для опытных пользователей! Размер программы - 51 Кбайт. (Рис. 7.)

Add/Remove Pro 1.03 ()

Рис. 8

Проверяет записи, сделанные утилитой "Установка и удаление программ", и удаляет ключи из Реестра Windows более не существующих программ. Размер программы - 154 Кбайт. (Рис. 8.)

Успехов вам в борьбе с последствиями экспериментов!