Software
Не в битах счастье...
Станислав Гришин
С момента объявления Windows 95 какие только упреки не доносились в сторону новой ОС. В связи с этим мы хотим привести несколько фактов, неоднократно упоминаемых в прессе и специальной литературе.
Чем характерна Windows 3.x? Спросите у большинства специалистов, и вам (в числе прочего) обязательно скажут о ненадежности Действительно, там, где необходима высокая стабильность работы, эта ОС не снискала популярности. Ничего удивительного здесь нет, ибо сама архитектура Windows 3.x построена таким образом, что ОС безотказна только при полной устойчивости абсолютно всех запущенных приложений.
Основной проблемой на сегодня является существование огромного количества программ, разработанных для старых ОС. Дело в том, что все приложения можно разделить на два типа 16-и 32-битные, по принципу адресации памяти То же самое относится и к процессорам, однако, несмотря на то что все они, начиная с Intel 80386, уже давно стали 32-битными, большинство пользователей продолжает работать с 16-битными программами Запускать подобную программу на 32-битном процессоре – это, говоря образно, все равно что летать на "Буране" в Санкт-Петербург, ибо только 32-битная программа позволяет задействовать 32-битный процессор на полную мощность.

DOS изначально создавалась 16-битной ОС Поэтому все DOS-приложения как были, так и остаются 16-битными. Правда, из-за этого часто возникают специфичные проблемы: DOS, например, не может адресовать "высокие" части памяти, и для организации доступа к областям выше 640 Кб нужны специальные "расширители".
До недавних пор (до появления Win32s – расширения Windows 3.х до 32-битной ОС, позволяющего запускать некоторые 32-битные программы) Windows 3.х была исключительно 16-битной, то есть в ней выполнялись исключительно 16-битные задачи. И если речь идет о 16-битных приложениях, то под этим понимаются любые программы для DOS и Windows 3.х.
В Windows 3.х, в обычном защищенном режиме, работой системы управляет 32-битный VMM (virtual machine manager). Фактически, VMM и есть Windows. Основной его задачей является поддержание работы System VM (системная виртуальная машина, или ВМ-код, который отвечает за обработку сообщений от приложений) и различных VDM (virtual Dos machines-для запуска 16-битных приложений. В Windows 3.х системная VM организует DPMI (Dos Protected Mode Interface), обеспечивая расширенную память для всех Windows-приложений Все программы выполняются системной ВМ в области памяти от 2 до 4 Gb, при этом не предусматривается никакой защиты памяти от "вторжения" другого приложения. Причем беззащитен не только ????? приложений, но также и код самой операционной системы. Именно поэтому одна "плохая" программа может нарушить работу не просто какого-то одного конкретного приложения, но и всей системы в целом.
Такое длинное вступление необходимо для полного понимания проблем Windows 95. Ибо, несмотря на все свои достоинства (поддержка plug and play, расширенные сетевые возможности и так далее), новая ОС все-таки очень похожа на свою предшественницу Windows 3.х со всеми ее недостатками, и это основное, из-за чего специалисты ругают Microsoft. Модель (точнее говоря, принцип) VMM из Windows 3.х сохранилась и в Windows 95 16-битные приложения и Dos-задачи выполняются в разделяемой области памяти выше 2 Gb, то есть там же, где находится большая часть USER- и GDI-кодов. Плохое 16-битное приложение вполне может "залезть" в эту часть памяти и вывести из рабочего состояния всю систему. Кроме того, все вызовы User API проходят через 16-битную системную VM, и если одно 16-битное приложение перестанет правильно отрабатывать поступаемые сообщения (что является наиболее распространенной ошибкой), то опять-таки система выйдет из рабочего состояния. И до тех пор, пока вы не "убьете" неработающую 16-битную программу, все приложения, даже 32-битные, будут приостановлены.

Тем не менее для поддержания работы 32-битных приложений VMM изменена в двух местах. Во-первых, область памяти от 4 Mb до 2 Gb предоставлена исключительно 32-битным приложениям, при этом API-вызовы адресуются в область выше 2 Gb Windows 95 загружает каждую Wm32-nporpaMMy в общую системную VM, что увеличивает общую скорость работы системы, но опять-таки повышает риск "падения" ОС, ибо практически все области памяти ниже 1 Mb и выше 2 Gb доступны для любой 32-битной программы. Однако даже 32-битные приложения могут "подвесить" систему большая их часть имеет доступ к нижней части памяти (ниже 1 Mb), где находится системный код Windows 95 (то есть системная VM).
Второе, что изменилось в Windows 95 – это многозадачность (multitasking). Существует два типа организации многозадачной ОС. Первый из них сводится к тому, что регулярно, по некоторому системному событию, происходит передача ресурсов от одного приложения к другому – вытесняющая многозадачность (preemptive multitasking). Второй тип – так называемая совместная (cooperative) многозадачность, и именно она была использована в Windows 3.х Основное ее отличие заключается в том, что передача ресурсов компьютера от одного приложения другому осуществляется самими приложениями, последовательно, как по эстафете.


Многие из вас скажут, мол, какая же параллельность без вытеснения Да, большинство многозадачных систем – и даже сама VMM – работают как вытесняющие Но разработчики Windows 95 решили сохранить старый стиль работы, оставили код User и GDI 16-битным, и теперь многое зависит от 16-битных приложений. Однако доступ к 16-битным частям системного кода ограничен, и в каждый момент времени только одно приложение может использовать 16-битные User и GDI-модули, причем остальным программам приходится ждать.
Как видите, если речь идет только о 32-битных программах, то Windows 95 является вытесняющей ОС. Но так как 16-битные приложения были разработаны для совместной многозадачной модели, и Windows 95 их поддерживает, то можно сказать, что новая ОС, скорее, "наполовину вытесняющая". Причем вытесняет она как раз-таки хорошо спроектированные 32-битные приложения, а вот с 16-битными ничего поделать не может. То есть, когда выполняется 16-битное приложение, все остальные (в том числе и 32-битные) будут приостановлены, до тех пор пока 16-битное не "вернет управление". Если 16-битная задача зависнет, все приложения "упадут" одно за одним.

Однако самой интересной, на мой взгляд, можно считать одну абсолютно невидимую для пользователя особенность. Речь идет об "общении" различных Windows-приложений. Конечно, таким же способом пересылается информация и от приложения к системным компонентам ОС, но в Windows 3.х передавались два 16-битных параметра, теперь же 32-битные приложения используют только один – 32-битный. Как видите, очевидна необходимость преобразователя. Например, когда 32-битное приложение посылает сообщение 16-битным частям системного кода User или GDI, все 32-битные адреса (от приложения) преобразуются в 16-битные. Из-за этого у каждой 32-битной системной компоненты есть свой 16-битный двойник Подобная копия имеется и у ядра системы – Kernel, которое отвечает за создание Task Database (TDB) для каждого запущенного приложения. При этом Windows 95 вызывает "старую добрую" DOS для создания PSP (program segment prefix) в общей памяти. Данная процедура выполняется для всех программ, но для 32-битных приложений TDB хранятся в расширенной памяти, хотя их PSP так и остаются ниже первого мегабайта.
В заключение хотелось бы отметить, что, несмотря на значительные изменения, Windows 95 не превзошла по надежности ни WmdowsNT, ни OS/2 (предлагаем ознакомиться с таблицей ключевых возможностей четырех ОС). Поэтому если для вас важнее надежность и высокопроизводительная параллельность, технология plug and play, а также некоторые другие "мелочи", заметно облегчающие жизнь начинающему пользователю, то лучше выбрать Windows NT (где, кстати, Wm32-приложения тоже работают) или OS/ 2, где поддержка Windows-sessions реализована на свойственном фирме IBM высоком уровне.