<<
>>

Windows ХР

Первая машина IBM PC, выпущенная в 1981 году, была оснащена 16-разрядной операционной системой реального режима, ориентированной на индивидуального пользователя и имевшей интерфейс командной строки.
Она называлась MS-DOS 1.0. Эта операционная система состояла из находящейся в памяти 8-килобайтной программы. Через два года появилась более мощная 24-килобайтная система MS-DOS 2.0. Она содержала процессор командной строки (оболочку), и многие ее функции были заимствованы у системы UNIX. В 1984 году компания IBM выпустила машину PC/AT с операционной системой MS DOS-3.0, объем которой к тому моменту составлял уже 36 Кбайт. С годами у системы MS-DOS появлялись все новые и новые функции, но она при этом оставалась системой командной строки.

Вдохновленная успехом Apple Macintosh, компания Microsoft решила создать графический пользовательский интерфейс, который она назвала Windows. Первые три версии Windows, включая Windows 3.x, были не «настоящими» операционными системами, а графическими пользовательскими интерфейсами на базе MS-DOS.

Все программы работали в одном и том же адресном пространстве, и ошибка в любой из них могла привести к «зависанию» всей системы.

В 1995 году появилась система Windows 95, но она не знаменовала собой отказ от MS-DOS, просто на смену прежней версии MS-DOS пришла новая — MS-DOS 7.0. Windows 95 и MS-DOS 7.0 в совокупности имели характерные особенности развитой операционной системы, в том числе поддерживали виртуальную память, управление процессами и мультипрограммирование. Однако операционная система Windows 95 не была полностью 32-разрядной программой. Она содержала большие фрагменты старого 16-разрядного кода (с небольшими вкраплениями 32-разрядного) и по-прежнему использовала файловую систему MS-DOS со всеми ее недостатками. Единственными изменениями в файловой системе стали увеличение длины имен файлов (ранее в MS-DOS длина имен файлов не должна была превышать 8 + 3 символов) и снятие прежнего ограничения (равного 65 536) на количество дисковых блоков.

Даже в системе Windows 98, вышедшей в 1998 году, 16-разрядный код MS-DOS (на этот раз версии 7.1) все еще присутствовал.

Система Windows 98 не слишком отличалась от Windows 95, хотя часть функций перекочевали от MS-DOS к Windows, а дисковый формат, подходящий для дисков большего размера, стал стандартным. Основным различием был пользовательский интерфейс, который объединил рабочий стол, Интернет и телевидение, сделав систему более автономной. Именно это и привлекло внимание министерства юстиции США, которое обвинило Microsoft в нарушении антимонопольного законодательства. Через некоторое время в свет вышла несколько усовершенствованная редакция Windows 98 под именем Windows Millenium Edition (ME), но просуществовала она недолго.

Во время всех этих событий компания Microsoft разрабатывала совершенно новую 32-разрядную операционную систему. Эта новая система называлась Windows New Technology (новая технология Windows), или сокращенно Windows NT[27]. Изначально предполагалось, что она заменит все операционные системы, предназначенные для компьютеров на базе процессоров Intel. Однако ее распространение шло очень медленно и позднее была переориентирована на более дорогостоящие компьютеры. Вторая версия Windows NT, названная Windows 2000, имела гораздо больший успех, в том числе и в сегменте домашних компьютеров. Последовательницей Windows 2000 стала система Windows ХР, которая представляет собой не что иное, как слегка усовершенствованный вариант Windows 2000.

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

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

MS-DOS и все предыдущие версии Windows были рассчитаны на одного пользователя. Windows ХР поддерживает мультипрограммирование, поэтому на одной и той же машине в одно и то же время могут работать несколько пользователей[28]. Например, сетевой сервер позволяет нескольким пользователям сети одновременно войти в систему, причем каждый из них получает доступ к собственным файлам.

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

Windows ХР в отличие от Windows 95 имеет модульную структуру. Она состоит из небольшого ядра, которое работает в привилегированном режиме, и нескольких серверных процессов, работающих в пользовательском режиме. Пользовательские процессы взаимодействуют с серверными процессами в соответствии с моделью клиент-сервер: клиент посылает запрос серверу, а сервер выполняет требуемую работу и отправляет результат клиенту. Модульная структура позволяет переносить Windows ХР на некоторые компьютеры, не относящиеся к семейству Intel (DEC Alpha, IBM Power PC и SGI MIPS). Однако из соображений производительности, начиная с Windows NT 4.0, большая часть системных функций была перенесена обратно в ядро.

Можно до бесконечности долго рассказывать о структуре и интерфейсе Windows ХР, но поскольку в различных операционных системах нас в первую очередь интересуют виртуальные машины, о структуре системы мы расскажем очень кратко, а затем перейдем к интерфейсу системных вызовов.

Структура Windows ХР показана на рис.

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

Рис. 6.25. Структура Windows ХР

В самом низу расположен уровень аппаратных абстракций. Он должен предоставлять операционной системе некие абстрактные устройства, лишенные всех пороков и недостатков реальных устройств. К моделируемым устройствам относятся кэш-память, расположенная вне микросхемы, тактовые генераторы, шины ввода-вывода, контроллеры прерываний, контроллеры прямого доступа к памяти. Если эти устройства предоставить операционной системе в идеализированном виде, это упростит перенос \¥тс1о>У8 ХР на другие аппаратные платформы, поскольку большую часть изменений потребуется сделать только в одном месте.

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

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

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

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

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

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

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

Диспетчер кэш-памяти имеет дело с файловыми блоками и помогает диспетчеру виртуальной памяти определить, какие из них надо сохранить в памяти для использования в будущем. Кроме того, диспетчер кэш-памяти управляет файлами, отображаемыми на память. ^Утс1о>У8 ХР можно конфигурировать для работы с несколькими файловыми системами. В этом случае диспетчер кэш-памяти управляет всеми файловыми системами, поэтому отдельный диспетчер для каждой из них не нужен. Когда требуется какой-либо файловый блок, нужно обращаться к диспетчеру кэш-памяти.

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

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

Диспетчер процессов и потоков управляет процессами и программными потоками, в том числе их созданием и удалением. Акцент делается не на политику применения процессов и потоков, а на механизмы управления ими.

Монитор безопасности включает механизм безопасности \¥тс1о>У8 ХР, который соответствует требованиям Оранжевой книги министерства обороны США. В Оранжевой книге перечисляется огромное количество правил, которым должна удовлетворять система, начиная с пароля и заканчивая обнулением виртуальных страниц перед их повторным использованием.

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

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

Вне ядра находятся пользовательские программы и подсистема окружения. Потребность в подсистеме окружения объясняется тем, что пользовательские программы не ориентированы на самостоятельное выполнение системных вызовов (хотя технически такая возможность у них есть). Поэтому подсистема окружения экспортирует определенную группу вызовов функций, с которыми пользовательские программы могут работать. Изначально существовали три подсистемы окружения: Win32 (для программ Windows NT, Windows 2000, Windows ХР и Windows 95/98/МЕ), POSIX (для переносимых программ UNIX) и OS/2 (для переносимых программ OS/2). Из них на данный момент поддерживается только подсистема Win32. В то же время, существует ряд новых служб модуля UNIX, в некоторой степени обеспечивающих поддержку этой операционной системы.

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

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

Зато компания Microsoft определила набор функций, известный всем как Win32 API (Application Programming Interface — прикладной программный интерфейс). Это библиотечные функции, которые выполняют определенные действия либо в системе путем системных вызовов, либо в некоторых случаях непосредственно в библиотечной процедуре пользовательского пространства или подсистеме Win32. Набор Win32 API при создании новых версий Windows ХР не меняется. Однако помимо Win32 API существуют процедуры Windows ХР

API, которые в новых версиях Windows ХР могут меняться. Так как вызовы Win32 API документированы и достаточно стабильны, мы сосредоточим наше внимание именно на них, а не на системных вызовах Windows ХР. Когда в Windows была введена поддержка 64-разрядных машин, компания Microsoft изменила название набора с Win32 на Win64, однако для наших целей изучения 32-раз- рядной версии вполне достаточно.

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

Многие вызовы Win32 API создают объекты ядра того или иного типа (файлы, процессы, программные потоки, каналы и т. п.). Каждый вызов, ведущий к созданию объекта ядра, возвращает вызывающей программе результат, который называется описателем (handle). Этот описатель впоследствии может применяться для выполнения операций с объектом. Для каждого процесса существует свой описатель. Он не может непосредственно передаваться другому процессу и использоваться этим процессом (дескрипторы файлов в UNIX тоже нельзя передавать другим процессам). Однако при определенных обстоятельствах можно продублировать описатель, передать его другим процессам и разрешить им доступ к объектам, которые принадлежат другим процессам. Каждый объект имеет связанный с ним дескриптор безопасности, который определяет, кому разрешено, а кому запрещено совершать те или иные операции с объектом.

Операционную систему Windows ХР иногда называют объектно-ориентированной, поскольку оперировать объектами ядра можно только по их описателям путем вызова методов (функций API). С другой стороны, она не поддерживает такие основные свойства объектно-ориентированной системы, как наследование и полиморфизм.

Win32 API имеется и в системе Windows 95/98 (а также в операционной системе Windows СЕ, предназначенной для установки в разного рода электронных устройствах), правда, с некоторыми исключениями. Например, Windows 95/98 не имеет защиты, поэтому те вызовы, которые связаны с защитой, просто возвращают код ошибки. Кроме того, для имен файлов в Windows ХР используется набор символов Unicode, который не поддерживается в Windows 95/98. Существуют различия в параметрах некоторых вызовов API. В Windows ХР, например, все экранные координаты являются 32-разрядными числами, а в Windows 95/98 используются только младшие 16 бит (для совместимости с Windows 3.1). Поддержание набора функций Win32 API на разных операционных системах упрощает перенос программ между ними, но при этом кое-что в реальной системе вызовов остается недоступным.

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Windows ХР:

  1. М.Руссинович, Д.Соломон. Внутреннее устройство Microsoft Windows (главы 1–4), 2005
  2. Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ, 2015
  3. МТБ
  4. Кудинов Ю. И., Пащенко Ф. Ф., Келина А. Ю.. Практикум по основам современной информатики: Учебное пособие., 2011
  5. Ю. И. КУДИНОВ, Ф.Ф. ПАЩЕНКО, А. Ю. КЕЛИНА. ПРАКТИКУМ ПО ОСНОВАМ СОВРЕМЕННОЙ ИНФОРМАТИКИ, 2011
  6. Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев. Объектно- ориентированное программирование, 2001
  7. Уран и Плутон,
  8. Многоуровневость сознания в ее корреляции с многоуровневостью нервной системы
  9. Если телевизор, то XXX
  10. Литература
  11. Ступени страха: что помогает
  12. Игры
  13. Оценка силы планет по Волгину
  14. ПРОШЛОГО НЕТ. ЕСТЬ НАША ПАМЯТЬ О ПРОШЛОМ, А ЭТО НЕ ЧТО ИНОЕ, КАК ИЛЛЮЗИЯ.