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

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

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

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

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

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

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

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);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: