Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Экзамен ОС 2018

.pdf
Скачиваний:
118
Добавлен:
29.01.2018
Размер:
4.67 Mб
Скачать

Оглавление

Для работы с динамической TLS поток может использовать четыре функции:

TlsAlloc ()

TlsGetValue ()

TlsSetValue ()

TlsFree ()

Функции для работы с динамической TLS

DWORD TlsAlloc (VOID)

Данная функция резервирует очередную 4-х байтную ячейку в локальной памяти потока и возвращает ее индекс. Далее этот индекс передают в функции TlsSetValue () и TlsGetValue ().

Если массив ячеек TLS полностью использован, возвращаемое значение будет равно TLS_OUT_OF_INDEXES, что сообщает об ошибке выделения ячейки.

BOOL TlsSetValue (

DWORD dwTlsIndex, // TLS индекс для сохранения значения LPVOID lpvTlsValue // адрес значения для сохранения

);

Функция TlsSetValue () записывает значение в ячейку с индексом, который был возвращен функцией TlsAlloc ().

В случае успеха функция возвращает TRUE, иначе – FALSE.

LPVOID TlsGetValue (

DWORD dwTlsIndex // TLS индекс для получения значения

);

Функция TlsGetValue () соответственно возвращает значение указанное данным индексом.

В случае успеха функция возвращает TRUE, иначе – FALSE.

Оглавление

Оглавление

Иллюстрация использования динамической TLS

Статическая TLS

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

Статическая локальная память потока опирается на механизмы загрузчика и свои собственные структуры.

Статическая TLS не использует функции Win32 API .

Компиляторы высокоуровневых языков предоставляют специальный синтаксис для работы с статической TLS.

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

Синтаксис объявления переменной в статической TLS

Компилятор Microsoft VC++ позволяет использовать следующий синтаксис для создания переменной специфичной для потока:

Пример кода:

declspec(thread) int tls_i = 1;

Этим кодом создается переменная tls_i локальная для потока, которая инициализируется значением 1. Переменная может быть любого типа.

Переменная, указываемая за __declspec(thread), должна быть либо глобальной, либо статической внутри (или вне) функции.

Локальную переменную с модификатором __declspec(thread) объявить нельзя.

Ограничения на использование статической TLS

1.Спецификатор __declspec( thread ) может быть использован только с данными.

2.TLS нельзя применять к локальным переменным.

Оглавление

Оглавление

3.Нельзя получить адрес переменной TLS, т.к. он не является константой.

4.Могут возникнуть проблемы с DLL, которую динамически загружают с помощью LoadLibrary (). Для DLL, которые могут быть загружены с помощью LoadLibrary () и которые используют TLS рекомендуется использовать динамическую TLS.

16.Объекты управления центральным процессором и объединения ресурсов в MS Windows 2000+. Атрибуты процессов и потоков. Классы приоритетов.

Объекты управления центральным процессором и объединения ресурсов в MS Windows 2000+

Контекст процесса

Контекст – хранит состояние регистров, состояние программного счетчика, режим работы процессора, незавершенные операции ввода-вывода, информация о выполненных системных вызовах.

Для хранения информации, необходимой для совершения операции над процессом, используется структура данных PCB (Process Control Block – блок управления процессом).

Конкретный состав PCB зависит ОС и обычно содержит:

регистровый контекст процессора – все регистры и программный счетчик;

системный контекст процессора (контекст ядра ОС).

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

Process Control Block

Регистровый контекст процесса:

Программный счетчик (адрес команды, которая должна быть выполнена для него следующей);

Содержимое регистров.

Системный контекст процессора:

Состояние процесса;

Данные для планирования использования процессора и управления памятью;

Учетная информация;

Сведения об устройствах ввода-вывода, связанных с процессом.

Переключение контекста

Переключение процессора с выполнения команд одного потока на выполнение команд другого называют переключением контекста.

Оглавление

Оглавление

Переключение контекста и производительность системы

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

Чем чаще происходит переключение контекста, тем система более реактивна, но при этом обладает меньшей пропускной способностью, т.к. чаще происходит переключение контекста.

Сопутствующие факторы, влияющие на производительность

При переключении контекста происходят аппаратные действия, влияющие на производительность:

очистка конвейера команд и данных процессора;

очистка TLB, отвечающего за страничное отображение линейных адресов на физические.

Кроме того, следует учесть следующие факты, влияющие на состояние системы:

содержимое кэша (особенно кэша 1-го уровня) накопленное и «оптимизированное» под выполнение одного потока оказывается совершенно неприменимым к новому потоку, на который происходит переключение;

Оглавление

Оглавление

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

Методы снижения ресурсоемкости переключения контекста

Использование многопоточности

при переключении контекста между потоками одного процесса, регистр CR3 не меняется и содержимое TLB сохраняется

Размещение ядра ОС в адресном пространстве пользовательского процесса

при переключении контекста между user-space и kernel-space (и обратно), что, например, происходит при выполнении системных вызовов, регистр CR3 не меняется и содержимое TLB сохраняется

Минимизация перемещения потоков при диспетчеризации в SMP-системе

улучшается эффективность работы кэша 2-го уровня

Оптимизация восстановления контекста потока под операции с регистрами общего назначения

реальное сохранение/восстановление контекста регистров сопроцессора плавающей точки и MMX/SSE контекст происходит при первом обращении нового потока

Основные понятия

Задание – набор процессов, управляемых как единое целое, с общими квотами

илимитами

Процесс – контейнер для ресурсов

Поток – сущность планируемая ядром

Волокно – облегченный поток, управляемый полностью в пространстве пользователя

Процессы и потоки Windows

Иерархия процессов (ссылки между процессами-родителями и процессами-потомками) в явном виде не поддерживается.

Процессы имеют многопоточную организацию.

Процессы и потоки реализованы в форме объектов, и доступ к ним осуществляется посредством службы объектов.

Объекты-процессы и объекты-потоки имеют встроенные средства синхронизации.

Процессы

Процесс – это совокупность системных ресурсов, задействованная для выполнения определенной работы:

собственное ВАП, которое представляет собой совокупность виртуальных адресов, которые может использовать процесс;

ресурсы (объекты), такие как файлы, семафоры и т.п., которые назначены процессу ОС;

хотя бы один поток (исполняемый код).

Оглавление

Оглавление

Потоки

Поток – сущность планируемая ядром.

Поток – объект диспетчеризации ядра.

Поток – это непрерывная последовательность инструкций, выполняющих определенную функцию.

Атрибуты процесса

Идентификатор процесса – уникальное значение, которое идентифицирует процесс в рамках ОС (только в текущий момент времени).

Виртуальное адресное пространство – описывается с использованием специальных структур данных VAD (дескрипторов виртуальных адресов).

Исполняемая программа – начальный код и данные, проецируемые на виртуальное адресное пространство процесса.

Список (таблица) открытых дескрипторов объектов, доступных всем потокам в данном процессе.

Дескриптор безопасности – дескриптор безопасности объекта «процесс».

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

Базовый приоритет – основа для исполнительного приоритета потоков процесса.

Процессорная совместимость – набор процессоров, на которых могут выполняться потоки процесса.

Список потоков процесса (как минимум один поток).

Предельные значения квот ресурсов (см. Job).

Счетчики производительности, связанные с процессом.

Атрибуты потоков

Идентификатор клиента – уникальное значение, которое идентифицирует поток при ее обращении к серверу.

Контекст потока – информация, которая необходима ОС для того, чтобы продолжить выполнение прерванного потока.

Два стека, один из которых используется потоком при выполнении в режиме ядра, а другой – в пользовательском режиме.

Локальная память потока (thread local storage, TLS) – закрытая область памяти потока.

Дескриптор безопасности – дескриптор безопасности объекта «поток».

Динамический приоритет – значение приоритета потока в данный момент.

Базовый приоритет – нижний предел динамического приоритета потока.

Процессорная совместимость потока – перечень номеров процессоров, на которых может выполняться поток.

Номер идеального процессора потока.

Номер процессора, на котором поток выполнялся прошлый раз.

Счетчик приостановок – текущее количество приостановок выполнения потока.

Счетчики производительности, связанные с потоком.

Оглавление

Оглавление

Поток и ресурсы процесса

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

Также потоки процесса могут совместно пользоваться ресурсами процесса-родителя через общую таблицу дескрипторов.

Защита процессов и потоков

По умолчанию у потоков нет собственного маркера доступа и для целей безопасности используется маркер доступа процесса-родителя (поток 1).

При необходимости каждый поток может получить собственный маркер доступа

(потоки 2 и 3).

Классы приоритетов

Класс приоритета

Описание

 

 

 

Real-lime (24)

Потоки в этом процессе обязаны немедленно реагировать на

 

события, обеспечивая выполнение критических по времени

 

задач. Такие потоки вытесняют даже компоненты ОС.

 

 

Процессы этого класса нельзя запустить, если пользователь

 

не имеет привилегии Increase Scheduling Priority.

 

 

 

 

High (13)

Потоки в этом процессе тоже должны немедленно

 

 

реагировать на события, обеспечивая выполнение

 

 

критических по времени задач. Этот класс присвоен,

 

 

например, Task Manager.

 

 

 

Above normal (10)

Класс приоритета, промежуточный между normal и high.

 

 

Normal (8)

Потоки в этом процессе не предъявляют особых требований к

 

выделению им процессорного времени (99% приложений

).

 

 

Below normal (6)

Класс приоритета, промежуточный между normal и idle.

 

 

 

Idle (4)

Потоки в этом процессе выполняются, когда система не

 

 

занята другой работой. Этот класс приоритета обычно

 

 

используется для утилит, работающих в фоновом режиме,

 

экранных заставок и пр.

 

 

 

 

Оглавление

Оглавление

Относительные приоритеты потоков

Иллюстрация по приоритетам для Windows 2000

Нулевой приоритет зарезервирован для потока обнуления страниц

Приоритеты 17-21 и 27-30 могут использоваться только при написании драйвера, работающего в режиме ядра.

Оглавление

Оглавление

17. Общие принципы диспетчеризация (планирования загрузки) в MS Windows 2000+. Классы приоритетов. Относительные приоритеты. Динамическое изменение приоритетов.

Общие принципы диспетчеризация (планирования загрузки) в MS Windows

2000+

Здесь будут именно общие принципы, подробнее про windows в билете №20.

Классификация дисциплин обслуживания

Бесприоритетные дисциплины – выбор из очереди производится без учета относительной важности задач и времени их обслуживания.

Приоритетное обслуживание – отдельным задачам предоставляется преимущественное право перейти в состояние ВЫПОЛНЕНИЯ.

Фиксированные приоритеты – являются величиной постоянной на всем жизненном цикле процесса.

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

Линейные бесприоритетные дисциплины

FCFS (First-Come, First-Served)

обслуживание процессов в порядке поступления

SJF (Shortest-Job-First)

Оглавление

Оглавление

обслуживание самого короткого процесса первым без прерывания при поступлении более короткого процесса

SRTF (Shortest-Remaining-Time-First)

обслуживание самого короткого процесса первым с прерыванием при поступлении процесса более короткого, чем остаток выполняющегося

First-Come, First-Served (очередь)

FCFS (или FIFO) – самая простая дисциплина обслуживания, в соответствии с которой процессы получают доступ к процессору в порядке поступления.

FCFS – реализует невытесняющую многозадачность.

Пример FCFS – Вариант 1

Процесс

Время активности

 

 

P1

24

 

 

P2

3

 

 

P3

3

 

 

Время ожидания процессов: P1 = 0; P2= 24; P3 = 27. Среднее время ожидания: (0 + 24 + 27)/3 = 17.

Пример FCFS – Вариант 2

Процесс

Время активности

 

 

P2

3

 

 

P3

3

 

 

Оглавление