Форум О Спутниковом Интернете ТВ, сотовых телефонов, заработок в сети, Литература

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Секреты Windows 2000

Сообщений 1 страница 4 из 4

1

Секреты Windows 2000

Кто-то обожает пингвинов и готов рисовать на заборах разбитые вдребезги окна, подписываясь незамысловатым "OS/2 - forever", кто-то же, наоборот, боготворит цветастый флаг Майкрософт Windows и готов отлупасить любого, выкрикивающего "Виндовс Маст Дай". Однако и тем, и другим нужно смотреть фактам в лицо: операционными системами семейства Windows пользуется огромное количество людей. Почему? Наверное, потому, что они просты для начального обучения и удобны в использовании. Но эта первоначальная простота - иллюзорна. Для того чтобы использовать все возможности некоторых операционных систем этого семейства (особенно для администрирования не одиноко стоящего компьютера, а локальной сети), нужно обладать некоторыми знаниями как о конкретных программных инструментах, помогающих в работе, так и об основах функционирования "внутренностей ОС".

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

0

2

Часть первая
Введение в ядро NT

"Внезапно меня озарило. Мой разум опять предал меня. Был только один способ объяснить ее метаморфозы: дон Хуан, должно быть, сделал ее своей ученицей. Как иначе старая женщина могла превратиться в такое таинственное, полное силы существо? Я должен был понять это с первого взгляда. Но я, как обычно, ожидал увидеть то, что соответствовало моим представлениям о ней, а в них такая возможность не входила. "

Карлос Кастанеда, "Второе кольцо силы"

"Домашний зоопарк" операционных систем - проблема выбора

Рождение и становление операционной системы - это зачастую долгий эволюционный процесс, длящийся десятилетиями: одну версию ОС сменяет следующая, добавляются новые элементы и детали... а потом... потом семейство вымирает, как вымер, скажем, DOS или динозавры.

Операционные системы не появляются "вдруг" или "из ниоткуда", если проследить их историю, то всегда можно узнать, откуда, как говорится, уши растут. А обычно эти самые уши растут из ранних версий малораспространенных, но компактных и быстрых операционок. Так, собственно, нb для кого это не секрет, что "Майкрософт" разработал свой легендарный DOS (Disk Operation System) на основе кода, купленного за $50000 у небольшой фирмы с названием Seattle Computer Products, a Windows - уже на основе DOS. Linux, значение и место на рынке которого сейчас очень трудно оценить однозначно, изначально был ни чем иным, как изощренной фантазией Линуса Торвальдса на тему операционной системы Minix - упрощенной версии UNIX. Конечно, в процессе своей эволюции и становления от первоначального "праотца" остается очень мало, код переписывается множество раз, добавляются новые возможности, идеи, реализации. Но все же зачастую некоторые рудименты остаются - это, в первую очередь, идеи дизайна операционной системы - темное наследие прошлых лет. Как известно? из рубахи очень сложно сделать штаны, сколько новых карманов ни пришивай и пуговиц ни спарывай, их лучше будет сшить заново.

Так же сложно изначально однопользовательскую и однозадачную операционную систему превратить в многопользовательскую и многозадачную, да еще и стабильную сетевую платформу. Именно поэтому семейства операционных систем сменяют друг друга, приходят новые концепции и парадигмы, затрагивающие как строение ОС, так и стили программирования под эти платформы, но всегда остается нечто неуловимое, ускользающее от пристального взора, что объединяет целые семейства операционных систем. Для Windows это очень характерно, поэтому важно отдавать себе отчет, что общего в старых и новых системах и чем они различаются. Операционки проходят пору детства, полную многочисленных ошибок периода роста и недоработок, стадию зрелости, когда большинство ошибок исправляется, механизмы настройки и работы продумываются до мелочей, и этап старости, когда система уже не в состоянии нормально справляться с растущими задачами и потребностями пользователей. Новые возможности реализуются обычно в виде заплат, и чаще всего сделано это бывает "через одно место", так как их нормальная реализация изначально не была даже предусмотрена разработчиками, вследствие чего она и невозможна без кардинальной и полной переработки всего ядра. Так, для семейства Windows 9х (а мы все же склонны отделять его историю от истории DOS, хотя для этого нет особых оснований, кроме исключительно психологических), win3.1 - было детством, win95 - юностью, win98 - зрелостью... Билл Гейтс вкупе со Стивом Балмером, как известно, хотели вычеркнуть "старость" и обещали похоронить все семейство win9x, сделав win98 последней версией старой платформы. Но обещанного, как известно, три года ждут, особенно, если имеешь дело c такой непредсказуемой компанией, как "Майкрософт"... На свет появились и Win98SE (которая, между прочим, все еще установлена на большинстве домашних компьютеров пользователей и даже в мелких организациях), и мертворожденный младенец Win ME, и Win CE. Впрочем, все эти подрумяненные релизы старой ОС лишь ненадолго продлили ее агонию: становится совершенно очевидно, что времена win9x ушли, и час ее, как говорится, пробил. Будущее за операционными системами другого поколения, и это вовсе не обязательно будут продукты от "Майкрософт". Но и им, в свою очередь, есть что предложить взамен устаревшему продукту.

Король умер, да здравствует король, или история развития NT?

Несмотря на - или, может быть, - благодаря стремительному успеху серии Windows 3.1, позже преобразованной в Windows 95 и Windows 98, который превзошел ожидания даже своих создателей, "Майкрософт" разработала другую ветвь своих продуктов - Windows NT (где NT означает New Technology - новая технология). Грубо говоря, заслуга разработки семейства NT принадлежит даже не совсем "Майкрософт", точнее, не одной только "Майкрософт", так как изначально работы по созданию операционной системы следующего поколения велись совместно как программистами и дизайнерами из команды знаменитого Дэвида Катлера (Dave Cutler), так и специалистами голубого гиганта (IBM). Перед всеми этими, безусловно, по-своему талантливыми людьми стояла задача разработать NT так, чтобы она удовлетворяла пяти основным требованиям:

- Переносимость
- Расширяемость
- Надежность
- Совместимость
- Производительность

Основываясь на своем опыте работы с операционными системами в DEC (Digital Equipment Corporation), Катлер основной приоритет придавал проектированию операционной системы, поскольку он прекрасно сознавал, что создаваемый его группой код будет использоваться очень долго. Вследствие этого он пытался создать хорошо и цельно спроектированную систему, в противоположность тому варианту, который бы оптимально работал, в первую очередь, с оборудованием, имевшимся на тот момент времени. Кроме того, с самого начала предполагалось, что система будет предназначена для работы в качестве сервера сети, или, на худой конец, рабочей станции, следовательно, к ней предъявлялись исключительно жесткие требования относительно надежности и безопасности. А так как она должна была быть еще и переносимой, Катлер не разрешал сотрудникам оптимизировать код на ассемблере, поскольку он был бы аппаратно-зависимым. Подобный подход к проектированию операционной системы привел к тому, что первые версии Windows NT работали очень медленно даже на самых производительных персональных компьютерах того времени. Но тут сыграли свою роль два фактора: во-первых, разработчики, увидев, насколько громоздкой получилась система, существенно ее оптимизировали, а во-вторых, появились более мощные компьютеры, и проблема производительности решилась сама собой. Вслед за этим начали проявляться приятные свойства NT: разработчикам не нужно было переписывать часть кода ядра системы, достаточно было перекомпилировать уже давно отлаженный исходный код, используя более "свежий" оптимизирующий компилятор языка высокого уровня. В то же время не прекращались работы по уменьшению размера системы, повышения ее быстродействия и, разумеется, надежности (проект Daytona, названный в честь автострады во Флориде), но при этом оптимизировался не низкоуровневый код под конкретный процессор, а высокоуровневый, который работал бы быстрее на любых машинах.

Идея оказалась действительно удачной. Качество конечных продуктов сильно улучшилось, к тому же код на Си выглядел более понятным и удобоваримым, чем набор инструкций на ассемблере, а значит, подобный подход позволял с большей легкостью и оперативностью вносить изменения в ядро, при этом допускалось меньшее количество ошибок. Недаром именно так пишутся практически все современные операционные системы, начиная от Linux и заканчивая Solaris, FreeBSD и BeOs. Теперь же, бросая взгляд в прошлое, можно с уверенностью сказать, что такая установка полностью себя оправдала и в случае с творением "Майкрософт", поскольку базовая внутренняя архитектура Windows 2000 (Windows XP) принципиально не изменилась по сравнению с Windows NT, за исключением добавления поддержки Plug and Play и ACPI.

Можно констатировать, что на сегодняшний день операционные системы на основе технологии NT являются наиболее производительными, масштабируемыми и, что самое главное, хорошо отлаженными и проверенными из всех, которые когда-либо выпускала "Майкрософт". Безусловно, "Майкрософт" не единственный производитель операционных систем, но именно эта компания является фаворитом на рынке десктопных операционок, то есть операционных систем, устанавливаемых преимущественно на домашних компьютерах пользователей и применяемых в сфере малого и - частично - среднего корпоративного бизнеса. И сильных конкурентов в этом (наиболее интересующем нас) секторе рынка у нее, к сожалению, пока нет. Положение с OS/2 - хуже некуда, IBM фактически отказалась от дальнейшего развития этой платформы, BeOS канула в лету, Linux при всем нашем уважении к нему, все же борется за совершенно другую часть рынка, рынка серверных операционных систем, предназначенных скорее либо для крупного бизнеса, либо для информационных систем среднего уровня ответственности. И что бы там нb говорили оголтелые фанаты пингвинов и FreeBSD'шных чертиков, некоторая часть серверов функционирует все же под управлением NT, а не UNIX. Поэтому выход каждой новой версии Windows является очень интригующим и волнующим широкие массы общественности событием. Тем более что Windows 2000 - это не только очередной главный выпуск операционной системы Windows NT, она также рекламируется "Майкрософт" как самое существенное из всех обновлений NT. Даже в рекламу так разукрашенной и размалеванной Windows XP "Майкрософт" не вложила столько же средств и усилий. Как мы видим, "мелкомягкие" намериваются сделать эту операционную систему базой для всех своих будущих решений (о чем они и сами заявляют): от потребительских продуктов до высокопроизводительных серверов, причем уже сейчас сделаны серьезные шаги в этом направлении. На самом деле, даже Windows 2000 - это не одна операционная система, а четыре, собранныt на одном ядре: Professional, Server, Advansed Server и Datacenter Server. Windows 2000 Professional - наиболее популярная на сегодня - действительно, как следует из названия, предназначена для установки либо на небольшие изолированные компьютеры профессиональных или причисляющих себя к таковым пользователей, либо на клиентские компьютеры в сети. Самая же мощная - Advanced Server - может устанавливаться на крупные сетевые серверы. Ее мощностей вполне хватит даже на крупную корпорацию, судите сами: возможность создания масштабируемых кластерных систем (возможность построения систем с высокой частотой запросов, до 4 узлов) корпоративная архитектура памяти (всего - до 64 Гбайт физической памяти) масштабируемая мультипроцессорная симметричная обработка, поддержка до 32 процессоров. Вопрос только в том, будут ли операционные системы от "Майкрософт" использовать в крупных корпорациях. Но если "Майкрософт" при разработке новых операционных систем будет придерживаться той же политики, которой она придерживалась при создании Windows 2000, она сможет вернуть доверие, утраченное из-за не очень стабильной работы win9x. Так что, нравится вам это или нет, один из вариантов Windows 2000 предназначен стать в будущем вашей настольной (или не очень) операционной системой (если вы, конечно, придерживаетесь операционных систем от "Майкрософт"), а потому, как нам кажется, возможности этой, бесспорно, качественной операционной системы следует рассмотреть повнимательнее.

Отличия Windows 2000 от версий Windows 98 и Windows NT 4.0

Всем известно, что Windows NT всегда отличалась в лучшую сторону от своей, так сказать, "домашней сестры" - Windows 95 - 98. Это и более надежное ядро, и полностью реализованный защищенный режим, и повышенная безопасность. Кроме того, файловая система NTFS (что расшифровывается как NT File System) дает гораздо больше возможностей, чем устаревшая FAT16 или пришедшая ей на смену FAT32 с ней вам не придется больше беспокоиться о вечно потерянных цепочках и кластерах. Традиционно первые системы NT использовались почти исключительно на серверах, там, где было неудобно или по каким-то причинам невозможно применение UNIX. Но, как известно, ничто не живет в человеке так долго, как старые привычки и традиции, поэтому даже сейчас можно очень часто слышать высказывания типа: "Зачем мне дома Win2000, я же играть собираюсь..." Конечно, у каждого свои запросы, но если вам нужна безопасность данных, и вы не хотите, чтобы "злые хакеры" запросто смогли узнать ваш пароль на доступ к Интернету, или вам надоели постоянно зависающие приложения то, возможно, вам следует подумать об установке новой операционной системы. Ну а если вы используете компьютер на работе, и вам важна конфиденциальность и, главное, сохранность информации, то причин использовать именно NT у вас становится еще больше. Еще одно преимущество Win2000 - она официально локализована для русскоязычных пользователей, причем не только настольный вариант, но и более мощные серверные версии.

Если с отличиями от серии 9x все более или менее понятно - Windows 2000 имеет принципиально другое внутреннее устройство, подробнее про которое будет написано чуть ниже - то об отличиях от NT 4.0 нужно поговорить отдельно. В первую очередь, следует упомянуть следующие элементы, которые подверглись изменению:

- Графический интерфейс - интерфейс был оптимизирован для упрощения доступа к информации посредством личных меню и списков последних по времени использования приложений.
- Поддержка оборудования - добавлена поддержка Plug and Play (PnP), Advanced Configuration and Power Interface (ACPI), USB, IEEE 1394 (FireWire), а также новая модель драйверов мультимедиа-устройств (WDM).
- Простота конфигурирования - усовершенствованны средства установки и конфигурирования приложений и аппаратных устройств.
- Простота администрирования - введение консоли управления Microsoft Management Console (MMC).

Также нужно отметить тот факт, что благодаря многочисленным изменениям во внутренних алгоритмах работы, Windows 2000 стала работать быстрее и эффективнее, чем NT 4.0 (в основном это касается приложений, использующих графику и, в том числе, графический интерфейс GUI). Немаловажен и тот факт, что теперь вам гораздо реже придется перезагружать систему после внесения каких-либо изменений в настройки ее работы.

На этом, на наш взгляд, можно завершить краткое описание Windows 2000, надеюсь, мы ввели вас в курс дела относительно истории ее разработки и смогли убедить в преимуществах использования именно этой версии. Впрочем, не будет лишним еще раз напомнить, что мы обсуждаем Windows 2000, а не ХР, потому что она является СЕРВЕРНОЙ операционной системой и "Майкрософт" уделяет значительно больше внимания устранению ошибок и технической поддержки Windows 2000. Тем не менее, из-за того что системы 2000 и XP имеют схожее строение, почти всегда мы употребляем первую, можно смело ставить и вторую - справедливость сказанного не изменится.

0

3

Часть вторая.
Внутренняя кухня Windows 2000.

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

Карлос Кастанеда, "Учение дона Хуана"

Итак: что хорошего предлагает нам Windows 2000? В первую очередь, это, конечно, защищенность данных и отказоустойчивость. Звучит хорошо, но вдумчивого и любопытного читателя должно интересовать, что же стоит за общими словами и заявлениями рекламных представителей "Майкрософт". "Да, масштабируемость да, высоко-производительность да, повышенная надежность... все это мы уже слышали тысячи раз, и тысячи раз потом снимали лапшу с ушей и имели на деле то, что имели... - может сказать он. - А что же по существу?" - и будет совершенно прав. Голые слова, не подкрепленные фактами, так и останутся бесполезным сотрясанием воздуха. По существу же, мы имеем операционную систему, в которой разработчики, по крайней мере, попытались применить на практике очень разумные идеи, повышающие стабильность системы и ее помехозащищенность. Данные и код операционной системы изолированы от пользовательских приложений целым рядом специальных методов. Для предотвращения доступа приложений к критически важным данным операционной системы и устранения риска их модификации Windows 2000 использует два режима доступа к процессору: пользовательский и режим ядра. Стоит заметить, что хотя на самом деле в архитектуре процессоров x86 предоставлено четыре уровня привилегий (так называемых колец), на которых могут работать процессоры, "Майкрософт" поступила, как всегда, достаточно оригинально, и решила использовать только два из них: нулевой уровень для исполнения в режиме ядра и третий - для пользовательского режима. С другой стороны, разработчиков тоже можно понять: мечта о мировом господстве на рынке операционных систем не дает им покоя, поэтому NT разрабатывалась так, чтобы работать не только на процессорах фирмы Intel, но также, например, на Digital Alpha или IBM PowerPC, которые могли иметь только два уровня привилегий. Как уже упоминалось, Windows 2000 основана на концепции микроядра (microkernel), а значит, разработчики ОС постарались минимизировать объем кода, исполняемый в режиме супервизора, то есть в режиме, при котором код обладает возможностью прямого доступа ко всему аппаратному обеспечению и ко всей памяти. Естественно, что в таком случае только данный код может управлять работой всех устройств и предоставлять программам базовые сервисы, такие, как, например, выделение (или отказ в выделении) памяти, доступ к дисковой подсистеме и т. д. От работоспособности микроядра полностью зависит работоспособность компьютера в целом, поэтому к нему предъявляются достаточно высокие требования:

- высокая надежность,
- высокая производительность,
- небольшой объем кода (это особенно актуально для ОС реального времени).

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

Концепция микроядра подразумевает, что фактически все компоненты операционной системы, за исключением небольшого базового программного модуля (который и является микроядром), работают в пользовательском режиме на равных условиях со всеми остальными программами, работающими в системе. Очевидно, что отказоустойчивость всей системы при таком подходе возрастает, так как сбой одного из компонентов приводит к минимальному ущербу, при этом всегда остается возможность этот компонент перезапустить. Грубо говоря, если только ядро осталось после сбоя "живым", нажатие Ctrl+Alt+Del приведет к появлению окна "Безопасность Windows", с помощью функций которого можно решить большинство проблем, причем это произойдет немедленно, так как соответствующий поток процесса ядра при обычных условиях имеет наивысший приоритет. Если же вы обладаете правами администратора, у вас есть очень простой способ "подвесить" систему: нужно всего-то написать программу, которая будет к некоторому числу добавлять по единичке, пока не будет достигнуто значение, скажем, 1045 (те, кто хоть раз занимался программированием, меня поймут).

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

Но вернемся к микроядру. Кроме всего прочего, система, основанная на концепции микроядра, позволяет производить более гибкое конфигурирование, так как любой из компонентов ОС можно легко заменить на другой, поддерживающий точно такой же программный интерфейс. На самом деле, для увеличения производительности Windows 2000 использует некий гибрид микроядра и монолитного дизайна, так как некоторые ее базовые компоненты, например, диспетчер процессов и диспетчер виртуальной памяти, все-таки функционируют в режиме ядра - это позволяет им взаимодействовать между собой не через медленные механизмы межпроцессорной передачи данных (передачи данных между несколькими программными процессами), а используя общую память. Вторая причина включения дополнительного кода в режим ядра кроется в том, что процессор, занятый выполнением некоторой задачи, реализуемой соответствующим процессом (или, как говорят, работающий в определенном контексте), работает с текущими значениями процессорных регистров, а также указателей на используемую память (стек, данные, исполняемый код). Эти значения различны для различных потоков, поэтому, прежде чем перейти на выполнение другой программы, реализуемой другим процессом, процессор должен сохранить текущий контекст, а затем загрузить контекст нового процесса, на выполнение которого он переключается. Данная процедура называется переключением контекста и может занимать существенное время. Использование гибридного дизайна позволяет снизить количество переключений контекста. Хотя, теоретически и это несколько, снижает надежность системы, все равно она оказывается не в пример больше, чем у windows 9x. За счет полностью реализованного режима виртуальной машины микроядра обеспечиваются многие дополнительные возможности, недоступные, скажем, Windows 98. Это, в первую очередь, обеспечение приложениям индивидуального адресного пространства для каждого процесса и предоставление уровня защищенности не хуже, чем по стандарту C-2/Е-3, здесь ключевую роль играет то, что Windows 2000 отказывает процессам, обращающимся к оборудованию и памяти, которые им не принадлежат. Достигается это достаточно простыми методами, например, каждая страница в виртуальной памяти помечается тэгом, определяющим, в каком режиме должен работать процессор для чтения или записи данной страницы памяти. Таким образом, страницы системной памяти оказываются недоступными для всех процессов, не работающих в режиме ядра. При попытке выполнения любой запрещенной операции центральный процессор автоматически генерирует исключение, и управление передается микроядру NT. Микроядро определяет, разрешено вызвавшей исключение программе выполнять такую операцию, или нет. Если операция признана несанкционированной, управление передается программе Dr.Watson, которая оповещает о возникшей ошибке пользователя, а система в этот момент быстренько завершает работу приложения, попытавшегося выполнить незаконное с точки зрения ОС действие. Естественно, подобный алгоритм работы - это не особая и сверхгениальная разработка талантливых программистов из "Майкрософт", а хорошая реализация тех аппаратных возможностей "железа", которые появились в современных микропроцессорах.

Для того чтобы обратиться к оборудованию или памяти, а также совершить некоторые другие операции, недоступные в пользовательском режиме, приложения (а также многие подсистемы самой Windows 2000, которые не работают в режиме ядра) обращаются к системным вызовам микроядра ОС, которые также называют естественным API. В состав этого API входит более 250 функций, обращение к которым осуществляется при помощи системных вызовов, основанных на программных исключениях. Все вызовы API обслуживаются как системными службами NT, так и модулем NT Executive - "сердцем" операционной системы, над которым так дорожит и трясется "Майкрософт".

Модуль NT Executive представляет собой несколько программных потоков, которые закоренелые программисты-системщики почему-то предпочитают называть рабочими потоками естественно, все эти потоки выполняются в режиме ядра. Код практически всех подсистем этого модуля находится в файле ntoskrnl.exe, кроме, разве что, подсистемы win32, код которой расположен в файле win32k.sys, и уровня абстракции оборудования HAL (Hardware Abstraction Layer), который содержится в файле halxxxxx.dll, где xxxxx зависит от типа используемого компьютера. NT Executive сосредотачивает все самые важные части ОС:

- Ядро - это основная часть Windows 2000, в реализации которой кроется вся мощность и красота платформы NT. Прежде всего, ядро отвечает за выделение памяти для приложений и распределение процессорного времени, то есть, фактически, за реализацию многозадачности. Для этого в состав ядра входит так называемый планировщик потоков (threads scheduler), который назначает каждому из потоков один из 32 уровней приоритета. Уровень 0 зарезервирован для системы. Уровни от 1 до 15 назначаются исполняемым программам, а уровни от 16 до 31 могут назначаться только администраторами. Планировщик делит все процессорное время на кванты фиксированного размера (как менять размер кванта, еще будет рассказано в следующих частях нашей статьи), при этом каждый программный поток выполняется только в течение отведенного ему времени, и если к окончанию кванта он не освобождает процессор, планировщик в принудительном порядке приостанавливает этот поток и меняет контекст процессора, настраивая его на выполнение другого потока, обладающего тем же приоритетом. Ядро также осуществляет всю работу, связанную с обработкой программных и аппаратных прерываний.

- Уровень абстракции оборудования (HAL) - это прослойка между операционной системой и аппаратурой компьютера. HAL имеет свой собственный API, предназначенный для транслирования обращений всех приложений и драйверов в конкретные команды процессора, учитывающие его внутреннюю структуру и нюансы работы. HAL и ядро написаны на языке низкого уровня, в то время как остальные компоненты ОС реализованы на языке C и C++, поэтому именно они отвечают за переносимость NT на системы с другой архитектурой. На данный момент Windows 2000 есть в версиях как для процессоров PC совместимых компьютеров (Pentium и старше), так и для нового перспективного семейства 64-битных процессоров EPIC (Itanium, Itanium-2).

- Диспетчер ввода-вывода (I/O Manager) - интегрирует добавляемые в систему драйверы устройств в операционную систему Windows 2000.

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

- Диспетчер процессов - предоставляет интерфейс, при помощи которого другие компоненты Windows NT Executive, а также приложения пользовательского режима могут манипулировать процессами и потоками. Во время работы диспетчер процессов сопоставляет каждому процессу и потоку идентификатор процесса (PID - Process Identifier) и потока (TID - Thread Identifier) соответственно, а также карту адресов и таблицу дескрипторов.

- Диспетчер виртуальной памяти - служит для управления и организации подсистемы памяти, позволяет создавать карты адресов для процессов и следит за корректностью использования адресного пространства приложениями (то есть, следит за общим доступом к памяти и осуществляет защиту страниц в режиме копирования при записи). Диспетчер виртуальной памяти также обеспечивает возможность отображения файлов на память, используемую для загрузки в оперативную память исполняемых файлов и файлов динамических библиотек. Еще в Windows NT4.0 существовала так называемая Защищенная Модель памяти, которая (в отличие от DOS-подобных ОС) позволяла изолировать каждый процесс друг от друга и, что самое главное, от кода самой ОС. Диспетчер виртуальной памяти представляет физическую память для пользовательских приложений таким образом, что каждому процессу выделяются отдельные 4Гб виртуального адресного пространства, из которых младшие 2Гб используются непосредственно процессом по своему усмотрению, а старшие 2Гб - отводятся под нужды системы, причем они - общие для всех процессов. При этом каждый процесс "думает", что он - единственный, запущенный в системе. Но здесь кроется некоторое затруднение: многие 16-разрядные программы при своей работе обмениваются данными между собой напрямую, используя одни и те же участки памяти, а это неприемлемо для Windows NT. В этом случае такие программы все же запускаются и предоставляют разделяемую память, где они могут обмениваться данными. Эта память является нестраничной областью физической памяти, которая может быть спроецирована на виртуальное адресное пространство нескольких процессов, и таким образом они смогут взаимодействовать друг с другом. Как мы видим, самое главное, чем занимается диспетчер виртуальной памяти - это видно из его названия - организация логической памяти, размер которой больше размера физической, установленной на компьютере. Этот трюк достигается благодаря тому, что страницы памяти, к которым долго не было обращений и которые не имеют атрибута неперемещаемых, сбрасываются диспетчером в файл pagefile.sys на винчестер и удаляются из оперативной памяти, освобождая ее для других приложений. В момент, когда происходит обращение к данным, находящимся в перемещенной на винчестер странице, диспетчер виртуальной памяти незаметно для приложения копирует страницу обратно в оперативную память, и только затем обеспечивает доступ к ней. Этот механизм обеспечивает выделение дополнительной памяти программам, которые нуждаются в ней, и при этом следит за тем, чтобы все работающие в системе программы обладали достаточным объемом физической памяти для того, чтобы продолжать функционирование.

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

- Win32 User и GDI - выполняют все функции, связанные с пересылкой системных сообщений и отображением информации на экране. До Windows NT 4 эти серверные компоненты функционировали в пользовательском режиме в качестве одной из составных частей подсистемы Win32.

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

Остальные компоненты операционной системы выполняются в пользовательском режиме, часто их называют подсистемами. Например, в состав Windows 2000 входит подсистема безопасности и подсистемы, предоставляющие программам функции таких распространенных операционных сред, как DOS, OS/2, Win16, POSIX, а также Win32. Основное назначение операционной среды - предоставления интерфейса, а также эмуляция работы операционных систем, отличающихся от Windows 2000. Проще говоря, операционная среда добавляет в систему Windows 2000 дополнительные возможности и новые системные вызовы, отличающиеся от вызовов естественного API-ядра. Подсистемы операционных сред загружаются только в случае, если возникнет необходимость их использования. Каждая подсистема выполняется как отдельный процесс пользовательского режима. Таким образом, каждая подсистема защищена от сбоев, вызванных другими подсистемами, именно благодаря этому платформа Windows 2000 функционирует более стабильно, чем операционные системы линейки Windows 9x. Что кажется наиболее удивительным, Win32 API не является родным для Windows 2000, а реализован так же, как и, скажем, поддержка DOS API. Это замечание, однако, не совсем верно: естественный API очень похож на Win32 API, тем не менее, с ним несколько сложнее работать (между некоторыми функциями Win32 и некоторыми функциями естественного API может существовать взаимнооднозначное соответствие, однако часть функций Win32 для выполнения своей задачи обращаются к нескольким функциям естественного API-ядра), кроме того, он не документирован. Поэтому, хоть приложению никто и ничто не помешает действовать в обход интерфейсов, предоставляемых операционными средами, и обращаться к естественному API напрямую, компания "Майкрософт" крайне не рекомендует использовать такую возможность.

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

0

4

Часть третья. Модель безопасности в Win NT/2000

"Сила зависит лишь от того, какого рода знанием владеет человек. Какой смысл в знании вещей, которые бесполезны? Они не готовят нас к неожиданной встрече с неизвестным".
Карлос Кастанеда, "Учение дона Хуана"

Защита данных в Windows 2000 построена весьма эффективно и гарантируется многоуровневой схемой защиты как от случайной их потери при работе, так и от умышленного повреждения или нарушения условий конфиденциальности и целостности. Концепции, лежащие в основе системы безопасности операционной системы Windows 2000, нельзя назвать революционными: все основные идеи и механизмы достались ей в наследство от прежней системы Windows NT 4.0, где они уже доказали свою состоятельность и эффективность. Говоря иначе, в основе системы безопасности новой операционной системы, как и ранее, лежат понятия "дескриптора безопасности" (SD, Security Descriptor) и "списка управления доступом" (ACL, Access Control List). Но в то же время в новой операционной системе были включены дополнительные возможности (например, поистине мощные средства, которые предоставляет использование механизмов Active Directory) и получили дополнительное развитие старые средства. К сожалению, некоторые из них доступны только для тех пользователей, которые работают под Windows 2000 Professional и входят в группу, управляемую сервером на базе Windows 2000 Server. А наиболее полно они реализуемы лишь в случае создания полноценного домена с разделяемыми функциями серверов, созданными на их базе контроллерами доменов и специальными серверами, определяющими исключительно параметры безопасности. Для реализации новых идей используются различные методы большинство из них предназначено для работы в сети, вследствие чего они малоинтересны обычному пользователю, поэтому мы вначале рассмотрим принципы, общие для любого компьютера, работающего под управлением Windows 2000.

Любое приложение (программа), запускаемое под управлением Windows 2000, автоматически начинает использовать возможности, обеспечивающие его безопасность. То есть, какое бы приложение не было бы запущено, операционная система (И ТОЛЬКО ОНА) контролирует доступ к своим ресурсам, таким как файлы, память и аппаратные устройства. Что интересно, разработчики Windows 2000 пошли еще дальше и решили централизовать доступ вообще к любым ресурсам системы (даже к таким достаточно абстрактным, как окна, процессы и потоки). Поэтому приложение, работающее в Windows, будет защищено от модификации исполняемого кода и данных со стороны других "некорректно" работающих приложений, да и просто нехороших людей, задумавших сломать вам систему. Кроме этого, возможно программное управление правами доступа к особенно критичным в смысле безопасности объектам со стороны отдельных пользователей. Таким образом, обеспечивается многоуровневая система защиты. Данные защищены настолько хорошо, что столкнуться с проблемами доступа к ним при этом могут даже администраторы, обладающие всеми полномочиями при управлении системой, если они не выполняют простейших правил обеспечения безопасности. Например, если не удается восстановить операционную систему после ее выхода из строя и невозможно воспользоваться сертификатом, с помощью которого производилось шифрование, то доступ к данным, хранящимся на томах хранения информации с применением EFS, будет невозможен из любой другой работающей системы, куда они будут перенесены. Поэтому сертификаты всегда желательно копировать на какой-нибудь надежный резервный носитель информации, который будет храниться в хорошо защищенном от постороннего доступа и вредных факторов воздействия месте.

Как известно, при разработке Windows 2000 учитывалось то, что она должна удовлетворять уровню безопасности C2, разработанному оборонными ведомствами США. Базовые принципы уровня безопасности C2 это:

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

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

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

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

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

Эти требования учитывались уже на этапе проектирования операционной системы и лежат в основе работы самых первых версий Windows NT, поэтому Windows 2000 уже на уровне ядра поддерживает объектную модель защиты. Надо сказать, что никакая другая компромиссная реализация функций, позволяющих работать системе паролей в ранних версиях Windows, сделанная на более высоком уровне (такая, например, как применение отдельных программных пакетов или встраивание соответствующих драйверов, патчей и библиотек в операционную систему) не смогла бы предоставить такого уровня защищенности при той скорости работы, которая достигается в NT. И именно требования безопасности явились катализатором и причиной, заставившей "Майкрософт" писать совершенно новую операционную систему почти с нуля и попрощаться с веткой Windows 9x. Объектная модель защиты подразумевает, что любой ресурс рассматривается системой Windows 2000 как объект, а это означает, что он обладает своими собственными свойствами (атрибутами), которые могут описывать, в том числе, и его поведение с точки зрения безопасности, а также включает в себя данные и все те функции, которые могут потребоваться для манипулирования этими данными. Возможностью прямого доступа к объектам (а значит и к ресурсам) обладает только сама Windows 2000, остальные приложения могут осуществлять доступ к ресурсам исключительно при посредничестве операционной системы путем вызова ее функций и под контролем системы безопасности ОС. Возможности объекта определяются его типом и теми атрибутами, которые были присвоены объекту при его создании (они могут быть изменены с течением времени).

Краеугольным камнем, на котором базируется вся реализация защиты данных, является пользовательская учетная запись или на сленге администраторов и ветеранов NT - аккаунт. Учетная запись - это своего рода пропуск, который позволяет пользователю обращаться к ресурсам системы и однозначно определяет, с какими ресурсами он может работать и каким образом. Каждый пользователь, который регулярно использует компьютер, должен обладать собственной индивидуальной учетной записью. Для тех же, кто входит в систему нечасто, существует одна на всех учетная запись - гость, - которая обладает, как правило, минимумом прав доступа. Для облегчения жизни администратору (а он тоже не бог, как может показаться некоторым неискушенным людям, а всего лишь человек) несколько учетных записей можно объединить в группу и назначать унифицированные права доступа всем ее членам, а не каждому пользователю в отдельности. Это уже относится к назначению групповых политик и обычно обсуждается при рассмотрении приемов администрирования, что мы и сделаем в одной из следующих статей. Вся информация об учетных записях и группах хранится в централизованной базе данных. В Windows NT 4, а также в Windows 2000 эта база называется SAM (Security Accounts Manager). В базе данных SAM каждый пользователь и каждая группа, а также каждый компьютер идентифицируется уникальным идентификатором безопасности SID (Security Identifier), который каждый раз при создании новой учетной записи автоматически генерируется ОС совершенно случайным образом и никогда не используется повторно. Соображения уникальности заставляют систему использовать в качестве SID число, а не символьную запись. Символьные обозначения учетных записей просто ставятся в соответствие SID'у, так делается только для удобства работы администратора. Из вышесказанного вытекает, что, если вы по ошибке удалите какую-либо учетную запись, то восстановить ее будет уже невозможно, так как если вы попытаетесь создать новую запись с таким же символьным именем, ОС все равно сгенерирует новый SID, который, естественно, не будет соответствовать по наполнению предыдущему. Это обстоятельство обязательно следует учитывать при работе с Windows 2000.

Атрибуты защиты каждого объекта (будь то реестр, файл или общий ресурс) находятся в его дескрипторе защиты SD, который предоставляет сведения о владельце объекта (то есть содержит SID владельца) и дискреционный список управления доступом к объекту (DACL, Discretionary Access Control List). Дискреционный список управления доступом (часто называемый просто списком управления доступом) содержит информацию о том, какие действия запрещается или разрешается выполнять тем или иным пользователям или группам пользователей по отношению к данному объекту. То есть, он представляет собой некий перечень записей управления доступом ACE (Access Control Entry), каждая из которых соответствует некоторому пользователю или группе пользователей (содержит соответствующие SID), которым разрешен или запрещен доступ к данному объекту в форме, определяемой ACE. Помимо дискреционного списка управления доступом дескриптор SD включает в себя системный список управления доступом SACL или System ACL, который необходим для работы системы аудита доступа к ресурсам (системы протоколирования). Система аудита осуществляет слежение за доступом к объектам безопасности и протоколирует информацию об удачных и неудачных попытках доступа к ним в журнале аудита. Благодаря механизмам аудита администратор может узнать, кто и когда пользовался интересующим его ресурсом системы, или пытался им воспользоваться, если в доступе было отказано.

При загрузке Windows предложит вам зарегистрироваться в системе от имени одного из пользователей, для которых имеется учетная запись. При этом введенные данные сравниваются с теми, которые хранятся в операционной системе, и на основании результата сравнения принимается решение о регистрации (или отказе в доступе). В случае успешной регистрации, пользователю системой WinLogon назначается токен доступа (access token), который в дальнейшем будет присваиваться каждому процессу, который запустит пользователь. Токен содержит информацию о самом пользователе, группе, в которую он входит, привилегиях и правах доступа, то есть содержит SID пользователя и SID'ы всех групп, в которые он входит. При попытке процесса обратиться к какому-либо объекту производится поиск ACE, соответствующего обратившемуся процессу, в дискреционном списке ACL этого объекта. На основе сравнения токена доступа и ACE принимается решение о разрешении или запрещении доступа процесса, запущенного данным пользователем к объекту. Как мы видим, уже на достаточно низком уровне система неплохо защищена от возможных попыток несанкционированного доступа.

Еще одно средство защиты данных, интегрированное в Windows 2000, - это файловая система EFS (Encrypting File System), являющаяся дополнением к NTFS 5.0 и позволяющая производить шифрование файлов "на лету", т. е. как шифрование, так и дешифровка прозрачны для пользователя и для программ. Степень криптостойкости у этого метода на удивление высокая, что обеспечивается применением шифрования с комбинированным несимметричным (открытым) ключом, в который, к тому же, вносятся псевдослучайные изменения. При первой попытке зашифровать некоторый файл пользователю выдается системой сертификат, который содержит всю необходимую информацию по дешифровке и управлению безопасностью. Этот сертификат всегда желательно скопировать на какой-нибудь надежный носитель, поскольку в случае его утраты невозможно будет открыть ни один из зашифрованных файлов (система сообщит вам, что у вас нет прав доступа к нему). Ну и напоследок, хочется заметить, что EFS частично входит в ядро Windows, что позволяет наиболее эффективно обеспечивать сокрытие данных.

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

В Windows 2000 широко используются алгоритмы шифрования данных с открытым ключом, и они уже изначально встроены в систему. В первую очередь, эти средства позволяют по защищенным каналам обмениваться информацией внутри домена. Основа всей системы сетевой безопасности в Windows 2000 - это набор протоколов и методов взаимодействия с общим названием (уже одно оно очень многого стоит!) Kerberos. Эта спецификация предоставляет возможность установления защищенного канала связи между двумя хостами в незащищенной сети с их предварительной аутентификацией. В отличие от протокола Kerberos, который больше подходит для открытых сетей, средства безопасности протокола IP обеспечивают защищенность всей сети. При этом возможно централизованное управление безопасностью и назначением профилей безопасности. Данные предохраняются от перехвата и копирования на протяжении всего пути следования. Для надежной передачи информация шифруется с применением открытых или закрытых ключей. Шифрование с открытым ключом требует больших затрат ресурсов и поэтому применяется только в тех случаях, когда объем данных сравнительно невелик. Если объем большой, то они шифруются с применением закрытого ключа, который затем шифруется открытым.

Еще одна очень удобная возможность обеспечить сохранность данных при передаче их по сети - это использование политик безопасности IP. Защита данных в этом случае также обеспечивается применением алгоритмов шифрования и сертифицирования (Diffie-Hellman, HMAC, DES-CBC), причем они "прозрачны" как для клиентских программ, так и для пользователей. Предполагается, что путь следования данных с одного компьютера на другой неизвестен и, возможно, небезопасен.

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

0