Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
bilety_update (1).docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
70 Кб
Скачать
☆
  1. Процессы и потоки.

Для каждого процесса ОС выделяет необходимые ресурсы, и он выполняется на отдельной виртуальной машине.

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

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

ОС реализует такой механизм в виде нитей или потоков.

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

Создание процесса:

STARTUINFO si = {sizeof(si)};

PROCESS_INFORMATION po;

TCHAR CommandLine[] = TEXT(“NOTEPAD.exe”);

CreateProcess(NULL, CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

Void ExitProcess(UINT code); //освобождает системные ресурсы, но память под объекты, созданная в //процессе, не освобождается. Либо процесс сам завершается после выполнения.

BOOL TerminateProcess(HANDLE, UINT); //ресурсы не освобождаются.

Функции потока. Поток начинает выполнение некоторой функции. В первичном потоке это WIN MAIN, во вторичном нужно определить функцию потока:

DWORD WINAPI ThreadFunc(PVOID pvParam) { DWORD dwResult = 0;

return(dwResult); }

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

HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, DWORD cbStack, PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD fdwCreate, PDWORD pdwThreadID);

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

VOID ExitThread(DWORD dwExitCоde);

BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode);

  1. Алгоритмы синхронизации потоков. Критическая секция.

Алгоритмы синхронизации потоков – семафоры, мьютексы и критические секции.

Синхронизация в пользовательском режиме:

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

CRITICAL_SECTION s;

При входе в критическую секцию поток должен вызвать функцию

EnterCriticalSection(& s);

…

При выходе из критической секции – функцию:

LeaveCriticalSection(& s);

Простейшая реализация критической секции с помощью запрета прерывания. Использование критической секции не исключает взаимной блокировки процессов (это недостаток). Реализация в пользовательском режиме выполняется достаточно быстро, но недостатком является активное ожидание потоков, когда они проверяют свои условия входа в критические секции и тратят впустую процессорное время.

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