Читайте также:
|
|
Чтобы процесс что-нибудь выполнил, в нем нужно создать поток (Thread). В принципе, один процесс может содержать несколько потоков и они одновременно используют код в адресном пространстве процесса. Для этого каждый поток должен поток располагать собственным набором регистров процессора, а каждый процесс – как минимум – одним потоком.
Чтобы все эти потоки работали, ОС отводит каждому из них определенное процессорное время (квант времени). Время выдается потокам квантами по кругу (см. рис. 4):
Рисунок 1- 4 - схема выделения квантов времени потокам
При создании процесса первичный поток создается системой автоматически, далее первичный поток может создавать дополнительные потоки, используя функцию CreateThread (параметры);
Потоки также могут создаваться драйверами режима ядра.
В Win9x, ME - потоки выполняются одним процессором.
В WinNT, 2000, XP Windows Server — за потоком может быть закреплен отдельный процессор (процессоров может быть до 4 (32)), тогда потоки действительно выполняются параллельно.
В Win2000 введено понятие задания (JOB).
Задание - объект ядра, обеспечивающий управление одним или несколькими процессами как группой.
Процесс может входить только в одно задание.
Задания необходимы для расширения возможностей управления процессами (потоками) - на сервере в том числе:
1. завершить все потоки задания
2. установить ограничения на потоки задания:
- ограничение числа одновременно выполняющихся процессов заданий;
- общий лимит на процессорное время (после истечения времени все процессы будут завершены);
- индивидуальные лимиты времени на процессорное время пользовательского режима (для каждого процесса);
- приоритета для всех потоков;
- минимальный и максимальный размер рабочего множества страниц в ОП.
Нити (Fiber) – позволяют программисту управлять выполнением участков программы.
Функции ОС по управлению процессами и потоками.
1. создание и завершение процессов и потоков;
2. получение информации о процессах и потоках;
3. изменение приоритета процессов и потоков;
4. синхронизация потоков.
Процесс может породить другой процесс, используя функцию
CreateProcess();
Рисунок 5 – порождение процесса
Процесс Пр1порождает процесс Пр2, который в свою очередь порождает процессы Пр3 и Пр4.
Диспетчеризация потоков. Дисциплины диспетчеризации
Известные дисциплины диспетчеризации делятся на:
- бесприоритетные (в современных ОС практически не используются);
- приоритетные.
Приоритетные дисциплины делятся на дисциплины:
- с относительными приоритетами;
- с абсолютными приоритетами.
Дисциплины с абсолютными приоритетами делятся на дисциплины:
- с фиксированными приоритетами;
- с динамическими приоритетами.
В Win32 используется дисциплина диспетчеризации с абсолютными приоритетами – с фиксированными и динамическими приоритетами.
Уровни приоритета в Win32. Классы приоритетов процессов и потоков
Используется 32 уровня приоритета – уровень 31 самый высокий, 0 – самый низкий. Уровни приоритета разбиты на 3 группы (см. рис. 6).
|
Рисунок 1- 6 – группы приоритетов потоков
Приоритет потока равен базовому значению приоритета потока, к которому может быть добавлена динамическая составляющая. Динамическая составляющая добавляется при определенных условиях операционной системой к значениям приоритета потока в интервале от 1 до 14.
Базовый приоритет потока Win32 устанавливается, исходя из класса приоритета его процесса и уровня относительного приоритета.
В Win32 определены следующие классы приоритета процесса:
- реального времени – RealTime со значением 24;
- высокий – High со значением 13;
- выше среднего – Above normal со значением 10;
- обычный – Normal со значением 8;
- ниже среднего – Below normal со значением 6;
- низкий – Idle со значением 4.
В Win32 определены следующие уровни относительного приоритета потока:
- Time Critical;
- Highest;
- Above Normal;
- Normal;
- Below Normal;
- Lowest;
- Idle.
Таблица 1. Базовые значения приоритета потоков в Win 32
Относительный приоритет потока | Класс приоритета процесса | |||||
Idle(4) | Normal (-8) | High(13) | Real_Time(24) | |||
(-1)фоновый | ст.(0) | Повыш.(+1) | ||||
Time Critical | ||||||
Highest | ||||||
Above Normal | ||||||
Normal | ||||||
Below Normal | ||||||
Lowest | ||||||
Idle |
Не все значения приоритета могут быть установлены.
Установка базового приоритета потока выполняется в два этапа. На первом этапе с помощью функции Res:= SetPriorityClass (Handle, Class) устанавливается базовый класс приоритета процесса. Затем с использованием функции
Res:= SetThreadPrioriry (Handle, Prioritet)
задается базовый приоритет потока.
Дата добавления: 2015-07-07; просмотров: 146 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Тема 1.2 Назначение, функции и структура операционной системы | | | Получение и использование процессом ссылок на себя |