Поиск по сайту:


«VBA Введение. 1.5. Архитектура ОС Windows 9x.»

Файл: 4 КБ
Поделиться:
Понимание архитектуры системы - основа практических навыков разработки приложений.
Как Windows выполняет программный код
ОС Windows для поддержки своей эффективности и целостности использует два режима: пользователя и ядра. Архитектура процессора Intel 80386 и следующих моделей определяет четыре уровня привилегий, называемых кольцами, для защиты кода и данных системы от случайного или преднамеренного изменения со стороны менее привилегированного кода. Такой метод выполнения кода называется моделью защиты Intel.
Уровень привилегий 0, известный как режим ядра, максимальный. Уровень привилегий 3, или режим пользователя, - минимальный. Когда код выполняется на некотором уровне привилегий, говорят, что он выполняется в соответствующем кольце. Операционные системы семейства Windows используют только кольца 0 и 3 (рис. 1.2).
Режим ядра
Режим ядра (кольцо 0) - это наиболее привилегированный режим. Работая в нем, код имеет прямой доступ ко всей аппаратуре и всему адресному пространству.
Программное обеспечение, выполняющееся в режиме ядра:

Рис. 1.2 Кольца 0 и 3 в модели защиты Intel
 имеет прямой доступ к аппаратному обеспечению;
 имеет доступ ко всей памяти компьютера;
 не может быть вытеснено в страничный файл на жестком диске;
 выполняется с большим приоритетом, чем процессы режима пользователя.
В частности, в кольце 0 выполняется код ядра операционных систем Windows 95 и Windows NT. Поскольку компоненты режима ядра защищены архитектурно, процессор предотвращает их изменение другой программой. Хотя кольцо 0 предоставляет максимальную защиту, не следует запускать в кольце 0 что попало - ведь компоненты этого режима имеют доступ ко всей системе. Если программный компонент в режиме ядра потерпит крах, это может разрушить всю систему.
Поскольку одна из задач Windows 95 - максимальная обратная совместимость, многие старые 16-разрядные драйверы и приложения используют прямой доступ к аппаратуре. Windows NT не предоставляет таким приложениям требуемый уровень доступа, поэтому зачастую они не могут работать под управлением Windows NT Workstation и Windows NT Server.
Режим пользователя
Режим пользователя предоставляет меньше привилегий, нежели режим ядра, - в частности, он не обеспечивает прямой доступ к аппаратуре. Код, выполняющийся в кольце 3, ограничен выделенным ему адресным пространством, а для вызова системных сервисов использует интерфейс прикладного программирования (API) Windows.
Процессы режима пользователя характеризуются следующими особенностями.
 Не имеют прямого доступа к аппаратуре.
Это защищает систему от неисправных приложений или неавторизованного доступа.
 Ограничены выделенным им адресным пространством.
Таким образом операционная система обеспечивает свою целостность. Процессу выделяется определенная область адресов и запрещено выходить за эту область.
 Могут быть вытеснены из физической памяти в виртуальную память на жестком диске.
Механизм виртуальной памяти позволяет использовать пространство на жестком диске как дополнительное ОЗУ. О виртуальной памяти подробно рассказано чуть позже в этой главе.
 Выполняются с меньшим приоритетом, чем компоненты режима ядра.
Поскольку приоритет процессов режима пользователя ниже, они получают меньший доступ к процессору, чем процессы режима ядра. Это гарантирует, что операционная система не будет ожидать окончания работы такого процесса. Кроме того, неисправный программный компонент, выполняющийся в режиме пользователя, не вызовет крах всей системы и не повлияет на другие приложения, работающие параллельно.
Многозадачность
Многозадачность - способность операционной системы выполнять более одной программы (задачи) одновременно. Противоположный подход - однозаачность, когда один процесс должен быть завершен прежде, чем сможет начаться другой. MS-DOS - пример однозадачной среды, a Windows 95 и Windows NT - многозадачные среды.
Конечно же, и в многозадачной системе программы не выполняются одновременно - процессор переключается между ними. Благодаря этому Вы можете выполнить запрос к базе данных и продолжить работу с редактором текстов до тех пор, пока не появятся результаты запроса. Многозадачность, кроме того, позволяет компьютеру эффективно использовать время, которое иначе было бы потеряно в ожидании команды пользователя или ответа устройств ввода/вывода.
Для понимания многозадачности необходимо сначала познакомиться с процессами и потоками.
Процессы и потоки
Приложение, разработанное для Windows, состоит из одного или более процессов (рис. 1.3). Процесс - это, попросту говоря, выполняемая программа. Ему принадлежат адресное пространство и выделенные ресурсы, а также один или более потоков, выполняющихся в его контексте.

Рис. 1.3 Приоритеты потоков
Поток - это основная единица, которой операционная система выделяет процессорное время, и минимальный "квант" кода, который может быть запланирован для выполнения. Кроме того, это часть процесса, выполняющаяся в каждый момент времени. Поток работает в адресном пространстве процесса и использует ресурсы, выделенные процессу.
Любой процесс содержит хотя бы один поток. Каждый процесс 16-разрядного Windows-приложения или программы MS-DOS имеет только один поток, тогда как процессы 32-разрядных Windows-приложений могут включать их несколько.
Примечание Ресурсами владеют процессы, а не потоки - последние только используют ресурсы, выделенные процессу. Например, если программа запросит порт, им будет управлять процесс. Любой поток процесса может обратиться к порту, но ни один из них не вправе самостоятельно запросить использование порта.
Вытесняющая и кооперативная многозадачность
Существуют два типа многозадачности: кооперативная (не вытесняющая) и вытесняющая (рис. 1.4). В кооперативной многозадачной среде (например, Windows 3.1) контроль над процессором никогда не отбирается у задачи - приложение должно самостоятельно отказаться от контроля над процессором, чтобы другое приложение заработало. Вытесняющая многозадачность отличается от кооперативной тем, что операционная система может получить контроль над процессором без согласия выполняющегося приложения. Лишение приложения контроля над процессором называется вытеснением. Windows 95 и Windows NT используют вытесняющую многозадачность для MS-DOS и 32-разрядных Windows-приложений.
Разработчики программ, выполняющихся под управлением кооперативной операционной системы, должны учитывать необходимость частого возврата управления процессором операционной системе. Программа, которая недостаточно часто отдает управление, блокирует кооперативную операционную систему.

Рис.1.4 Вытесняющая и кооперативная многозадачность
Windows NT применяет вытесняющую многозадачность при выполнении 16-разрядных приложений Windows и MS-DOS. Windows NT обеспечивает полную защиту памяти 16-разрядных приложений, так как каждое из них выполняется в рамках собственной виртуальной машины. Windows 95, напротив, использует кооперативную многозадачность для всех 16-разрядных приложений - это необходимо для сохранения совместимости с 16-разрядными Windows-программами, которые сами контролируют свое выполнение.
Планирование

Рис. 1.5 Процесс планирования
С помощью планирования операционная система определяет, какой поток использует процессор в данный момент времени. Windows реализует многозадачность, присваивая каждому потоку приоритет, что позволяет ему использовать ресурсы системы. Планирование основано на заранее заданной единице времени, называемой квантом. Фактическая продолжительность кванта времени зависит от конфигурации системы. Уровни приоритета находятся в диапазоне от 0 (наименьший приоритет) до 31 (наибольший приоритет). Поток с наибольшим приоритетом получает процессор в свое распоряжение (рис. 1.5).
Приоритет каждого потока определяется по:
 классу приоритета процесса, которому принадлежит поток;
 уровню приоритета потока внутри класса приоритета его процесса.
Классы приоритетов
Класс приоритета процесса и уровень приоритета потока определяют базовый приоритет потока. Уровни приоритетов Windows разделены на два класса:
 реального времени (приоритеты от 16 до 31) - используется для выполнения основных функций операционной системы и обычно не применяется для приложений;
 переменного приоритета (приоритет от 0 до 15) - определяет процессорный приоритет приложений; приоритет 0 возможен только для бесстраничного системного потока.
Уровни приоритетов
Процессам могут быть присвоены следующие базовые уровни приоритетов:
 низкий - запускает приложения с уровнем приоритета 4;
 обычный - запускает приложения с уровнем приоритета 7;
 высокий - запускает приложения с уровнем приоритета 13;
 реального времени - запускает приложения с уровнем приоритета 24.
Примечание Не запускайте приложения с классом приоритета реального времени - это может привести к нестабильности в работе операционной системы.
Управление памятью

Рис. 1.6 Выделение виртуальной памяти приложениям
В Windows 95 и NT каждый процесс имеет собственное адресное пространство, что позволяет адресовать до 4 Гб памяти. Отметим, что Windows выделяет процессу 4 Гб адресов памяти, а не физического ОЗУ. Физическая память ограничена имеющимися системными ресурсами (ОЗУ и дисковое пространство). Windows выделяет каждому приложению 2 Гб адресов памяти, а другие 2 Гб резервируются для нужд ядра.
Большинство компьютеров не располагают 4 Гб ОЗУ, и по этой причине Windows использует механизм виртуальной памяти. Таким образом, Windows может перенести часть содержимого физической памяти на жесткий диск, когда объем доступного ОЗУ будет исчерпан. Этот процесс известен как подкачка (рис. 1.6).
Виртуальные адреса, используемые процессом, не совпадают с адресами физической памяти. Для каждого процесса ядро поддерживает так называемую таблицу страниц - внутреннюю структуру, которая позволяет преобразовать виртуальные адреса в физические.
Виртуальная память
Процессоры Intel, начиная с модели 80386, позволяют отобразить область физической памяти на любую область 32-разрядных адресов. Виртуальная память Windows использует этот механизм для того, чтобы любая программа вела себя так, будто она имеет собственное физическое ОЗУ.
Windows для доступа к памяти применяет 32-разрядную линейную адресацию: приложения обращаются к памяти с помощью 32-разрядных адресов. Каждая программа имеет собственное виртуальное адресное пространство, которое диспетчер виртуальной памяти преобразует в адреса физического ОЗУ или в файле на жестком диске.
Постраничная подкачка
Физическое и виртуальное (логическое) адресное пространство каждого процесса разделено на страницы - "кванты" памяти, размер которых зависит от компьютера. Например, для компьютеров х86 размер страницы составляет 4 кб. Ядро может перемещать страницы памяти в страничный файл на диске (Pagefile.sys) и обратно: таким образом, управление памятью становится более гибким. Когда страница перемещается в физическую память, ядро обновляет таблицы страниц соответствующих процессов. Если ядру требуется место в физической памяти, оно вытесняет самые старые страницы физической памяти в страничный файл. Манипуляции ядра с физической памятью совершенно незаметны (прозрачны) для приложений, которые работают только со своими виртуальными адресными пространствами.
Выполнение приложений
Windows 95 и Windows NT по-разному выполняют приложения, особенно 16-разрядные.
Механизм сообщений Windows

Рис.1.7 Очереди сообщении
В отличие от MS-DOS, Windows для управления приложениями использует модель сообщений. Сообщение генерируется всякий раз, когда происходит какое-то событие, например пользователь нажимает и отпускает клавишу на клавиатуре или передвигает мышь. Сообщение помещается в так называемую очередь сообщений. Активное приложение постоянно проверяет свою очередь и извлекает из нее поступившие сообщения.
Обмен сообщениями в 16-разрядных версиях Windows
В Windows 3.1 очередь сообщений операционной системы - единая. Она обслуживает все 16-разрядные Windows-приложения, которые проверяют ее и извлекают адресованные им сообщения. Такое решение не лишено недостатков - например, если у какого-то приложения возникнут проблемы, оно может не позволить другим приложениям проверить очередь сообщений. В этом случае последние прекратят работу, пока не получат управление и не смогут проверить наличие адресованных им сообщений.
Обмен сообщениями в Windows 95
В Windows 95 проблемы единой очереди сообщений разрешены: у каждого выполняющегося Win32-пpилoжeния - своя очередь. Каждый поток в Win32-пpилoжe-нии имеет собственную очередь сообщений и, значит, никак не влияет на поведение других работающих приложений. Если Winl6- или Win32-пpилoжeниe потерпит крах, остальные Win32-пpилoжeния будут действовать на основе вытесняющей многозадачности и смогут принимать поступающие сообщения из своих очередей.
Тем не менее в целях совместимости все 16-разрядные Windows-приложения под управлением Windows 95 используют общую очередь сообщений. Очевидно, если с одним из них что-то произойдет, остальным будет перекрыт доступ к очереди до тех пор, пока программа, вызвавшая проблему, не будет завершена.
Виртуальные машины

Рис. 1.8 Виртуальные машины
Windows NT выполняет приложения в рамках виртуальных машин (Virtual Machine, VM). Фактически VM - это создаваемая операционной системой среда для выполнения приложения, которая полностью эмулирует все ресурсы компьютера. С точки зрения приложения, виртуальная машина - это полноценный компьютер, предоставляющий ему все имеющиеся ресурсы.
Каждое 16-разрядное Windows- и MS-DOS-приложение под управлением Windows NT выполняется в отдельном адресном пространстве, называемом виртуальной DOS-машиной (Virtual DOS Machine, VDM). При этом обеспечивается защита программы, a Windows NT может реализовать вытесняющую многозадачность для всех сервисов операционной системы и приложений.
В Windows 95 предусмотрено выполнение MS-DOS-приложений в отдельных VDM, однако, поскольку часть памяти доступна всем виртуальным машинам, MS-DOS-приложения представляют собой потенциальную угрозу стабильности системы.
Драйверы устройств в Windows
Драйвер устройства - это программный компонент, получающий команды от операционной системы и преобразующий их в команды конкретного устройства (рис. 1.9). Зачастую драйверы разрабатываются производителями аппаратного обеспечения, и компания Microsoft их напрямую не поддерживает.

Рис. 1.9 Архитектура драйверов устройств
Драйверы устройств позволяют разработчикам создавать аппаратно-незави-симые приложения. Другими словами, разработчику на стадии создания приложения не нужно заботиться о том, какую именно аппаратуру будет применять пользователь. Пользователь, в свою очередь, может корректировать конфигурацию компьютера, не затрагивая работоспособность приложений. Windows использует драйверы для таких компонентов, как:
 дисплеи;
 звуковые карты;
 устройства связи;
 принтеры;
 сетевые адаптеры.
В зависимости от того, для какой операционной системы семейства Windows разработан драйвер, он может принадлежать к одной из двух групп: защищенного режима и реального режима.
Драйверы защищенного и реального режима
Драйверы реального режима созданы для работы в реальном режиме операционной системы MS-DOS. Они не так безопасны и устойчивы, как драйверы защищенного режима, которые используют преимущества архитектуры защищенного режима процессоров 80386 и последующих моделей. Драйвер защищенного режима или драйвер виртуального устройства (Virtual Device Driver, VxD) обеспечивает быстрый разделяемый доступ к устройству. Кроме того, операционные системы семейства Windows выполняют 32-разрядный код защищенного режима более эффективно, чем 16-разрядный код реального режима.
Windows 95 поддерживает оба типа драйверов, a Windows NT - только драйверы защищенного режима. Компания Microsoft настоятельно рекомендует применять 32-разрядные драйверы защищенного режима везде, где возможно.
32- и 16-разрядные компоненты
В Windows 95 включены 16-разрядные версии User, GDI и Kernel. Комбинация 16-разрядного и 32-разрядного кода позволяет сохранить совместимость с существующими приложениями и драйверами и одновременно увеличить производительность системы по сравнению с Windows 3.1. Windows 95 использует 32-разрядный код везде, где это увеличивает производительность не в ущерб совместимости. Для включения в Windows 95 16-разрядных компонентов есть три основные причины:
 код для 16-разрядных систем обеспечивает обратную совместимость с приложениями и драйверами, разработанными для Windows 3.1;
 в некоторых случаях 16-разрядный код выполняется быстрее, чем аналогичный 32-разрядный;
 32-разрядный код требует больше памяти, чем эквивалентный 16-разрядный.
Одна из основных задач Windows 95 - эффективная работа на компьютерах с ограниченным объемом ОЗУ, и применение 16-разрядного кода способствует решению этой задачи.
Подсистемы ввода/вывода и драйверы устройств, включая сетевые и файловые системы, являются полностью 32-разрядными, как и все компоненты управления памятью и планирования. Часто возникающая при этом проблема вызова 32-разрядной функции из 16-разрядного приложения (или наоборот) решается при помощи шлюзования.
Шлюзование
Эта операция выполняется, когда операционная система преобразует вызов 16-разрядной функции в вызов 32-разрядной. Процессы Windows 95 и Windows NT не могут содержать одновременно и 16-разрядный, и 32-разрядный код. Шлюз позволяет коду с одной стороны границы вызывать код с другой ее стороны. Каждая платформа использует один или несколько механизмов шлюзования:
 механизм базовых шлюзов позволяет 16-разрядному Windows-приложению в системе под управлением Windows 95 и Windows NT загрузить и вызвать 32-разрядную библиотеку;
 с помощью механизма плоских шлюзов, реализованного только в Windows NT, Win32-пpилoжeниe загружает и вызывает 16-разрядную библиотеку и наоборот.