Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_1-10_bez_vosmogo1.docx
Скачиваний:
3
Добавлен:
16.04.2019
Размер:
108.79 Кб
Скачать

37. Завдання. Обмеження, створення, статистична інформація.

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

- базовые и расширенные базовые ограничения – не дают процессам монопольно захватывать системные ресурсы

- Базовые ограничения по пользовательскому интерфейсу

- ограничения, связанные с защитой.

Для задания ограничение используются структуры, каждая структура определяет ограничение определенного класса.

Создание задания

Для создания объекта типа JOB используется функция:

Handle CreateJobObject(

LPSECURITY_ATTRIBUTES lpJobAttributes,

LPCSSTR lpName

);

Статистическая информация о задании

Для получения информации об ограничениях задания используется функция

BOOL QueryInformationJobObject(

HANDLE hJob,

JOBOBJECTINFOCLASS JobObjectInformationClass,

LPVOID lpJobObjectInformationLength,

LPDWORD lpReturnLength

);

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

Typedef struct_JOBOBJECT_BASIC_ACCOUNTING_INFORMATION{

LARGE_INTEGER TotalUserTime; //Процессороное время в режиме User

LARGE_INTEGER TotalKernelTime;//Процессорное время в режиме Kernel

LARGE_INTEGER ThisPeriodTotalUserTime;//Процессорное время в режиме User до изменения режимов

LARGE_INTEGER ThisPeriodTotalKernelTime;// Процессорное время в режиме Kernel до изменения режимов

DWORD otalPageFaultCount;// кол-во ошибок при обращении к страницам

DWORD TotalProcesses;//общее кол-во процессов в задании

DWORD ActiveProcesses//кол-во активных процессов

DWORD TotalTerminatedProcesses;//кол-во завершенных процессов

} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;

38. Поняття потоку. Створення, призупинення, поновлення та завершення потоків.

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

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

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

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

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

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

  6. Время выполнения потока – время выполнения потока в режиме потока и в режиме ядра за время существования потока

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

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

Создание потока.

Для создания потока используется функция CreateThread:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes, //атрибуты безопасности

DWORD dwStackSize, // начальный размер стека(байт)

LPTHREAD_START_ROUTINE lpStartAddress, // Потоковая функция

LPVOID lpParameter, //Параметр

DWORD dwCreationFlags, //Флаги создания

LPDWORD lpThreadId// Указатель идентификатора потока

);

Завершение потока

При завершении потока ОС выполняет следующие действия:

-освобождаются User-объекты, принадлежащие потоку(окна и ловушки – hook);

-код завершения меняется с STILL_ACTIVE(ещё активный) на код завершения функции;

-объект ядра Поток переводится в свободное состояние(Signaled);

-счетчик использования уменьшается на 1;

-если данный поток является последним потоком процесса, то уничтожается процесс. Объект ядра Поток не освобождается. Для освобождения памяти, выделенной для ядра, используется функция CloseHandle.

Приостановка и возобновление потоков.

Поток может запретить для себя выделять кванты времени в течение определённого интервала времени. Для этого используется функция Sleep:

void Sleep(DWORD dwMilliseconds);

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]