Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Концепция объектной модели компонентов (COM). Основные понятия в COM модели.




Архитектура Windows базируется на использовании множества различных объектов. Объект ядра (kernel object) - это структура данных, доступ к членам которой, имеет только ядро Windows. Далее приведены примеры объектов ядра:

- объект Process представляет процесс;

- объект Thread определяет поток;

- объект File представляет открытый файл;

- объект File-mapping представляет отображаемый в память файл (memory-mapped file), то есть файл, содержимое которого отображено непосредствен­но на виртуальное адресное пространство и используется как физическая память;

- объект Pipe используется для обмена данными между процессами;

- объект Event является объектом синхронизации потоков, сигнализирую­щим о завершении операции;

- объект Mutex представляет собой объект синхронизации потоков, который может использоваться несколькими процессами;

- объект Semaphore используется для того, чтобы учитывать ресурсы и сигнализировать потоку о доступности ресурса на данный момент.

Кроме объектов ядра, существуют также пользовательские объекты и объекты GDI, такие как меню, окна, шрифты, кисти и курсоры мыши.

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

Хотя к объектам ядра нельзя получить непосредственный доступ из пользовательского режима, в Windows API есть функции, которые можно вызывать из данного режима для управления этими объектами. Это своего рода инкапсуляция (encapsulation), защищающая объекты от непредусмотренных или неразрешенные действий. Когда создается объект ядра посредством вызова соответствующей АРI функции (CreateProcess, GreateThread, CreateFile и GreateFileMapping), функция возвращает дескриптор вновь созданного объекта. Такой дескриптор может быть передан другой API-функции для того, чтобы она могла управлять данным объектом.

Дескриптор объекта является зависимым от процесса (process-specific). Это означает, что он действует только в пределах данного процесса. Некоторые идентификаторы, такие как ID процесса, наоборот, являются идентификаторами системного уровня - область их действия - все процессы системы.

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

С учетом этого ядро должно поддерживать подсчет используемости (usage count) каждого объекта. Ядро уничтожает объект тогда, когда его используемость становится равной нулю, но не раньше. Таким образом, процесс, создавший данный объект, может закрыть (close) его дескриптор (посредством вызова API-функции CloseHandle), но объект не будет уничтожен, если какой-то другой процесс продолжает его использовать.

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

 

Алгоритм планирования процессов и потоков Windows 2000

В Windows 2000 реализована вытесняющая многозадачность, и разбиение процесса на потоки. Многозадачность реализована на уровне потоков. Используется механизм квантования и приоритетов. Чтобы все потоки работали, операционная система отводит каждому из них определенное процессорное время. Тем самым создается иллюзия одновременного выполнения потоков (разумеется, для многопроцессорных компьютеров возможен истинный параллелизм). В Windows реализована система вытесняющего планирования на основе приоритетов, в которой всегда выполняется поток с наибольшим приоритетом, готовый к выполнению. Выбранный для выполнения поток работает в течение некоторого периода, называемого квантом. Квант определяет, сколько времени будет выполняться поток, пока операционная система не прервет его. По окончании кванта операционная система проверяет, готов ли к выполнению другой поток с таким же (или большим) уровнем приоритета. Если таких потоков не оказалось, текущему потоку выделяется еще один квант. Однако поток может не полностью использовать свой квант. Как только другой поток с более высоким приоритетом готов к выполнению, текущий поток вытесняется, даже если его квант еще не истек.

Квант не измеряется, в каких бы то ни было единицах времени, а выражается целым числом. Для каждого потока хранится текущее значение его кванта. Когда потоку выделяется квант процессорного времени, это значит, что его квант устанавливается в начальное значение. Оно зависит от операционной системы. Например, для Win2000 Professional начальное значение кванта равно 6, а для Win2000 Server – 36.

Это значение можно изменить вызвав Control Panel - > System -> Advanced -> Performance options. Значение «Applications» – как для Win2000 Professional; «Background Services» – как для Win2000 Server. Или напрямую в ключе реестра HKLM\System\CurrentControlset\Control\PriorityControl\ Win32PrioritySeparation.

Всякий раз, когда возникает прерывание от таймера, из кванта потока вычитается 3, и так до тех пор, пока он не достигнет нуля. Частота срабатывания таймера зависит от аппаратной платформы. Например, для большинства однопроцессорных x86 систем он составляет 10мс, а на большинстве многопроцессорных x86 систем – 15мс.

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

В качестве примера рассмотрим схему назначения приоритетов потокам, принятую в операционной системе Windows NT. В системе определено 32 уровня приоритетов и два класса потоков — потоки реального времени и потоки с переменными приоритетами. Диапазон от 1 до 15 включительно отведен для потоков с переменными приоритетами, а от 16 до 31 — для более критичных ко времени потоков реального времени (приоритет 0 зарезервирован для системных целей).

Уровень приоритета каждого потока состоит из трех составляющих:

- класс приоритета процесса (простаивающий, нормальный, высокий, реального времени);

- уровень приоритета потока внутри класса приоритета процесса (нижний, ниже нормального, нормальный, выше нормального, высший)

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

При создании процесса, ему назначается один из шести классов приоритетов:

Класс Флаг в функции Create Process Числовой уровень
Realtime (реального времени) REALTIME_PRIORITY_CLASS 24
High (высокий) HIGH_PRIORITY_CLASS 13
Above normal* (выше нормального) ABOVE_NORMAL_ PRIORITY_CLASS 10
Normal (нормальный) NORMAL_PRIORITY_CLASS 8 (7–9)
Below normal* (Ниже нормального) BELOW_NORMAL_ PRIORITY_CLASS 6
Idle (простаивающий) IDLE_PRIORITY_CLASS 4

* – Above normal и Below normal появились начиная с Win2000.

Уровень Idle назначается процессу, который ничего не должен делать в случае активности других процессов (например, хранитель экрана). Процессам, запускаемым пользователем, присваивается нормальный уровень. Пользователь может запустить несколько процессов. Тому процессу, с которым пользователь непосредственно работает (а это может быть только один процесс) уровень приоритета поднимается на две единицы (7+2 = 9). Это делает общение с прикладной программой более “комфортабельным”. Высокий класс приоритета назначается некоторым системным процессам, которые простаивают до возникновения определенных событий и, поэтому, не мешают остальным процессам. Только в особых случаях процесс может относиться к классу Realtime.

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

При создании процесса он в зависимости от класса получает по умолчанию базовый приоритет в верхней или нижней части диапазона. Базовый приоритет процесса в дальнейшем может быть повышен или понижен операционной системой. Первоначально поток получает значение базового приоритета из диапазона базового приоритета процесса, в котором он был создан. Пусть, например, значение базового приоритета некоторого процесса равно К. Тогда все потоки данного процесса получат базовые приоритеты из диапазона [К-2, К+2]. Отсюда видно, что, изменяя базовый приоритет процесса, ОС может влиять на базовые приоритеты его потоков.

В Windows NT с течением времени приоритет потока, относящегося к классу потоков с переменными приоритетами, может отклоняться от базового приоритета потока, причем эти изменения могут быть не связаны с изменениями базового приоритета процесса. ОС может повышать приоритет потока (который в этом случае называется динамическим) в тех случаях, когда поток не полностью использовал отведенный ему квант, или понижать приоритет, если квант был использован полностью. ОС наращивает приоритет дифференцированно в зависимости от того, какого типа событие не дало потоку полностью использовать квант. В частности, ОС повышает приоритет в большей степени потокам, которые ожидают ввода с клавиатуры (интерактивным приложениям) и в меньшей степени — потокам, выполняющим дисковые операции. Именно на основе динамических приоритетов осуществляется планирование потоков. Начальной точкой отсчета для динамического приоритета является значение базового приоритета потока. Значение динамического приоритета потока ограничено снизу его базовым приоритетом, верхней же границей является нижняя граница диапазона приоритетов реального времени.

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

1. Готовность(Ready). У потока есть все, но не хватает только процессора (пул потоков).

2. Первоочередная готовность (standby). Для каждого процессора системы выбирается один поток, которая будет выполняться следующим (самый первый поток в очереди). Когда условия позволяют, происходит переключение на контекст этого потока.

3. Выполнение (Running). Поток выполняется процессором и покинет это состояние либо, если она завершится, либо, если появилась более приоритетная поток или закончился квант времени, либо, если она ожидает какое-либо событие.

4. Ожидание (Waiting). Поток может оказаться в этом состоянии либо по своей инициативе, если он ожидает некоторый объект для того, чтобы синхронизировать свое выполнение, либо операционная система (например, подсистема ввода-вывода) может ожидать чего-то в интересах потока, либо подсистема окружения может заставлять поток приостановить себя.

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

6. Завершение(Terminate). Когда выполнение всех команд потока закончилось, он находится в состоянии завершения до тех пор, пока его не удалит менеджер объектов. Если в исполнительной части имеется указатель на этот же поток, то он может быть инициализирован и использован снова.

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 261.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...