08 Понятие процесса и нити.pptx
- Количество слайдов: 19
ОБЩИЕ ПОНЯТИЯ О ПРОЦЕССАХ
ПОНЯТИЯ ПРОЦЕСС И НИТЬ Что такое программа? Что означает фраза «запустить программу на выполнение» ? #include <stdio. h> компиляция запуск int main (void){ printf (“Hellon”); return (0); программа } Исполняемый файл процесс Процесс – это исполняющаяся программа в совокупности с её данными и контекстом (содержимым регистров процессора, системных таблиц и т. п. ).
Как операционная система запоминает, какие процессы созданы в системе? ДЕСКРИПТОР – это специальная структура в памяти ЭВМ, описывающая выполняющийся процесс. Содержит следующие значения: – – – – PID – номер процесса в системе; PPID – номер родительского процесса; тип или класс процесса, его приоритет; состояние процесса; информация о ресурсах, занятых процессом; информация о пользователе, запустившим процесс; и т. д. С помощью дескрипторов ОС может переключаться между несколькими процессами.
Можно ли представить процесс как поток выполняющихся команд? Процесс1 Поток команд 1 Процесс2 Поток команд 2 Поток выполняющихся команд называется НИТЬЮ или ТРЕДОЙ (thread) fiber Может ли один процесс иметь несколько одновременно выполняющихся нитей? Процесс3 Поток команд 3. 1 Поток команд 3. 2 В чем же тогда отличие нити от процесса? 1) Процессы выполняются независимо и не знают о существовании друга. 2) Процессы ограничиваются выделенными им ресурсами и не имеют доступ к ресурсам друга. 3) Планирование процессов осуществляется ОС, нити может планировать пользователь
УСЛОВИЯ СОЗДАНИЯ ПРОЦЕССОВ Когда в системе может появиться процесс? • при запуске системы; • после системного вызова; • по требованию пользователя; • внутри пакетного задания.
УСЛОВИЯ ЗАВЕРШЕНИЯ ПРОЦЕССА • в следствие системного вызова «завершение процесса» ; – при завершении программы; – из-за возникновения ошибки, делающей невозможным продолжение выполнения программы; • из-за неисправимой ошибки; • по сигналу от другого процесса.
ДЕРЕВО ПРОЦЕССОВ Вопрос. Может ли процесс возникнуть в системе самопроизвольно? Ответ. Нет. Процесс может быть порождён только другим процессом. Исключением является корневой процесс, порождаемый при загрузке системы. ДЕРЕВО ПРОЦЕССОВ – это диаграмма (граф), отражающий «родственную связь» между процессами вида «Родительский – дочерний» . PID PPID 1 0 2 0 3 1 4 1 5 2
ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ПРОЦЕССАХ Используя программу taskmgr в Windows XP Используя программу gnome-system-monitor в Linux
Демонстрация Process Explorer от Sysinternals.
СОСТОЯНИЕ ПРОЦЕССА завершение выполнение зомби 1 3 2 блокировка 4 готовность 1 – планировщик выбирает этот процесс 2 – планировщик выбирает другой процесс 3 – процесс блокируется, ожидая входные данные 4 – данные становятся доступными. запуск
Как получить информацию о процессе? (лабораторная № 4) В GNU/Linux: getpid(), getppid(), getsid(), getuid() и т. п. #include <stdio. h> #include <unistd. h> int main (void) { pid_t mypid; mypid = getpid(); printf (“Current PID = %dn”, mypid); printf("Parent PID = %dn", getppid()); } В Win 32: Get. Current. Process. ID();
Поиск родительского процесса в Win 32… HANDLE h. Process. Snap; PROCESSENTRY 32 pe 32; h. Process. Snap = Create. Toolhelp 32 Snapshot( TH 32 CS_SNAPPROCESS, 0 ); if( h. Process. Snap == INVALID_HANDLE_VALUE ) abort(); pe 32. dw. Size = sizeof( PROCESSENTRY 32 ); if( !Process 32 First( h. Process. Snap, &pe 32 ) ) abort(); do { if (pe 32. th 32 Process. ID == process. ID) // НАШЛИ !!! (pe 32. th 32 Parent. Process. ID); ) } while( Process 32 Next( h. Process. Snap, &pe 32 ) ); Close. Handle( h. Process. Snap );
Как получить информацию о запуске процесса? (лабораторная № 4) Информация из командной строки: int main (int argc, char ** argv){ int i; printf (“Всего указано %d параметров. n”, argc); for (i = 0; i < argc; i++){ printf (“argv[%d] = %sn”, i, argv[i]); } return (0): } Переменные среды окружения: int main (void){ extern char ** environ; int i = 0; while (environ[i] != NULL){ printf (“env[%d] = %sn”, i, environ[i]); i++; } return (0); }
Как получить информацию о запуске процесса Win 32? int WINAPI Win. Main( HINSTANCE h. Instance, HINSTANCE h. Prev. Instance, LPSTR lp. Cmd. Line, int n. Cmd. Show ); Командная строка Все остальное – реестр.
Как создать процесс? (лабораторная № 5) В GNU/Linux – вызов fork() #include <sys/types. h> #include <unistd. h> В системе существует один printf (“Запускаю дочерний процессn”); процесс pid = fork(); if (pid == -1) abort(); int main (int argc, char ** argv){ int pid; if (pid == 0) { printf (“Работает дочерний процессn”); } else { printf (“Работает родительский процессn”); } printf (“Работают оба процессаn”); return (0); } Выполняется двумя процессами параллельно
Как начать выполнять другую программу? (лабораторная № 5) Необходимо загрузить новую программу и передать ей управление. В GNU/Linuix – семейство вызовов exec. #include <unistd. h> #include <stdio. h> int main(void) { printf ("Запуск программы lsn"); execl ("/bin/ls", "-l", (char *)0); perror ("Ошибка вызова execl"); Выполняется, return (1); если exec «не } сработал»
Семейство функций exec? (лабораторная № 5)
Запуск нового процесса в Win 32 API STARTUPINFO si; PROCESS_INFORMATION pi; TCHAR * cmd = “C: \Programm FilesMy. Appsort. exe” Create. Process( NULL, // No module name (use command line) cmd, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ); // Pointer to PROCESS_INFORMATION structure
Контрольные вопросы • что такое процесс? • в чем отличие процесса от программы? • что означает фраза «запустить программу на выполнение» ? • что такое нить? fiber? • при каких условиях может появиться новый процесс? • как система «запоминает» информацию о процессах? • можно ли остановить выполнение процесса? • можно ли узнать «родство» процессов? • какую информацию содержит дескриптор процесса? • может ли один процесс изменить информацию в адресном пространстве другого процесса? • в каких состояниях может находиться процесс?
08 Понятие процесса и нити.pptx