Экзамен ОС 2018
.pdfОглавление
●Для работы с динамической 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 |
|
|
Оглавление