Многозадачность и диспетчеризация

      Комментарии к записи Многозадачность и диспетчеризация отключены

Основные Принципы организации многозадачных операционных систем на примере Windows

Основные концепции Windows

1.Многозадачность

2.Виртуальная память

3.Страничная организация памяти с линейной адресацией

4.Защищенный режим работы

5.Независимость от компьютерной платформы и совместимость с другими операционными системами

6.Графический интерфейс пользователя

7.Технология Plug and Play – автоматического конфигурирования устройств

Plug and Play (сокр. PnP), дословно переводится как «включил и играй (работай)» — технология, предназначенная для быстрого определения и конфигурирования устройств в компьютере и других технических устройствах. Разработана фирмой Microsoft при содействии других компаний. Технология PnP основана на использовании объектно-ориентированной архитектуры, ее объектами являются внешние устройства и программы. Операционная система автоматически распознает объекты и вносит изменения в конфигурацию абонентской системы.

8.Использование средств мультимедиа

9.Встроенная поддержка сети

Многозадачность и диспетчеризация

Большинство разработчиков ОС называют задачами работающие программы. Задачей принято называть загруженную в память программу, которая выполняет определенную работу. Задача является единицей работы компьютера. В Windows NT и Unix используют синоним понятия «задача» — «процесс».

Многозада?чность (англ. multitasking) — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.

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

Процессом (process) называется экземпляр вашей программы, загруженной в память.

Этот экземпляр может создавать потоки (thread), которые представляют собой последовательность инструкций на выполнение.

Важно понимать, что выполняются не процессы, а именно потоки. Причем любой процесс имеет хотя бы один поток. Этот поток называется главным (основным) потоком приложения.

Так как практически всегда потоков гораздо больше, чем физических процессоров для их выполнения, то потоки на самом деле выполняются не одновременно, а по очереди. (Заметьте, что распределение процессорного времени происходит именно между потоками, так как, еще раз повторю, процессы не выполняются.) Но переключение между ними происходит так часто, что кажется будто они выполняются параллельно.

В зависимости от ситуации потоки могут находиться в трех состояниях. Давайте посмотрим, что это за состояния.

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

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

И есть еще третье, тоже очень важное состояние — состояние блокировки. Когда поток заблокирован, ему вообще не выделяется время. Обычно блокировка ставится на время ожидания какого-либо события. При возникновении этого события поток автоматически переводится из состояния блокировки в состояние готовности.

Многозадачная среда обладает следующими особенностями:

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

В Windows используются две модели многозадачности:

  • совместная или кооперативная многозадачность;
  • вытесняющая или приоритетная многозадачность.

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

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

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

4.3. Виртуальная память

Введем новое понятие: «виртуальное адресное пространство».

Виртуальное адресное пространство — это максимально доступное приложению адресное пространство.

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

Прилагательное «виртуальное» применительно к виртуальному адресному пространству означает, что это общее число доступных приложению уникально адресуемых ячеек памяти, но не общий объём реальной памяти, установленной в компьютере, или выделенной в конкретный момент времени данному приложению.

Например, микропроцессор с 32-разрядной адресной шиной может адресовать до 4 Гб (232) адресного пространства. Этот объем может значительно превосходить объем физически реализуемой оперативной памяти.

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

Виртуа?льная па?мять (англ. Virtual memory) — технология управления памятью ЭВМ, разработанная для многозадачных операционных систем, которая позволяет нескольким параллельно работающим задачам делить между собой адресное пространство компьютера.

Возможность управления памятью приложений (задач) со стороны Windows основана на том, что процессор позволяет в разное время использовать страницы физической памяти с разными виртуальными адресными пространствами задач.

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

Как реализуется виртуальная память? Реализуется виртуальное адресное пространство задачи частично за счет оперативной памяти, а частично за счет перекачки (свопинга) программных сегментов и сегментов данных (неиспользуемых страниц) из оперативной памяти на жесткий диск и обратно.

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

Защита памяти (англ. Memory protection) — способ управления правами доступа к отдельным областям памяти.

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

Концепция виртуальной памяти получила развитие в виде концепции виртуальной машины. В основе большинства возможностей, которыми обладает Windows лежит обеспечение виртуальной среды для работы приложений (задач).

Термин «Windows – виртуальная машина» обозначает среду, в которой выполняются приложения (задачи, процессы).

Это понятие включает в себя:

  • виртуальное адресное пространство задачи;
  • содержимое аппаратных регистров процессора;
  • ресурсы, выделенные задаче в соответствии с ее привилегиями.

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

Архитектура Windows NT

Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 и Windows 7 являются частью семейства операционных систем на ядре NT. Все они являются операционными системами с вытесняющей многозадачностью.

Архитектура Windows NT имеет модульную структуру и состоит из двух основных уровней — компоненты, работающие в режиме пользователя и компоненты режима ядра. Программы и подсистемы, работающие в режиме пользователя, имеют ограничения на доступ к системным ресурсам. Режим ядра имеет неограниченный доступ к системной памяти и внешним устройствам. Ядро системы NT называют гибридным ядром или макроядром. Архитектура включает в себя само ядро, уровень аппаратных абстракций (HAL), драйверы и ряд служб (Executives), которые работают в режиме ядра (Kernel-mode drivers) или в пользовательском режиме (User-mode drivers).

Пользовательский режим Windows NT состоит из подсистем, передающих запросы ввода\вывода соответствующему драйверу режима ядра посредством менеджера ввода\вывода. Есть две подсистемы на уровне пользователя: подсистема окружения (запускает приложения, написанные для разных операционных систем) и интегрированная подсистема (управляет особыми системными функциями от имени подсистемы окружения).

Режим ядра имеет полный доступ к аппаратной части и системным ресурсам компьютера. И также предотвращает доступ к критическим зонам системы со стороны пользовательских служб и приложений.

Компоненты режима ядра обладают следующими функциональными возможностями:

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

Особенности процессов пользовательского режима:

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

«Сердцем» операционной системы Windows NT является ядро.

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

Ядро осуществляет функции управления самого нижнего уровня.

Ядро управляет выделением аппаратных и программных ресурсов задачам клиентов Windows.

Ядро окружено исполнительной частью системы (Executive). Исполнительная система получает работу от пользовательских или системных задач и распределяет ее между своими компонентами.

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

Менеджер объектов. Создает, удаляет и управляет объектами NT Executive — абстрактными типами данных, используемых для представления ресурсов системы.

Монитор безопасности. Устанавливает правила защиты на локальном компьютере. Охраняет ресурсы операционной системы, выполняет защиту и регистрацию исполняемых объектов.

Менеджер процессов. Создает и завершает, приостанавливает и возобновляет процессы и нити, а также хранит о них информацию.

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

Менеджер ввода-вывода. Каждый запрос на ввод-вывод представлен пакетом IRP (I/O Request Packet). Пакеты передаются от одной подсистемы ввода-вывода к другой. Менеджер ввода-вывода определяет порядок доставки пакетов IRP (данных) файловым системам и драйверам устройств.

Менеджер окон. Отвечает за создание экранного интерфейса и за процессы, использующие оконные функции.

Интерфейс графических устройств (GDI — Graphical Device Interface) — графическое ядро системы. Состоит из функций Win32k.sys, в задачи которых входит отображение графики на мониторе компьютера и ее печать принтерах. Функции GDI выполняют роль посредников между приложениями и драйверами графических устройств типа дисплеев и принтеров.

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

Современные версии Windows предназначены для работы на различных типах компьютеров с использованием разных процессоров. Система должна работать с любыми аппаратными средствами. Независимость от аппаратных средств обеспечивает компонент ОС, работающий в режиме ядра т.н. уровень (слой) аппаратных абстракций (HAL – Hardware Abstraction Layer). HAL располагается на самом низком уровне исполняющей системы Windows NT между аппаратными средствами и остальными частями операционной системы. Этот уровень скрывает (или абстрагирует) особенности аппаратных платформ от верхних уровней операционной системы (такие детали, как контроллеры прерываний, интерфейсы ввода/вывода и механизмы взаимодействия между процессорами). Такое решение позволяет легко переносить Windows NT с одной платформы на другую путем замены только слоя HAL, который устанавливается на этапе инсталляции операционной системы. Процедуры HAL вызываются другими компонентами исполняющей системы Windows NT.

Часть Windows, работающую в режиме пользователя, составляют серверы, т.н. защищенные подсистемы. Защищенные подсистемы создаются Windows NT во время загрузки операционной системы. Сразу после создания они начинают бесконечный цикл своего выполнения, отвечая на сообщения, поступающие к ним от прикладных процессов и других подсистем. Каждая подсистема работает как отдельный процесс режима пользователя, причем каждая подсистема защищена от ошибок в других подсистемах: сбой в одной из них не приведет к блокировке других подсистем или модуля Executive. Для запуска приложений также используются процессы режима пользователя, поэтому они не могут повлиять на работу подсистем или модуля Executive.

Среди защищенных подсистем можно выделить подкласс, называемый подсистемами окружения (Environment). Подсистема окружения разработана для запуска приложений, написанных для разных типов операционных систем. Подсистемы окружения реализуют интерфейсы приложений операционной системы API (Application Programming Interface — интерфейс прикладного программирования). Другие типы подсистем, называемые интегральными подсистемами (Integral), исполняют необходимые операционной системе задачи. Например, большая часть системы безопасности Windows NT реализована в виде интегральной подсистемы, сетевые серверы также выполнены как интегральные подсистемы

Операционная система Windows NT разработана таким образом, чтобы обеспечивать прозрачную работу приложений различных типов под управлением одной и той же графической оболочки. Под управлением Windows NT можно запускать приложения, написанные для различных операционных систем, с использованием соответствующих API, включая MS DOS, OS/2, Windows 3-х, POSIX и Win32.

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

Подсистема окружения состоит из следующих подсистем — подсистема Win32, подсистема OS/2 и подсистема POSIX.

Подсистема окружения Win32 обеспечивает доступ для Windows — приложений к «родному» Windows API.

Win32 обеспечивает режим Windows — виртуальной машины. Подсистема окружения Win32 запускает 32-разрядные Windows приложения.

Кроме того поддерживается режим виртуальной машины MS-DOS NTVDM (NT Virtual DOS Machine). NTVDM представляет собой 32-разрядное приложение Windows, имитирующее компьютер с процессором Intel 80486, работающий под управлением MS DOS.

16-разрядные приложения Windows также работают как NTVDM. Windows NT 4.0 запускает 16-разрядные приложения Windows. В отличие от приложений MS DOS, каждое приложение Windows работает как отдельный процесс NTVDM. Процесс Winl6 NTVDM известен также под названием WOW (Winl6 on Win32).

Другие подсистемы окружения POSIX, OS/2обеспечивают режимы виртуальной машины ОС Unix и OS/2.

Подсистема окружения OS/2 поддерживает неграфические 16-разрядные приложения операционной системы OS/2 и эмулирует систему OS/2 2.1.x.

Подсистема окружения POSIX поддерживает приложения, написанные в соответствии со стандартом POSIX.1 (Portable Operating System Interface for Unix — Переносимый интерфейс операционных систем Unix — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой)[1]

Взаимодействие между приложениями и Windows осуществляется посредством сотен функций интерфейса прикладного программирования (Windows API).

Windows API — общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Windows и Windows NT корпорации «Майкрософт». Является самым прямым способом взаимодействия приложений с Windows. Известны его версии:

  • Win16 — первая версия Windows API для 16-разрядных версий Windows. Изначально назывался просто Windows API, затем стал называться Win16 для отличия от Win32.
  • Win32s — подмножество Win32, устанавливаемое на семейство 16-разрядных систем Windows 3.x и реализующее ограниченный набор функций Win32 API для этих систем.
  • Win32 — 32-разрядный API для современных версий Windows. Самая популярная ныне версия. Базовые функции этого API реализованы в DLL kernel32.dll и advapi32.dll; базовые модули GUI (Graphical user interface графи?ческий интерфе?йс по?льзователя) — в user32.dll и gdi32.dll. Win32 появился вместе с Windows NT и затем был перенесён (в несколько ограниченном виде) в системы серии Windows 9x. В современных версиях Windows, происходящих от Windows NT, работу Win32 GUI обеспечивают два модуля: csrss.exe (Client/Server Runtime Subsystem), работающий в пользовательском режиме, и win32k.sys в режиме ядра. Работу же системных Win32 API обеспечивает ядро — ntoskrnl.exe
  • Win64 — 64-разрядная версия Win32, содержащая дополнительные функции для использования на 64-разрядных компьютерах. Win64 API можно найти только в 64-разрядных версиях Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2008 R2 и Windows 7.

Интерфейс прикладного программирования представляет собой множество функций библиотек динамического связывания – Dinamic Link Library (DLL).

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

[1] Стандарт создан для обеспечения совместимости различных UNIX-подобных операционных систем и переносимости прикладных программ на уровне исходного кода, но может быть использован и для не-Unix систем.

Статьи к прочтению:

МНОГОЗАДАЧНОСТЬ без ВРЕДА!


Похожие статьи: