Добавлен: 29.10.2018
Просмотров: 48030
Скачиваний: 190
936
Глава 11. Изучение конкретных примеров: Windows 8
Технический успех Windows 2000 привел к тому, что компания Microsoft стала
улучшать совместимость приложений и драйверов устройств в новой версии NT
(Windows XP), чтобы окончательно вытеснить Windows 98. Windows XP имела новый
и более дружественный вид графического интерфейса, который поддерживал страте-
гию компании Microsoft — завоевывать потребителей такими системами, с которыми
они уже знакомы. Эта стратегия была чрезвычайно успешной — за несколько первых
лет Windows XP была инсталлирована на сотнях миллионов персональных компью-
теров, что позволило компании Microsoft достичь своей цели по завершению эпохи
Windows на базе MS-DOS.
Следом за Windows XP компания Microsoft затеяла амбициозный проект, который
должен был еще больше воодушевить потребителей. Его результатом в конце 2006 года
стала Windows Vista, которая вышла в свет более чем через пять лет после Windows XP.
В ней был переделан графический интерфейс, а внутри были добавлены новые функ-
циональные возможности в плане безопасности. Большая часть изменений коснулась
очевидных для потребителя способов взаимодействия и возможностей. Внутренние
технологии системы улучшились незначительно, был «вылизан» код, а также улуч-
шены производительность, масштабируемость и надежность. Серверная версия Vista
(Windows Server 2008) была выпущена примерно через год после клиентской версии.
Она имеет те же основные системные компоненты (ядро, драйверы, библиотеки низ-
кого уровня и программы), что и Vista.
История разработки NT описана в книге «Show-stopper» (Zachary, 1994). Книга много
рассказывает об основных участвовавших в ней людях и о трудностях такого амбици-
озного проекта разработки программного обеспечения.
11.1.4. Windows Vista
Выпуск Windows Vista стал кульминацией самого крупного (на сегодняшний день)
проекта разработки операционной системы компании Microsoft. Первоначальные
планы были настолько амбициозными, что через несколько лет после начала разра-
ботки проект Vista пришлось перезапустить с более ограниченной областью охвата.
План интенсивного использования безопасного в отношении типов .NET-языка C# (со
сборкой мусора) пришлось отложить, как и некоторые другие важные функциональные
возможности (такие, как унифицированная система хранения WinFS для поиска и ор-
ганизации данных из различных источников). Размер операционной системы просто
потрясающий. В первоначальной версии NT было 3 млн строк кода на языках C/C++,
которые разрослись до 16 млн строк в версии NT 4.0, 30 млн строк в версии Windows
2000, 50 млн в Windows XP и достигли более 70 млн строк в Vista и еще большего ко-
личества строк в Windows 7 и 8.
Основной вклад в этот «размер» внесло стремление компании Microsoft добавлять
много новых функциональных возможностей в каждую версию своих продуктов.
В главном каталоге
system32
содержится 1600 динамически подключаемых библиотек
(DLL) и 400 исполняемых файлов (EXE) — и это без учета других каталогов, содержа-
щих множество апплетов (небольших приложений), входящих в состав операционной
системы (которые позволяют пользователям бродить по Интернету, воспроизводить
музыку и видео, отправлять электронную почту, сканировать документы, упорядо-
чивать фотографии и даже делать видеофильмы). Поскольку компания Microsoft
хочет, чтобы клиенты переходили на новую версию, она поддерживает совместимость
11.1. История Windows вплоть до Windows 8.1
937
с предыдущей версией (сохраняя все ее функциональные возможности, интерфейсы
прикладного программирования, апплеты и т. п.). Почти никакие функциональные
возможности не удаляются. В результате Windows сильно разрастается с каждой вер-
сией. Дистрибутив Windows перебрался с флоппи-дисков (дискет) на компакт-диски,
а с появлением Windows Vista — и на DVD-диски. Но технологии не стояли на месте,
и более быстрые процессоры и более объемная память позволили компьютерам стать
быстрее, несмотря на такое увеличение объема операционной системы.
К сожалению для компании Microsoft, Windows Vista была выпущена в то время, когда
потребители пребывали в восторге от появления недорогих компьютеров, например
ноутбуков и нетбуков. На этих машинах для сохранения низкой стоимости и заряда
батарей использовались медленные процессоры, и на их ранних поколениях был огра-
ниченный объем оперативной памяти. В то же самое время производительность процес-
соров перестала расти с прежней скоростью в связи с трудностями рассеивания тепла,
выделяемого во все больших количествах из-за постоянного роста тактовой частоты.
Закон Мура продолжал соблюдаться, но дополнительные транзисторы применялись
для реализации новых возможностей и использования нескольких процессоров, а не
для улучшения производительности одного процессора. Возросший объем Windows
Vista означал, что она демонстрировала на таких компьютерах довольно скромную
по сравнению с Windows XP производительность, и ее выпуск не получил широкой
поддержки.
Проблемы с Windows Vista были учтены в следующем выпуске, Windows 7. Microsoft
приложила немало сил к тестированию и автоматизации производительности, новым
технологиям телеметрии и существенно расширила и усилила команды, нацеленные
на повышение производительности, надежности и безопасности. Хотя в Windows 7
было относительно немного функциональных изменений по сравнению с Windows
Vista, она была лучше продумана и работала более эффективно. Windows 7 быстро вы-
теснила Windows Vista, а в конечном итоге и Windows XP и стала самой популярной
на сегодня версией Windows.
11.1.5. 2010-е годы: современная Windows
Ко времени начала поставок Windows 7 началось очередное драматическое изменение
компьютерной индустрии. Успех Apple iPhone в качестве портативного компьютерного
устройства и появление iPad стали предвестниками существенных изменений, кото-
рые привели к доминированию дешевых планшетных компьютеров и телефонов на
операционной системе Android точно так же, как Microsoft доминировала в области на-
стольных компьютеров в первые три десятилетия истории персональных компьютеров.
Небольшие, мобильные, но мощные устройства и повсеместно распространенные бы-
стрые сети создали мир, где мобильные вычисления и сетевые службы превращаются
в доминирующую парадигму. Старый мир переносных компьютеров был заменен
машинами с небольшими экранами, запускающими приложения, которые легко мо-
гут быть загружены из Интернета. Эти приложения не относились к традиционным
разновидностям вроде тех, что предназначены для работы с текстами, электронными
таблицами или нужны для подключения к корпоративным серверам. Вместо этого они
предоставляют доступ к таким службам, как поиск в Интернете, общение в социальных
сетях, пользование Википедией, прослушивание потоковой музыки и просмотр потоко-
вого видео, совершение покупок в интернет-магазинах и осуществление персональной
938
Глава 11. Изучение конкретных примеров: Windows 8
навигации. Изменились также бизнес-модели использования вычислительной техни-
ки — основной экономической силой становятся рекламные возможности.
Microsoft приступила к перестройке своего профиля, превращаясь в компанию, за-
нимающуюся устройствами и службами и конкурирующую с Google и Apple. Ей по-
надобилась операционная система, которую можно было бы развернуть на широком
спектре устройств: на телефонах, планшетных компьютерах, игровых приставках,
ноутбуках, настольных персональных компьютерах, серверах и в облачных системах.
Таким образом, в развитии Windows быль сделан более значимый эволюционный шаг,
чем при выпуске Windows Vista, в результате чего появилась Windows 8. Но на этот
раз Microsoft учла уроки, извлеченные из эксплуатации Windows 7, чтобы создать
качественно спроектированный высокопроизводительный продукт, не раздувая при
этом объем за счет внедрения второстепенных возможностей.
Windows 8 построена на модульном подходе MinWin, использовавшемся в Windows 7,
чтобы получилось небольшое ядро операционной системы, которое можно было бы
расширить на различных устройствах. Целью было то, чтобы каждая операционная
система для конкретного устройства строилась путем расширения этого ядра за счет
новых пользовательских интерфейсов и функций при обеспечении по возможности ее
общего восприятия для пользователей. Такой подход был успешно применен в Windows
Phone 8, где удалось использовать основную часть двоичного кода ядра, используемого
также в версиях операционной системы для настольных и серверных систем. Поддержка
Windows телефонов и планшетных компьютеров требует поддержки популярной ARM-
архитектуры, а также новых процессоров Intell, предназначенных для использования на
таких устройствах. Рассматриваемые в следующем разделе фундаментальные изменения
в моделях программирования делают Windows 8 частью эпохи современной Windows.
Windows 8 не получила всеобщего признания. В частности, отсутствие кнопки
Пуск
на
панели задач (и связанного с ней меню) рассматривалось многими пользователями как
огромная ошибка. Другим пользователям не нравилось использование на настольной
машине с большим монитором интерфейса, похожего на интерфейс, предназначенный
для планшетных компьютеров. В ответ на эти и другие критические замечания 14 мая
2013 года Microsoft выпустила обновление под названием Windows 8.1. В этой версии
наряду с исправлением этих ошибок представлен ряд новых функций, например более
удачная интеграция с облачными системами, а также несколько новых программ. Хотя
мы будем в этой главе придерживаться более общего названия «Windows 8», на самом
деле в ней будет дано описание того, как работает Windows 8.1.
11.2. Программирование в Windows
Пришло время приступить к техническому изучению Windows. Но перед тем, как
погрузиться в подробности внутренней структуры, мы рассмотрим исходные API-
функции NT для системных вызовов, подсистему программирования Win32, пред-
ставленную как часть Windows на основе NT, и современную среду программирования
WinRT, введенную вместе с Windows 8.
На рис. 11.2 показаны уровни операционной системы Windows. Под уровнями апплетов
и графического интерфейса пользователя находятся интерфейсы программирования,
на которых построены приложения. Как и в других операционных системах, они состо-
ят в основном из библиотек кода (DLL), которые программы динамически используют
11.2. Программирование в Windows
939
для доступа к функциональным возможностям операционной системы. В Windows
имеется также несколько интерфейсов программирования, которые реализованы как
работающие в виде отдельных процессов службы. Приложения ведут обмен со служ-
бами пользовательского режима при помощи удаленных вызовов процедур (RPC).
Уровень абстрагирования оборудования (hal.dll)
Гипервизор (hvix, hvax)
Драйверы:
устройства, файловые
системы, сеть
Уровень
исполнения
NTOS (ntoskrnl.exe)
Драйвер графического
интерфейса пользова-
теля (Win32k.sys)
Уровень ядра NTOS (ntoskrnl.exe)
Режим ядра
Пользова-
тельский режим
Собственный интерфейс прикладного программирования NT,
библиотека времени выполнения C/C++ (indll.dll)
Службы NT: smss, lsass,
services, winlogon,
...
Процесс
подсистемы Win32
(csrss.exe)
Современные
процессы-посредники
Службы Windows
Приложения
современной Windows
Диспетчер срока
выполнения процесса
AppContainer
COM
WinRT: .NET/C++, WWA/JS
Диспетчер современного
приложения
API подсистем (kernel32)
Динамические библиотеки
(ole, rpc)
Графический интерфейс
пользователя (shell32ldll,
user32.dll, gdi32.dll)
[.NET: базовые классы, GC]
Диспетчер настольной
системы (проводник)
Приложения настольных
систем Windows
Рис. 11.2 . Уровни программирования в современной Windows
Ядром операционной системы NT является программа режима ядра NTOS (ntoskrnl.
exe), которая обеспечивает традиционные интерфейсы системных вызовов (на которых
построена остальная часть операционной системы). В Windows только программисты
компании Microsoft пишут на уровне системных вызовов. Опубликованные интер-
фейсы пользовательского режима принадлежат «персонажам» операционных систем,
которые реализованы при помощи работающих поверх уровней NTOS подсистем.
Первоначально NT поддерживала три «персонажа»: OS/2, POSIX и Win32. От OS/2
отказались в Windows XP. Поддержка POSIX в конечном итоге с выходом Windows 8.1
также была удалена. Сегодня все Windows-приложения написаны с помощью таких
API-интерфейсов, как WinFX в модели программирования .NET, которая является над-
стройкой над подсистемой Win32. Но клиенты могут получить улучшенную систему
POSIX (под названием Interix) как часть служб Services For UNIX (SFU) компании
Microsoft, поэтому вся инфраструктура для поддержки POSIX в системе имеется.
Большинство приложений Windows написано с использованием Win32 (хотя компа-
ния Microsoft поддерживает и другие интерфейсы прикладного программирования).
В отличие от Win32 система .NET не реализована как официальная подсистема на
собственных интерфейсах ядра NT. Вместо этого .NET построена поверх модели про-
940
Глава 11. Изучение конкретных примеров: Windows 8
граммирования Win32. Это позволяет .NET хорошо взаимодействовать с существу-
ющими программами Win32 (что никогда не было целью подсистем POSIX и OS/2).
Интерфейс прикладного программирования WinFX содержит многие функциональные
возможности Win32, и в действительности многие функции библиотеки Base Class
Library в WinFX являются просто оболочками для API-интерфейса Win32. Преиму-
щество WinFX состоит в богатстве поддерживаемых объектных типов, упрощенных
однородных интерфейсах, а также в использовании общеязыковой исполняющей среды
Common Language Runtime системы .NET (и в том числе сборки мусора).
Современные версии Windows начинаются с Windows 8, в которой представлен новый
набор API-интерфейсов WinRT. В Windows 8 рекомендуется не пользоваться тради-
ционным интерфейсом Win32 для настольных машин, а отдать предпочтение запуску
по одному приложению на весь экран с уклоном к использованию сенсорного экрана
вместо мыши. Microsoft рассматривает это как необходимый шаг, как часть перехода
к единой операционной системе, которая будет работать на телефонах, планшетных
компьютерах и игровых приставках, а также на традиционных персональных компью-
терах и серверах. Изменения в GUI, неоходимые для поддержки этой новой модели,
требуют, чтобы приложения были переписаны под новую API-модель — комплект со-
временных средств разработки Modern Software Development Kit, который включает
в себя WinRT API-интерфейсы. Эти интерфейсы тщательно опекают создание более
последовательного набора действий и интерфейсов. Эти API-интерфейсы имеют вер-
сии, доступные для программ на C++ и на .NET, а также на JavaScript для приложений
на базе среды, напоминающей браузеры wwa.exe (Windows Web Application).
Кроме интерфейсов WinRT API в комплект средств разработки компании Microsoft —
MSDK
(Microsoft Development Kit) были включены многие существующие интер-
фейсы Win32 API. Первоначально доступных интерфейсов WinRT API было недо-
статочно для написания многих программ. Для введения ограничений в поведение
приложений были выбраны некоторые из включенных интерфейсов Win32 API.
Например, приложения не могут создавать потоки непосредственно с MSDK и при
этом для запуска параллельных действий внутри процессора должны полагаться
на пул потоков Win32. Причина в том, что современная Windows переориентиро-
вала программистов от модели потоков к модели задач, чтобы убрать управление
ресурсами (приоритеты, родственность процессоров) из модели программирования
(определяющей параллельные действия). Другие пропускаемые интерфейсы Win32
API включают большинство API-функций Win32, касающихся виртуальной памяти.
Ожидается, что программисты полагаются на имеющиеся в Win32 API-функции
управления кучами, а не на попытки непосредственного управления ресурсами
памяти. API-интерфейсы, которые уже не рекомендуются к применению в Win32,
также были убраны из MSDK наряду со всеми API-функциями ANSI. MSDK API-
интерфейсы используют исключительно Unicode.
Выбор слова «современная» (modern) для описания такого продукта, как Windows, стал
сюрпризом. Возможно, если лет через десять появится новое поколение Windows, оно
будет представлено нам как Windows эпохи постмодернизма.
В отличие от традиционных процессов Win32, процессы, в которых выполняются со-
временные приложения, имеют свои сроки выполнения, управляемые операционной
системой. Когда пользователь переключается и уходит из приложения, система дает
ему пару секунд на сохранение его состояния, а затем прекращает дальнейшее выде-
ление ему ресурсов процессора до тех пор, пока пользователь опять не переключится