Операционные системы семейства Windows презентация

Содержание


Презентации» Информатика» Операционные системы семейства Windows
Операционные системы семейства WindowsЛитература
 Руссинович М., Соломон Д.
 Внутреннее устройство Microsoft Windows. 6-е изд.История развития
 Появление фирмы MICROSOFT и интерпретатора языка BASIC (1981 г.)Полноценная операционная система MS Windows появилась в 1995 г., как однопользовательскаяДругая линейка ОС корпорации Microsoft была связана с развитием операционной системыWindows XP (2001г.) — Windows NT 5.1
 Windows XP (2001г.) —Windows Server 2008 R2 — Windows NT 6.1 (2009г.)
 Windows ServerWindows 10 (29 июля 2015)
 Windows 10 (29 июля 2015)
 ТребованияСемейство ОС для карманных компьютеров
 Это семейство операционных систем реального времениWindows Mobile мобильная операционная система, разработанная Microsoft для собственных аппаратных платформWindows Embedded 
 Windows Embedded — это семейство операционных систем реальногоОсобенности Windows 2000
 ОС Windows 2000 поддерживает службу каталогов Active DirectoryWindows 2000 рассчитана на рабочие станции и серверы;
 Windows 2000 рассчитанаОсобенности Windows 7В уровень HAL включены те службы, которые зависят от набора микросхемHalacpi.dll - Персональные компьютеры с усовершенствованным интерфейсом управления конфигурированием и энергопотреблениемИзначально Windows NT поставляется тремя подсистемами среды: Windows, POSIX и OS/2.Объекты Windows
 В Windows любой ресурс системы, который одновременно может бытьКаждый объект состоит из двух частей - заголовка объекта и телаКроме заголовка объекта, каждый объект имеет тело объекта, формат и содержаниеВ число атрибутов тела объекта-процесса входят:  
 Идентификатор процесса -Объект- поток имеет следующие атрибуты тела:  
 Идентификатор клиента -Объекты исполняющей системы, видимые функциям Windows APIСтруктура объектаОбщие службы объекта
 Менеджер объектов предоставляет небольшой набор служб, позволяющий работатьМетоды объектаБезопасность объекта
 Когда процесс открывает дескриптор объекта, менеджер объектов вызывает мониторПроцессы и потокиСостояния потокаПорядок работы функции CreateProcessСоздание процесса
 Создать дескриптор процесса и поместить его в таблицу процессов
Создание процессаСоздание потока
 Создать дескриптор потока и поместить его в таблицу потоков
Создание потокаЗавершение потока
 Сохранить статистические данные потока и код возврата в егоЗавершение процесса
 Завершить выполнение всех потоков процесса
 Сохранить статистические данные процессаСоздание/завершение процесса – Win32
 BOOL CreateProcess( 	LPCTSTR lpszImageName, 	LPCTSTR lpszCommandLine, 	LPSECURITY_ATTRIBUTESSTARTUPINFO si;
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 ZeroMemory( &si, sizeof(si) );
 si.cbСоздание/завершение потока – Win32
 HANDLE CreateThread( 	LPSECURITY_ATTRIBUTES lpThreadAttributes, 	SIZE_T dwStackSize, 	LPTHREAD_START_ROUTINEint GlobalVar = 0;
 int GlobalVar = 0;
 
 DWORD WINAPIПланирование выполнения процессов и потоков
 Операционная система распределяет процессорное время междуНа клиентских версиях Windows потоки по умолчанию выполняются в течение двухКогда система запускается, делается вычисление, результатом которого является количество тактовых циклов,Планирование в WindowsДинамические приоритеты имеют значения в диапазоне 1-15. ОС может изменять приоритетИмеется два важных отличия между динамическими приоритетами и приоритетами реального времени.
Ядро Windows всегда запускает тот из потоков, готовых к выполнению, которыйПриоритеты потоков устанавливаются относительно базового приоритета процесса, и во время созданияПервоначально функцией CreateProcess устанавливаются четыре класса приоритета, каждый из которых имеетДля установки и выборки относительного приоритета потока следует использовать эти значения.Алгоритмы приоритетного планирования
 Для предотвращения бесконечной работы высокоприоритетных потоков планировщик может‰Планировщик Windows периодически настраивает текущий приоритет потоков, используя внутренний механизм повышенияИнтересной аномалией, относящейся к процессу простоя Idle , является то, чтоМоменты смены потоковОбъект - заданиеСинхронизация процессов и потоков
 В Windows реализована вытесняющая многозадачность - этоОбъектов синхронизации существует несколько, самые важные из них: 
 Объектов синхронизацииРабота с объектами синхронизации 
 Чтобы создать тот или иной объектПо имеющемуся дескриптору объекта можно определить его текущее состояние. Это делаетсяЕсли в качестве времени указана символическая константа INFINITE, то функция будетСемафоры
 Семафоры – примитивы синхронизации более высокого уровня абстракции, чем признакиС каждым семафором ассоциирована очередь потоков
 С каждым семафором ассоциирована очередьВиды семафоров
 Двоичный семафор
 S может принимать значения 0 и 1,Виды семафоров
 Счетный семафор
 S инициализируется значением N (число доступных единицВзаимоисключения (мьютексы)
 Объекты-взаимоисключения (мьютексы, mutex - от MUTual EXclusion) позволяют координироватьСобытия (event)
 Объекты-события используются для уведомления ожидающих потоков о наступлении какого-либоСемафоры
 Объект-семафор - это фактически объект-взаимоисключение со счетчиком. Данный объект позволяетСемафоры обычно используются для учета ресурсов (текущее число ресурсов задается переменнойРеализация семафоров Win32
 В следующем примере по очереди запускаются десять потоков,class SemaphoreTest 
 class SemaphoreTest 
 {
  static Semaphore sЗащищенный доступ к переменным
 Существует ряд функций, позволяющих работать с глобальнымиСравнительные характеристики объектов синхронизации WindowsПроблемы семафоров
 В Windows существуют важные ограничения, касающиеся реализации семафоров. Например,/* hsem – дескриптор семафора. Максимальное значение счетчика семафора равно 2.Один из возможных вариантов правильного решения заключается в том, чтобы защититьНо и эта реализация, в таком общем виде, страдает ограничениями. Предположим,Влияние синхронизации на производительность 
 Использование синхронизации в программах может иГлавный поток создает семафор с небольшим, например 4, максимальным значением параметра,Главный поток может регулировать, или, как говорят, "дросселировать" (throttle) выполнение рабочихВ приведенном ниже фрагменте кода представлен видоизмененный рабочий цикл, выполняющий двеПовышение при ожидании ресурсов исполняющей системы 
 Когда поток пытается получитьWindows 2000 поддерживает два базовых типа драйверов: 
 Драйверы пользовательского режимаТипы драйверовДрайверы выполняются в режиме ядра в одном из трех контекстов: Одно- и многоуровневые драйверы
 одноуровневые (monolithic drivers)
 Но большинство драйверов, управляющихПо своей структуре драйвер устройства является файлом PE-формата (Portable Executable, PE).При установке устройства менеджер ввода-вывода назначает ему уникальный набор системных ресурсов.Уровни запросов прерываний  
 Всего существует 32 уровня, с 0



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Операционные системы семейства Windows


Слайд 2
Описание слайда:
Литература Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows. 6-е изд. — СПб.: Питер, 2013. — 800 с.

Слайд 3
Описание слайда:
История развития Появление фирмы MICROSOFT и интерпретатора языка BASIC (1981 г.) для микропроцессора Intel8088. Первый ПК IBM PC и MS DOS 1.0 (1981 г.), PC AT и MS DOS 3.0 (1984 г.). 3. Проект Lisa (графический интерфейс GUI Xerox, ПК Apple, С. Джобс, 1983 г.). Оболочка MS DOS – Windows 1.0 (1985 г.). Версия Windows 2.0 для PC AT (1987 г.).

Слайд 4
Описание слайда:

Слайд 5
Описание слайда:
Полноценная операционная система MS Windows появилась в 1995 г., как однопользовательская операционная система, поддерживающая вытесняющую многозадачность, работу в сети, использование длинных имен и ряд других новых и удобных функций. Полноценная операционная система MS Windows появилась в 1995 г., как однопользовательская операционная система, поддерживающая вытесняющую многозадачность, работу в сети, использование длинных имен и ряд других новых и удобных функций. 8. Windows 95 с большинством особенностей монолитной ОС на основе MS DOS 7.0, содержащая в значительной части 16-разрядный код (1995 Г.). 9. Windows 98 со значительным наследием MS DOS, содержащая частично 16-разрядный код, и ориентацией на работу в Интернет (1998 г.). 10. Windows ME, в основе повторяющая Windows 98, но с возможностью восстановления настроек ПК при неверной установке параметров (2000 г.).

Слайд 6
Описание слайда:
Другая линейка ОС корпорации Microsoft была связана с развитием операционной системы OS/2. Сетевая оболочка LAN Manager послужила основой для создания ОС Windows NT. Другая линейка ОС корпорации Microsoft была связана с развитием операционной системы OS/2. Сетевая оболочка LAN Manager послужила основой для создания ОС Windows NT. В Windows NT реализован ряд важных решений: возможность организации двухуровневой сети, использование данной ОС для организации файлового сервера, сервера приложений, поддержка различных сетевых протоколов и сервисов, поддержка более надежной файловой системы NTFS. 11. Полностью 32-разрядная операционная систем Windows NT 3.1 (1993 г.).

Слайд 7
Описание слайда:
Windows XP (2001г.) — Windows NT 5.1 Windows XP (2001г.) — Windows NT 5.1 Windows XP 64-bit Edition (2006г.) — Windows NT 5.2 Windows Server 2003 (2003г.) — Windows NT 5.2 Windows Vista (2006г.) — Windows NT 6.0 Обновлена подсистема управления памятью и вводом-выводом Windows Home Server (2007г.) — Windows NT 5.2 Windows Server 2008 (2008г.) — Windows NT 6.0 Windows Small Business Server (2008г.) — Windows NT 6.0 Windows 7 — Windows NT 6.1 (2009г.) В Windows 7 была улучшена совместимость со старыми приложениями, некоторые из которых было невозможно запустить на Windows Vista Максимальный размер оперативной памяти (для 64-битных версий) 16 Гб-192 Гб

Слайд 8
Описание слайда:
Windows Server 2008 R2 — Windows NT 6.1 (2009г.) Windows Server 2008 R2 — Windows NT 6.1 (2009г.) Windows Home Server 2011 — Windows NT 6.1 (2011г.) Windows 8 — Windows NT 6.2 (2012г.) Архитектура IA-32 (32-bit) или x86-64 (64-bit) Windows Server 2012 — Windows NT 6.2 (2012г.)

Слайд 9
Описание слайда:
Windows 10 (29 июля 2015) Windows 10 (29 июля 2015) Требования к персональному компьютеру: Процессор: 1 ГГц или более или система на кристалле. Оперативная память: 1 ГБ для 32-разрядной системы или 2 ГБ для 64-разрядной системы. Место на диске: 16 ГБ для 32-разрядной или 20 ГБ для 64-разрядной системы. Видеокарта с поддержкой Microsoft DirectX 9 и с драйвером WDDM. Дисплей с разрешением не менее 800 x 600 пикселей. Учётная запись пользователя Microsoft и подключение к Интернету[33] (при отсутствии Интернет-подключения будет предложено создать локальную учётную запись).Интернет-подключения будет предложено создать локальную учётную запись).

Слайд 10
Описание слайда:
Семейство ОС для карманных компьютеров Это семейство операционных систем реального времени было специально разработано для мобильных устройств. Поддерживаются процессоры ARM, MIPS, SuperH и x86. В отличие от остальных операционных систем Windows, операционные системы этого семейства продаются только в составе готовых устройств, таких как смартфоны, карманные компьютеры, GPS-навигаторы, MP3-проигрыватели и другие. В настоящее время под термином «Windows CE» понимают только ядро операционной системы. Windows CE (1996 г), была «урезанной» версией настольной операционной системы MS Windows 95

Слайд 11
Описание слайда:
Windows Mobile мобильная операционная система, разработанная Microsoft для собственных аппаратных платформ Pocket PC (коммуникатор) и Smartphone. В настоящее время переживает постепенный отказ от поддержки и разработки Windows Mobile мобильная операционная система, разработанная Microsoft для собственных аппаратных платформ Pocket PC (коммуникатор) и Smartphone. В настоящее время переживает постепенный отказ от поддержки и разработки Windows Phone 7 (2010г.) Операционная система является преемником Windows Mobile, хотя и несовместима с ней, с полностью новым интерфейсом и с интеграцией сервисов Microsoft. Microsoft начала процесс создания единой экосистемы на базе ОС Windows в 2012 году. На Build 2014 Microsoft представила концепцию «универсальных» приложений Windows, при создании которых использован единый код и интерфейс для всех версий Windows.

Слайд 12
Описание слайда:
Windows Embedded Windows Embedded — это семейство операционных систем реального времени, было специально разработано для применения в различных встраиваемых системах. Ядро системы имеет общее с семейством ОС Windows CE и поддерживает процессоры ARM, MIPS, SuperH и x86. Windows Embedded включает дополнительные функции по встраиванию, среди которых фильтр защиты от записи, загрузка с флеш-памяти, CD-ROM, сети, использование собственной оболочки системы и т. п. В отличие от операционных систем Windows, операционные системы этого семейства продаются только в составе готовых устройств, таких как: банкоматы, медицинские приборы, навигационное оборудование, «тонкие» клиенты, медиапроигрыватели, цифровые рамки (альбомы), кассовые терминалы, платёжные терминалы, роботы, игровые автоматы, музыкальные автоматы и другие.

Слайд 13
Описание слайда:
Особенности Windows 2000 ОС Windows 2000 поддерживает службу каталогов Active Directory и на ее основе службу безопасности Public Key Infrastructure (PKI) и протокол Kerberos, терминальные службы, службы IIS. Система поддерживает до 4 Гб оперативной памяти и многопроцессорную симметричную обработку (SMP) – Windows 2000 Prof (до 2 процессоров), Windows 2000 Server SE (до 4 процессоров), Windows 2000 Sever AE (до 8 процессоров).

Слайд 14
Описание слайда:
Windows 2000 рассчитана на рабочие станции и серверы; Windows 2000 рассчитана на рабочие станции и серверы; Отказоустойчива; Защищенная ОС; Содержит богатый набор утилит для администрирования локального компьютера и сети; Ядро ОС написано на C и C++, что обеспечивает переносимость ОС; Поддержка Unicode, что обеспечивает поддержку различных языков; Высокоэффективная подсистему управления памятью; Поддержка структурной обработки исключений (SEH), что облегчает восстановление после сбоев; Поддержка динамически подключаемых библиотек (DLL); Поддержка многопоточной и многопроцессорной обработки; Поддержка файловых систем NTFS, FAT, FAT32.

Слайд 15
Описание слайда:
Особенности Windows 7

Слайд 16
Описание слайда:

Слайд 17
Описание слайда:

Слайд 18
Описание слайда:

Слайд 19
Описание слайда:

Слайд 20
Описание слайда:
В уровень HAL включены те службы, которые зависят от набора микросхем материнской платы и меняются от машины к машине в разумных пределах: В уровень HAL включены те службы, которые зависят от набора микросхем материнской платы и меняются от машины к машине в разумных пределах: набор низкоуровневых функций (около 100), обеспечивающий стандартный интерфейс взаимодействия с аппаратнозависимыми элементами для функций , вызываемых компонентами ядра , драйверов и исполнительной системы , позволяющий абстрагироваться от того , на какой конкретно элементной базе ( чипе контроллера прерывания, контроллера ПДП) реализовано выполнение доступа к шине, таймеру и т .д . Хотя в операционную систему включено несколько HAL-модулей , у Windows есть возможность определить во время загрузки, какой HAL-модуль нужно использоваться.

Слайд 21
Описание слайда:

Слайд 22
Описание слайда:
Halacpi.dll - Персональные компьютеры с усовершенствованным интерфейсом управления конфигурированием и энергопотреблением — Advanced сonfiguration and Power Interface (ACPI). Halacpi.dll - Персональные компьютеры с усовершенствованным интерфейсом управления конфигурированием и энергопотреблением — Advanced сonfiguration and Power Interface (ACPI). Halmacpi.dll - Персональные компьютеры с усовершенствованным программируемым контроллером прерываний — Advanced Programmable Interrupt Controller (APIC). На x64-машинах имеется только один HAL-образ по имени Hal.dll. Это обусловлено наличием у всех x64-машин материнских плат одинаковой конфигурации, поскольку процессы требуют поддержки ACPI и APIC.

Слайд 23
Описание слайда:

Слайд 24
Описание слайда:

Слайд 25
Описание слайда:

Слайд 26
Описание слайда:

Слайд 27
Описание слайда:

Слайд 28
Описание слайда:

Слайд 29
Описание слайда:
Изначально Windows NT поставляется тремя подсистемами среды: Windows, POSIX и OS/2. Но подсистемы POSIX и OS/2 последний раз поставлялись с Windows 2000. Выпуски клиентской версии Windows Ultimate и Enterprise, а также все серверные версии включают поддержку для усовершенствованной подсистемы POSIX, которая называется подсистемой для приложений на основе Unix (Unix-based Applications, SUA). Изначально Windows NT поставляется тремя подсистемами среды: Windows, POSIX и OS/2. Но подсистемы POSIX и OS/2 последний раз поставлялись с Windows 2000. Выпуски клиентской версии Windows Ultimate и Enterprise, а также все серверные версии включают поддержку для усовершенствованной подсистемы POSIX, которая называется подсистемой для приложений на основе Unix (Unix-based Applications, SUA).

Слайд 30
Описание слайда:

Слайд 31
Описание слайда:

Слайд 32
Описание слайда:

Слайд 33
Описание слайда:

Слайд 34
Описание слайда:

Слайд 35
Описание слайда:

Слайд 36
Описание слайда:

Слайд 37
Описание слайда:

Слайд 38
Описание слайда:

Слайд 39
Описание слайда:

Слайд 40
Описание слайда:

Слайд 41
Описание слайда:

Слайд 42
Описание слайда:

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

Слайд 44
Описание слайда:
Каждый объект состоит из двух частей - заголовка объекта и тела объекта. Каждый объект состоит из двух частей - заголовка объекта и тела объекта. Менеджер объектов работает с заголовком объекта, а другие компоненты executive работают с телами объектов тех типов, которые они сами создают. Заголовок объекта используется менеджером без учета типа объекта. В заголовке объекта любого типа содержится имя, каталог, дескриптор безопасности, квоты на использование ресурсов, счетчик открытых описателей, база данных открытых описателей, признак постоянный/временный, режим пользователя/ядра, указатель на тип объекта.

Слайд 45
Описание слайда:
Кроме заголовка объекта, каждый объект имеет тело объекта, формат и содержание которого уникально определяется типом этого объекта; у всех объектов одного и того же типа одинаковый формат тела. При создании объекта исполнительная часть может оперировать данными в телах всех объектов этого типа. Кроме заголовка объекта, каждый объект имеет тело объекта, формат и содержание которого уникально определяется типом этого объекта; у всех объектов одного и того же типа одинаковый формат тела. При создании объекта исполнительная часть может оперировать данными в телах всех объектов этого типа.

Слайд 46
Описание слайда:
В число атрибутов тела объекта-процесса входят: Идентификатор процесса - уникальное значение, которое идентифицирует процесс в рамках операционной системы. Токен доступа - исполняемый объект, содержащий информацию о безопасности. Базовый приоритет - основа для исполнительного приоритета потоков процесса. Процессорная совместимость - набор процессоров, на которых могут выполняться потоки процесса. Предельные значения квот - максимальное количество страничной и нестраничной системной памяти, дискового пространства, предназначенного для выгрузки страниц, процессорного времени - которые могут быть использованы процессами пользователя. Время исполнения - общее количество времени, в течение которого выполняются все потоки процесса.

Слайд 47
Описание слайда:
Объект- поток имеет следующие атрибуты тела: Идентификатор клиента - уникальное значение, которое идентифицирует поток при его обращении к серверу. Контекст потока- информация, которая необходима ОС для того, чтобы продолжить выполнение прерванного потока. Контекст содержит текущее состояние регистров, стеков и индивидуальной области памяти, которая используется подсистемами и библиотеками. Текущий приоритет - значение приоритета потока в данный момент. Базовый приоритет - основа текущего приоритета потока. Процессорная совместимость - перечень типов процессоров, на которых может выполняться поток. Время выполнения потока - суммарное время выполнения в пользовательском режиме и в режиме ядра, накопленное за период существования. Состояние предупреждения - флаг, который показывает, что поток должен выполнять вызов асинхронной процедуры. Счетчик приостановок - текущее количество приостановок выполнения.

Слайд 48
Описание слайда:
Объекты исполняющей системы, видимые функциям Windows API

Слайд 49
Описание слайда:
Структура объекта

Слайд 50
Описание слайда:
Общие службы объекта Менеджер объектов предоставляет небольшой набор служб, позволяющий работать с атрибутами, сохраненными в любом заголовке объекта, и применимый к объектам любого типа. Хотя общие службы объектов поддерживаются для объектов всех типов, у каждого объекта есть свои службы создания (create), открытия (open) и запроса (query). Например, система ввода-вывода реализует службу создания файла для своих файловых объектов, а менеджер процессов реализует службу создания процесса для своих объектов-процессов.

Слайд 51
Описание слайда:

Слайд 52
Описание слайда:
Методы объекта

Слайд 53
Описание слайда:
Безопасность объекта Когда процесс открывает дескриптор объекта, менеджер объектов вызывает монитор безопасности (security reference monitor), ту часть системы безопасности, которая работает в режиме ядра, передавая ему от процесса набор желаемых прав доступа. Монитор безопасности ссылок проверяет, разрешает ли дескриптор безопасности объекта тот вид доступа, который запрашивается процессом. Если да, монитор возвращает набор выделенных прав доступа, которым разрешено пользоваться процессу, а менеджер объектов сохраняет права доступа в создаваемом им дескрипторе объекта.

Слайд 54
Описание слайда:
Процессы и потоки

Слайд 55
Описание слайда:

Слайд 56
Описание слайда:

Слайд 57
Описание слайда:
Состояния потока

Слайд 58
Описание слайда:

Слайд 59
Описание слайда:

Слайд 60
Описание слайда:

Слайд 61
Описание слайда:
Порядок работы функции CreateProcess

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

Слайд 63
Описание слайда:
Создание процесса

Слайд 64
Описание слайда:
Создание потока Создать дескриптор потока и поместить его в таблицу потоков Проинициализировать значения полей общего назначения дескриптора потока Создать области данных, необходимые для функционирования потока в данной аппаратной архитектуре Инициализировать поле дескриптора «аппаратный контекст выполнения потока» Оповестить подсистемы, принимающие участие в управлении потоками, о создании нового потока Перевести поток в состояние «готов к выполнению»

Слайд 65
Описание слайда:
Создание потока

Слайд 66
Описание слайда:
Завершение потока Сохранить статистические данные потока и код возврата в его дескрипторе Перевести все ресурсы, принадлежащие потоку, в непротиворечивое и стабильное состояние Освободить все ресурсы, принадлежавшие потоку или использовавшиеся потоком Оповестить подсистемы, принимающие участие в управлении потоками, о завершении потока Установить состояние потока в значение «завершен» Если данный поток является последним активным потоком в процессе – завершить процесс После выполнения всех действий остается дескриптор потока, содержащий его код возврата и статистические данные; момент уничтожения дескриптора зависит от реализации

Слайд 67
Описание слайда:
Завершение процесса Завершить выполнение всех потоков процесса Сохранить статистические данные процесса и код возврата в его дескрипторе Перевести все ресурсы, принадлежащие процессу, в непротиворечивое и стабильное состояние Освободить все ресурсы, принадлежавшие процессу или использовавшиеся процессом Освободить ВАП и уничтожить его Оповестить подсистемы, принимающие участие в управлении процессами, о завершении процесса Установить состояние процесса в значение «завершен» После выполнения всех действий остается дескриптор процесса, содержащий его код возврата и статистические данные; момент уничтожения дескриптора зависит от реализации

Слайд 68
Описание слайда:
Создание/завершение процесса – Win32 BOOL CreateProcess( LPCTSTR lpszImageName, LPCTSTR lpszCommandLine, LPSECURITY_ATTRIBUTES lpsaProcess, LPSECURITY_ATTRIBUTES lpsaThread, BOOL fInheritHandles, DWORD fdwCreate, LPVOID lpvEnvironment, LPTSTR lpszCurDir, LPSTARTUPINFO lpsiStartInfo, LPPROCESS_INFORMATION lppiProcInfo); VOID ExitProcess(UINT fuExitCode); BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode );

Слайд 69
Описание слайда:
STARTUPINFO si; STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess( NULL, // No module name (use command line). TEXT("MyChildProcess"),// Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ); // Pointer to PROCESS_INFORMATION structure. // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread );

Слайд 70
Описание слайда:
Создание/завершение потока – Win32 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); VOID ExitThread(DWORD dwExitCode); BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode);

Слайд 71
Описание слайда:
int GlobalVar = 0; int GlobalVar = 0; DWORD WINAPI ThreadProc( LPVOID arg ){ *(int*)arg = *(int*)arg + 1; ExitThread(0); } int main(void){ int i; HANDLE Threads[10]; for( i = 0; i < 10; i ++ ){ Threads[i] = CreateThread(NULL, 0, ThreadProc, (LPVOID)&GlobalVar, 0, NULL); } for( i = 0; i < 10; i ++ ){ WaitForSingleObject(Threads[i],INFINITE); } return 0; }

Слайд 72
Описание слайда:
Планирование выполнения процессов и потоков Операционная система распределяет процессорное время между потоками, выделяя каждому из них определенную долю времени (квант). Процессорное время выделяется по очереди каждому потоку, но при этом учитывается также приоритет потока. Когда прекращается выполнение первичного потока процесса, уничтожается и сам процесс.

Слайд 73
Описание слайда:
На клиентских версиях Windows потоки по умолчанию выполняются в течение двух интервалов таймера (clock intervals), а на серверных системах по умолчанию поток выполняется в течение 12 интервалов таймера (чтобы минимизировать контекстные переключения). На клиентских версиях Windows потоки по умолчанию выполняются в течение двух интервалов таймера (clock intervals), а на серверных системах по умолчанию поток выполняется в течение 12 интервалов таймера (чтобы минимизировать контекстные переключения). Продолжительность интервала таймера варьируется в зависимости от аппаратной платформы и зависит от HAL. Например, интервал таймера на большинстве однопроцессорных систем x86 составляет около 10 миллисекунд, на большинстве мультипроцессорных систем x86 и x64 - порядка 15 миллисекунд. Этот интервал таймера хранится в переменной ядра KeMaximumIncrement в виде сотен наносекунд.

Слайд 74
Описание слайда:
Когда система запускается, делается вычисление, результатом которого является количество тактовых циклов, которому равен каждый квант времени (значение сохраняется в переменной ядра KiCyclesPerClockQuantum). Это вычисление делается путем умножения тактовой частоты процессора в герцах (числа тактовых импульсов центрального процессора в секунду) на количество секунд, затрачиваемое на запуск одного такта системных часов (на основе KeMaximumIncrement). Когда система запускается, делается вычисление, результатом которого является количество тактовых циклов, которому равен каждый квант времени (значение сохраняется в переменной ядра KiCyclesPerClockQuantum). Это вычисление делается путем умножения тактовой частоты процессора в герцах (числа тактовых импульсов центрального процессора в секунду) на количество секунд, затрачиваемое на запуск одного такта системных часов (на основе KeMaximumIncrement). Настройки кванта хранит параметр реестра НKLM\SYSTEM\CurrentControlSet\Control\PriorityControl\Win32PrioritySeparation

Слайд 75
Описание слайда:

Слайд 76
Описание слайда:
Планирование в Windows

Слайд 77
Описание слайда:
Динамические приоритеты имеют значения в диапазоне 1-15. ОС может изменять приоритет потока в этом диапазоне. Динамические приоритеты имеют значения в диапазоне 1-15. ОС может изменять приоритет потока в этом диапазоне. Приоритеты реального времени имеют значения в диапазоне 16-31. ОС не может изменять значение приоритета потока, находящееся в этом диапазоне. Низший приоритет планирования со значением 0 зарезервирован для потока обнуления страниц (Zero Page Thread), который выполняется в случае, когда больше нечего исполнять. Этот поток является компонентом диспетчера памяти, и его работа состоит в обнулении страниц из списка свободных страниц.

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

Слайд 79
Описание слайда:
Ядро Windows всегда запускает тот из потоков, готовых к выполнению, который обладает наивысшим приоритетом. Поток не является готовым к выполнению, если он находится в состоянии ожидания, приостановлен или блокирован по той или иной причине. Ядро Windows всегда запускает тот из потоков, готовых к выполнению, который обладает наивысшим приоритетом. Поток не является готовым к выполнению, если он находится в состоянии ожидания, приостановлен или блокирован по той или иной причине. Процесс может изменить или установить свой собственный приоритет или приоритет другого процесса, если это разрешено атрибутами защиты.  BOOL SetPriorityClass(HANDLE hProcess, DWORD dwPriority) DWORD GetPriorityClass(HANDLE hProcess) Потоки получают приоритеты на базе классов приоритета своих процессов.

Слайд 80
Описание слайда:
Приоритеты потоков устанавливаются относительно базового приоритета процесса, и во время создания потока его приоритет устанавливается равным приоритету процесса. Приоритеты потоков могут принимать значения в интервале ±2 относительно базового приоритета процесса. Результирующим пяти значениям приоритета присвоены следующие символические имена: Приоритеты потоков устанавливаются относительно базового приоритета процесса, и во время создания потока его приоритет устанавливается равным приоритету процесса. Приоритеты потоков могут принимать значения в интервале ±2 относительно базового приоритета процесса. Результирующим пяти значениям приоритета присвоены следующие символические имена: THREAD_PRIORITY_LOWEST THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_HIGHEST 

Слайд 81
Описание слайда:
Первоначально функцией CreateProcess устанавливаются четыре класса приоритета, каждый из которых имеет базовый приоритет (base priority): Первоначально функцией CreateProcess устанавливаются четыре класса приоритета, каждый из которых имеет базовый приоритет (base priority): IDLE_PRIORITY_CLASS, базовый приоритет 4. NORMAL_PRIORITY_CLASS, базовый приоритет 9 - 7. Нормальный базовый приоритет равен 9, если фокус ввода с клавиатуры находится в окне; в противном случае этот приоритет равен 7. HIGH_PRIORITY_CLASS, базовый приоритет 13. REALTIME_PRIORITY_CLASS, базовый приоритет 24. Классом REALTIME_PRIORITY_CLASS следует пользоваться с осторожностью, чтобы не допустить вытеснения других процессов.

Слайд 82
Описание слайда:
Для установки и выборки относительного приоритета потока следует использовать эти значения. Обратите внимание на использование целых чисел со знаком вместо чисел типа DWORD.  Для установки и выборки относительного приоритета потока следует использовать эти значения. Обратите внимание на использование целых чисел со знаком вместо чисел типа DWORD.  BOOL SetThreadPriority(HANDLE hThread, int nPriority) int GetThreadPriority(HANDLE hThread)  Существуют два дополнительных значения приоритета потоков. Они являются абсолютными, а не относительными, и используются только в специальных случаях. THREAD_PRIORITY_IDLE имеет значение 1 (или 16 — для процессов, выполняющихся в режиме реального времени). THREAD_PRIORITY_TIME_CRITICAL имеет значение 15 (или 31 — для процессов, выполняющихся в режиме реального времени).

Слайд 83
Описание слайда:

Слайд 84
Описание слайда:
Алгоритмы приоритетного планирования Для предотвращения бесконечной работы высокоприоритетных потоков планировщик может уменьшать с каждым тактом таймера текущий приоритет выполняющегося потока Для предоставления низкоприоритетным потокам процессорного времени планировщик может проверять время, в течение которого поток находился в состоянии готовности к исполнению Возможно адаптивное и динамическое изменение приоритетов адаптивное изменение – коррекция эффективных приоритетов на основании набора правил динамическое изменение – регулярный пересчет эффективных приоритетов на основании значений некоторой совокупности параметров

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

Слайд 86
Описание слайда:
Интересной аномалией, относящейся к процессу простоя Idle , является то, что Windows сообщает, что у процесса простоя Idle уровень приоритета равен 0. Но в действительности у приоритетов потоков простоя нет значения, потому что такие потоки выбираются для диспетчеризации, только если нет никаких других потоков, готовых к выполнению. Их приоритет никогда не сравнивается с приоритетами других потоков, не используется для помещения потока простоя в очередь готовых потоков, потоки простоя никогда не стоят ни в каких очередях готовых потоков. (Только один поток в каждой системе Windows действительно выполняется с приоритетом 0 — это поток обнуления страниц (zero page thread).) Интересной аномалией, относящейся к процессу простоя Idle , является то, что Windows сообщает, что у процесса простоя Idle уровень приоритета равен 0. Но в действительности у приоритетов потоков простоя нет значения, потому что такие потоки выбираются для диспетчеризации, только если нет никаких других потоков, готовых к выполнению. Их приоритет никогда не сравнивается с приоритетами других потоков, не используется для помещения потока простоя в очередь готовых потоков, потоки простоя никогда не стоят ни в каких очередях готовых потоков. (Только один поток в каждой системе Windows действительно выполняется с приоритетом 0 — это поток обнуления страниц (zero page thread).)

Слайд 87
Описание слайда:

Слайд 88
Описание слайда:

Слайд 89
Описание слайда:

Слайд 90
Описание слайда:
Моменты смены потоков

Слайд 91
Описание слайда:

Слайд 92
Описание слайда:

Слайд 93
Описание слайда:

Слайд 94
Описание слайда:
Объект - задание

Слайд 95
Описание слайда:
Синхронизация процессов и потоков В Windows реализована вытесняющая многозадачность - это значит, что в любой момент система может прервать выполнение одного потока и передать управление другому. Поэтому необходим механизм, позволяющий потокам согласовывать свою работу с общими ресурсами. Этот механизм получил название механизма синхронизации потоков (thread synchronization).

Слайд 96
Описание слайда:
Объектов синхронизации существует несколько, самые важные из них: Объектов синхронизации существует несколько, самые важные из них: взаимоисключение (mutex), критическая секция (critical section), событие (event) семафор (semaphore). Также в качестве объектов синхронизации могут использоваться сами процессы и потоки (когда один поток ждет завершения другого потока или процесса); а также файлы, коммуникационные устройства, консольный ввод и уведомления об изменении. Любой объект синхронизации может находиться в так называемом сигнальном состоянии. Потоки могут проверять текущее состояние объекта и/или ждать изменения этого состояния и таким образом согласовывать свои действия. При этом гарантируется, что когда поток работает с объектами синхронизации (создает их, изменяет состояние) система не прервет его выполнения, пока он не завершит это действие. Таким образом, все конечные операции с объектами синхронизации являются атомарными (неделимыми).

Слайд 97
Описание слайда:
Работа с объектами синхронизации Чтобы создать тот или иной объект синхронизации, производится вызов специальной функции WinAPI типа Create... (напр. CreateMutex). Этот вызов возвращает дескриптор объекта (HANDLE), который может использоваться всеми потоками, принадлежащими данному процессу. Есть возможность получить доступ к объекту синхронизации из другого процесса - либо унаследовав дескриптор этого объекта, либо, что предпочтительнее, воспользовавшись вызовом функции открытия объекта (Open...). После этого вызова процесс получит дескриптор, который в дальнейшем можно использовать для работы с объектом. Объекту, если только он не предназначен для использования внутри одного процесса, обязательно присваивается имя. Имена всех объектов должны быть различны (даже если они разного типа). Нельзя, например, создать событие и семафор с одним и тем же именем.

Слайд 98
Описание слайда:
По имеющемуся дескриптору объекта можно определить его текущее состояние. Это делается с помощью «ожидающих функций». Чаще всего используется функция WaitForSingleObject. По имеющемуся дескриптору объекта можно определить его текущее состояние. Это делается с помощью «ожидающих функций». Чаще всего используется функция WaitForSingleObject. Эта функция имеет два параметра, первый из которых - дескриптор объекта, второй - время ожидания в мсек. Функция возвращает: WAIT_OBJECT_0, если объект находится в сигнальном состоянии, WAIT_TIMEOUT - если истекло время ожидания, WAIT_ABANDONED, если объект-взаимоисключение не был освобожден до того, как владеющий им поток завершился. Если время ожидания указано равным нулю, функция возвращает результат немедленно, в противном случае она ждет в течение указанного промежутка времени. В случае, если состояние объекта станет сигнальным до истечения этого времени, функция вернет WAIT_OBJECT_0, в противном случае функция вернет WAIT_TIMEOUT.

Слайд 99
Описание слайда:
Если в качестве времени указана символическая константа INFINITE, то функция будет ждать неограниченно долго, пока состояние объекта не станет сигнальным. Если в качестве времени указана символическая константа INFINITE, то функция будет ждать неограниченно долго, пока состояние объекта не станет сигнальным. Если необходимо узнавать о состоянии сразу нескольких объектов, следует воспользоваться функцией WaitForMultipleObjects. Чтобы закончить работу с объектом и освободить дескриптор вызывается функция CloseHandle. Очень важен тот факт, что обращение к ожидающей функции блокирует текущий поток, т.е. пока поток находится в состоянии ожидания, ему не выделяется процессорного времени.

Слайд 100
Описание слайда:

Слайд 101
Описание слайда:
Семафоры Семафоры – примитивы синхронизации более высокого уровня абстракции, чем признаки блокировки; предложены Дийкстрой (Dijkstra) в 1968 г. в качестве компонента операционной системы THE Семафор - это целочисленная неотрицательная переменная, для которой определены 2 операции: P и V P(sem) (wait/down) ожидает выполнения условия sem > 0, затем уменьшает sem на 1 и возвращает управление V(sem) (signal/up) увеличивает sem на 1 Операции P и V выполняются атомарно

Слайд 102
Описание слайда:
С каждым семафором ассоциирована очередь потоков С каждым семафором ассоциирована очередь потоков при вызове потоком P(sem) если семафор "свободен" (>0), его значение уменьшается на 1, и выполнение потока продолжается если семафор "занят" (<=0), поток переводится в состояние ожидания и помещается в очередь, соответствующую данному семафору запускается какой-либо другой готовый к выполнению поток при вызове потоком V(sem) если очередь потоков, ассоциированная с данным семафором, не пуста – один из них разблокируется и помещается в очередь готовых к выполнению поток, вызвавший V (sem), продолжает свое выполнение в противном случае (нет потоков, ожидающих освобождения семафора), значение семафора увеличивается Таким образом, все вызовы изменяют состояние семафора, то есть семафор сохраняет некоторую информацию о прошедших вызовах

Слайд 103
Описание слайда:
Виды семафоров Двоичный семафор S может принимать значения 0 и 1, инициализируется значением 1 обеспечивает эксклюзивный доступ к ресурсу (например, при работе в критической секции) одновременно может выполняться только один поток Использование Semaphore S = 1; while( true ){ P(S); Использование ресурса V(S); }

Слайд 104
Описание слайда:
Виды семафоров Счетный семафор S инициализируется значением N (число доступных единиц ресурса) представляет ресурсы, состоящие из нескольких однородных элементов позволяет потокам исполняться, пока есть неиспользуемые элементы Использование Semaphore S1 = N, S2 = 1; while( true ){ P(S1); P(S2); Выбор свободного ресурса V(S2); Использование ресурса P(S2); Освобождение ресурса V(S2); V(S1); }

Слайд 105
Описание слайда:
Взаимоисключения (мьютексы) Объекты-взаимоисключения (мьютексы, mutex - от MUTual EXclusion) позволяют координировать взаимное исключение доступа к разделяемому ресурсу. Сигнальное состояние объекта (т.е. состояние "установлен") соответствует моменту времени, когда объект не принадлежит ни одному потоку и его можно "захватить". Состояние "сброшен" (не сигнальное) соответствует моменту, когда какой-либо поток уже владеет этим объектом. Для того, чтобы объявить взаимоисключение принадлежащим текущему потоку, надо вызвать одну из ожидающих функций. Поток, которому принадлежит объект, может его "захватывать" повторно сколько угодно раз (это не приведет к самоблокировке), но столько же раз он должен будет его освобождать с помощью функции ReleaseMutex.

Слайд 106
Описание слайда:
События (event) Объекты-события используются для уведомления ожидающих потоков о наступлении какого-либо события. Различают два вида событий - с ручным и автоматическим сбросом. Ручной сброс осуществляется функцией ResetEvent. События с ручным сбросом используются для уведомления сразу нескольких потоков. При использовании события с автосбросом уведомление получит и продолжит свое выполнение только один ожидающий поток, остальные будут ожидать дальше. Функция CreateEvent создает объект-событие, SetEvent - устанавливает событие в сигнальное состояние, ResetEvent-сбрасывает событие. Функция PulseEvent устанавливает событие, а после возобновления ожидающих это событие потоков (всех при ручном сбросе и только одного при автоматическом), сбрасывает его. Если ожидающих потоков нет, PulseEvent просто сбрасывает событие.

Слайд 107
Описание слайда:
Семафоры Объект-семафор - это фактически объект-взаимоисключение со счетчиком. Данный объект позволяет "захватить" себя определенному количеству потоков. После этого "захват" будет невозможен, пока один из ранее "захвативших" семафор потоков не освободит его. Семафоры применяются для ограничения количества потоков, одновременно работающих с ресурсом. Объекту при инициализации передается максимальное число потоков, после каждого "захвата" счетчик семафора уменьшается. Сигнальному состоянию соответствует значение счетчика больше нуля. Когда счетчик равен нулю, семафор считается не установленным (сброшенным).

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

Слайд 109
Описание слайда:
Реализация семафоров Win32 В следующем примере по очереди запускаются десять потоков, выполняющих вызов Sleep. Semaphore гарантирует, что не более трех потоков могут вызвать Sleep одновременно:

Слайд 110
Описание слайда:
class SemaphoreTest class SemaphoreTest { static Semaphore s = new Semaphore(3, 3); // Available=3; Capacity=3 static void Main() { for (int i = 0; i < 10; i++) new Thread(Go).Start(); } static void Go() { while (true) { s.WaitOne(); // Только 3 потока могут находиться здесь одновременно Thread.Sleep(100); s.Release(); } } }

Слайд 111
Описание слайда:
Защищенный доступ к переменным Существует ряд функций, позволяющих работать с глобальными переменными процесса из всех потоков не заботясь о синхронизации, т.к. эти функции сами за ней следят. Это функции InterlockedIncrement/InterlockedDecrement, InterlockedExchange, InterlockedExchangeAdd и InterlockedCompareExchange. Например, функция InterlockedIncrement увеличивает значение 32-битной переменной на единицу - удобно использовать для различных счетчиков.

Слайд 112
Описание слайда:
Сравнительные характеристики объектов синхронизации Windows

Слайд 113
Описание слайда:

Слайд 114
Описание слайда:
Проблемы семафоров В Windows существуют важные ограничения, касающиеся реализации семафоров. Например, каким образом поток может потребовать, чтобы счетчик семафора уменьшился на 2? Для этого поток мог бы организовать ожидание два раза подряд, но эта операция не была бы атомарной, поскольку в промежутке между двумя вызовами функции ожидания данный поток может быть вытеснен. В результате этого может наступить тупик - взаимоблокировка (deadlock) потоков.

Слайд 115
Описание слайда:
/* hsem – дескриптор семафора. Максимальное значение счетчика семафора равно 2. */ /* hsem – дескриптор семафора. Максимальное значение счетчика семафора равно 2. */ … /* Уменьшить значение счетчика семафора на 2. */ WaitForSingleObject(hSem, INFINITE); WaitForSingleObject(hSem, INFINITE); … /* Увеличить значение счетчика семафора на 2. */ ReleaseSemaphore(hSem, 2, &PrevCount); Предположим, что максимальное и начальное значения счетчика устанавливаются равными 2 и что первый из двух потоков завершает первый цикл ожидания, а затем вытесняется. Далее второй поток может завершить первый цикл ожидания и уменьшить значение счетчика до 0. Оба потока окажутся блокированными на неопределенное время, поскольку ни один из них не сможет выполнить второй цикл ожидания.

Слайд 116
Описание слайда:
Один из возможных вариантов правильного решения заключается в том, чтобы защитить циклы ожидания при помощи мьютекса или объекта CRITICAL_SECTION, как показано в приведенном ниже фрагменте программного кода: Один из возможных вариантов правильного решения заключается в том, чтобы защитить циклы ожидания при помощи мьютекса или объекта CRITICAL_SECTION, как показано в приведенном ниже фрагменте программного кода: /* Уменьшаем значение счетчика семафора на 2. */ EnterCriticalSection(&csSem); WaitForSingleObject(hSem, INFINITE); WaitForSingleObject(hSem, INFINITE); LeaveCriticalSection (&csSem); … ReleaseSemaphore(hSem, 2, &PrevCount);

Слайд 117
Описание слайда:
Но и эта реализация, в таком общем виде, страдает ограничениями. Предположим, например, что в счетчике семафора остается две единицы, и потоку А необходимы три единицы, а потоку В — только две. Если первой начнет выполняться поток А, то он выполнит два цикла ожидания и блокируется на третьем, продолжая владеть мьютексом. При этом поток В, которому были необходимы только две единицы, по-прежнему будет оставаться блокированным. Но и эта реализация, в таком общем виде, страдает ограничениями. Предположим, например, что в счетчике семафора остается две единицы, и потоку А необходимы три единицы, а потоку В — только две. Если первой начнет выполняться поток А, то он выполнит два цикла ожидания и блокируется на третьем, продолжая владеть мьютексом. При этом поток В, которому были необходимы только две единицы, по-прежнему будет оставаться блокированным.

Слайд 118
Описание слайда:
Влияние синхронизации на производительность Использование синхронизации в программах может и будет ухудшать их производительность, и в этом отношении следует быть особенно осмотрительным в случае SMP-систем. Симметричное мультипроцессирование (англ. Symmetric Multiprocessing, сокращённо SMP) — архитектура многопроцессорных компьютеров, в которой два или более одинаковых процессоров подключаются к общей памяти. Большинство многопроцессорных систем сегодня используют архитектуру SMP.

Слайд 119
Описание слайда:
Главный поток создает семафор с небольшим, например 4, максимальным значением параметра, представляющего максимально допустимое количество активных потоков, которое, например, можно принимать равным количеству процессоров, установленных в системе, для обеспечения приемлемой производительности. Начальное значение счетчика семафора также следует установить равным максимальному значению. Это число можно сделать параметром и подбирать его оптимальное значение экспериментальным путем. Другим возможным значением этого параметра может служить количество процессоров, которое может быть определено во время выполнения программы. Главный поток создает семафор с небольшим, например 4, максимальным значением параметра, представляющего максимально допустимое количество активных потоков, которое, например, можно принимать равным количеству процессоров, установленных в системе, для обеспечения приемлемой производительности. Начальное значение счетчика семафора также следует установить равным максимальному значению. Это число можно сделать параметром и подбирать его оптимальное значение экспериментальным путем. Другим возможным значением этого параметра может служить количество процессоров, которое может быть определено во время выполнения программы.

Слайд 120
Описание слайда:
Главный поток может регулировать, или, как говорят, "дросселировать" (throttle) выполнение рабочих потоков и динамически настраивать работу приложения, ожидая, пока не уменьшится значение счетчика, если он решает, что уровень состязательности слишком высок, или увеличивая значение счетчика с помощью функции ReleaseSemaphore, чтобы дать возможность выполняться большему количеству потоков. Главный поток может регулировать, или, как говорят, "дросселировать" (throttle) выполнение рабочих потоков и динамически настраивать работу приложения, ожидая, пока не уменьшится значение счетчика, если он решает, что уровень состязательности слишком высок, или увеличивая значение счетчика с помощью функции ReleaseSemaphore, чтобы дать возможность выполняться большему количеству потоков.

Слайд 121
Описание слайда:
В приведенном ниже фрагменте кода представлен видоизмененный рабочий цикл, выполняющий две операции с семафором. В приведенном ниже фрагменте кода представлен видоизмененный рабочий цикл, выполняющий две операции с семафором. while (TRUE) { // Рабочий цикл WaitForSingleObject(hThrottleSem, INFINITE); WaitForSingleObject(hMutex, INFINITE); … Критический участок кода … ReleaseMutex(hMutex); ReleaseSemaphore(hThrottleSem, 1, NULL); } // Конец рабочего цикла

Слайд 122
Описание слайда:
Повышение при ожидании ресурсов исполняющей системы Когда поток пытается получить ресурс исполняющей системы (ERESOURCE), который уже находится в исключительном владении другого потока, он должен войти в состояние ожидания до тех пор, пока другой поток не освободит ресурс. Для ограничения риска взаимных исключений исполняющая система выполняет это ожидание, не входя в бесконечное ожидание ресурса, а интервалами по пять секунд. Если по окончании этих пяти секунд ресурс все еще находится во владении, исполняющая система пытается предотвратить зависание центрального процессора путем завладения блокировкой диспетчера, повышения приоритета потока или потоков, владеющих ресурсом, до значения 14 (если исходный приоритет владельца был меньше, чем у ожидающего, и не был равен 14), перезапуска их квантов и выполнения еще одного ожидания. Поскольку ресурсы исполняющей системы могут быть либо общими, либо эксклюзивными, ядро сначала повышает приоритет эксклюзивного владельца, а затем проводит проверку общих владельцев и повышает приоритет всех этих владельцев. Когда ожидающий поток опять входит в состояние ожидания, появляется надежда, что планировщик так спланирует работу одного из потоков-владельцев, чтобы у него было достаточно времени для завершения своей

Слайд 123
Описание слайда:
Windows 2000 поддерживает два базовых типа драйверов: Драйверы пользовательского режима (User-Mode Drivers): Драйверы виртуальных устройств (Virtual Device Drivers, VDD) - используются для поддержки программ MS-DOS; Драйверы принтеров (Printer Drivers). Драйверы режима ядра (Kernel-Mode Drivers): Драйверы файловой системы (File System Drivers) - реализуют ввод-вывод на локальные и сетевые диски; Унаследованные драйверы (Legacy Drivers) - написаны для предыдущих версий Windows NT; Драйверы видеоадаптеров (Video Drivers) - реализуют графические операции; Драйверы потоковых устройств (Streaming Drivers) - реализуют ввод-вывод видео и звука; WDM-драйверы (Windows Driver Model, WDM) - поддерживают технологию Plug and Play и управления электропитанием.

Слайд 124
Описание слайда:
Типы драйверов

Слайд 125
Описание слайда:
Драйверы выполняются в режиме ядра в одном из трех контекстов: в контексте пользовательского потока инициировавшего запрос ввода-вывода; в контексте системного потока режима ядра (эти потоки принадлежат процессу System); как результат прерывания (а значит, не в контексте какого-либо процесса или потока, который был текущим на момент прерывания).

Слайд 126
Описание слайда:
Одно- и многоуровневые драйверы одноуровневые (monolithic drivers) Но большинство драйверов, управляющих физическими устройствами являются многоуровневыми (layered drivers). Обработка запроса ввода-вывода разделяется между несколькими драйверами. Каждый выполняет свою часть работы. Например, запрос на чтение файла передается драйверу файловой системы, который, выполнив некоторые операции (например, разбиение запроса на несколько частей), передает его "ниже" - драйверу диска, а тот, в свою очередь, отправляет запрос драйверу шины. Кроме того между этими драйверами можно добавить любое количество драйверов-фильтров (например, шифрующих данные). Выполнив запрос нижестоящий драйвер (lower-level driver) передает его результаты "наверх" - вышестоящему (higher-level driver).

Слайд 127
Описание слайда:
По своей структуре драйвер устройства является файлом PE-формата (Portable Executable, PE). Таким же как обычные exe и dll. Драйверы можно рассматривать как DLL режима ядра, предназначенные для выполнения задач, не решаемых из пользовательского режима. Принципиальная разница (не считая уровня привилегий) в том, что нельзя напрямую обращаться к драйверу, ни к его коду, ни к его данным. Менеджер ввода-вывода (Input/Output Manager) обеспечивает среду для функционирования драйверов, а также предоставляет механизмы для их загрузки, выгрузки и управления ими. По своей структуре драйвер устройства является файлом PE-формата (Portable Executable, PE). Таким же как обычные exe и dll. Драйверы можно рассматривать как DLL режима ядра, предназначенные для выполнения задач, не решаемых из пользовательского режима. Принципиальная разница (не считая уровня привилегий) в том, что нельзя напрямую обращаться к драйверу, ни к его коду, ни к его данным. Менеджер ввода-вывода (Input/Output Manager) обеспечивает среду для функционирования драйверов, а также предоставляет механизмы для их загрузки, выгрузки и управления ими.

Слайд 128
Описание слайда:
При установке устройства менеджер ввода-вывода назначает ему уникальный набор системных ресурсов. Это могут быть: Уровни запросов на прерывания (IRQ); Каналы прямого доступа к памяти DMA; Адреса портов ввода/вывода I/O; Диапазоны адресов памяти.

Слайд 129
Описание слайда:

Слайд 130
Описание слайда:

Слайд 131
Описание слайда:

Слайд 132
Описание слайда:

Слайд 133
Описание слайда:

Слайд 134
Описание слайда:

Слайд 135
Описание слайда:
Уровни запросов прерываний Всего существует 32 уровня, с 0 (passive), имеющего самый низкий приоритет, по 31 (high), имеющего соответственно самый высокий. Причем, прерывания с IRQL=0 (passive) по IRQL=2 (DPC\dispatch) являются программными, а прерывания с IRQL=3 (device 1) по IRQL=31 (high) являются аппаратными. Прерывание с уровнем IRQL=0, строго говоря, прерыванием не является, т.к. оно не может прервать работу никакого кода (ведь для этого этот код должен выполняться на еще более низком уровне прерывания, а такого уровня нет). На этом IRQL выполняются потоки пользовательского режима. Не путайте уровни приоритета прерываний с уровнями приоритетов потоков

Слайд 136
Описание слайда:

Слайд 137
Описание слайда:

Слайд 138
Описание слайда:

Слайд 139
Описание слайда:

Слайд 140
Описание слайда:

Слайд 141
Описание слайда:

Слайд 142
Описание слайда:


Скачать презентацию на тему Операционные системы семейства Windows можно ниже:

Похожие презентации