71703

ПРОЦЕССЫ

Лабораторная работа

Информатика, кибернетика и программирование

В головном процессе создаются/открываются два файла: текстовый (несколько строк) и двоичный (ряд арифметических данных). Информация об открытых файлах (дескрипторы) передается в дочерние процессы на этапе их создания через командную строку.

Русский

2014-11-11

503.52 KB

12 чел.

9

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных технологий
и робототехники

Кафедра «Программное обеспечение вычислительной
техники и автоматизированных систем»

О Т Ч Е Т

по лабораторной работе № 8

Дисциплина

«Системное программирование»

Тема

«пРОЦЕССЫ»

Выполнил: студент гр.107221             Ермакович Е. А.

Проверил:                                                     Разорёнов Н.А.

Минск 2013

пРОЦЕССЫ

Цель работы: ознакомление с основами создания и управления процессами в ОС WINDOWS.

Изучаемые вопросы

  1.  Структуры STARTUPINFO, PROCESS_INFORMATION.
  2.  Создание процесса.
  3.  Класс приоритета процесса.
  4.  Наследование дочерними процессами ресурсов (файлов) родительского процесса.
  5.  Окончание процесса.
  6.  Переменные окружения процесса: структура, значения.
  7.  Передача информации между процессами через среду процесса.
  8.  Список процессов.
  9.  Время выполнения процесса.

Постановка задачи

  1.    Разработать приложение, состоящее из трех процессов (головного и двух дочерних). В головном процессе создаются/открываются два файла: текстовый (несколько строк) и двоичный (ряд арифметических данных). Информация об открытых файлах (дескрипторы) передается в дочерние процессы на этапе их создания через командную строку.
  2.    В главном процессе запускаются два дочерних процесса, которые:
  3.  первый – дописывает стоку/строки в текстовый файл;
  4.  второй – дописывает число/числа в бинарный файл;
  5.  процессы отображают информацию файлов до и после их модификации.
  6.    После возвращения из дочерних процессов главный процесс отображает:
  7.  содержимое модифицированных файлов и закрывает их;
  8.  системную информацию о процессе (GetProcessInformation).

4. Модифицировать программу лабораторной работы № 8 так, чтобы она выводила в окно информацию по изучаемым вопросам. Приложение может состоять из трех процессов (головного и двух дочерних). В родительском процессе создается и выводится список процессов, который обновляется через 3 с, и другая информация по процессу.

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

6. После возвращения из дочерних процессов главный процесс отображает содержимое файла.

Ход выполнения работы

  1.  Структуры STARTUPINFO, PROCESS_INFORMATION.

Структуры STARTUPINFO и  PROCESS_INFORMATION необходимы для создания и управления процессом.

Структура STARTUPINFO используется c функцией CreateProcess(), чтобы определить оконный терминал, рабочий стол, стандартный дескриптор и внешний вид основного окна для нового процесса.

STARTUPINFO si;

ZeroMemory(&si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

Структура PROCESS_INFORMATION заполняется функцией CreateProcess информацией о недавно созданном процессе и его первичном потоке. В ней определены такие поля, как дескрипторы созданного процесса и его главного потока, их идентификаторы.

 

PROCESS_INFORMATION pi;  

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

CreateProcess(NULL, buffer, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL ,NULL, &si, &pi);  

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

Процесс создается с помощью функции CreateProcess(), которая возвращает TRUE в случае удачного создания процесса:

- Создается объект Win32 "процесс".

- Создается первичный поток (стек, контекст и объект "поток").

- Подсистема Win32 уведомляется о создании нового процесса и потока.

- Начинается выполнение первичного потока.

- В контексте нового процесса и потока инициализируется адресное пространство начинается выполнение программы.

BOOL CreateProcess

(

LPCTSTR lpApplicationName,                 // имя исполняемого модуля

LPTSTR lpCommandLine,                      // Командная строка

LPSECURITY_ATTRIBUTES lpProcessAttributes, // Указатель на структуру SECURITY_ATTRIBUTES

LPSECURITY_ATTRIBUTES lpThreadAttributes,  // Указатель на структуру SECURITY_ATTRIBUTES

BOOL bInheritHandles,                      // Флаг наследования текущего процесса

 DWORD dwCreationFlags,                     // Флаги способов создания процесса

 LPVOID lpEnvironment,                      // Указатель на блок среды

 LPCTSTR lpCurrentDirectory,                // Текущий диск или каталог

 LPSTARTUPINFO lpStartupInfo,               // Указатель на структуру STARTUPINFO

 LPPROCESS_INFORMATION lpProcessInformation // Указатель на структуру PROCESS_INFORMATION

);

В программе:

int n = sprintf_s(buffer, 1024, "%s", "\"child.exe\"");

sprintf_s(buffer + n, 1024 - n, "%d", hTextFile);

STARTUPINFO si;

ZeroMemory(&si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

PROCESS_INFORMATION pi;

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

CreateProcess(NULL, buffer, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL ,NULL, &si, &pi);

  1.  Класс приоритета процесса.

Параметр fdwCreate функции CreateProcess() разрешает задать и класс приоритета процесса.

При создании процесса можно задать класс его приоритета. По умолчанию система присваивает процессу класс приоритета NORMAL_PRIORITY_CLASS. Классы приоритета влияют на распределение процессорного времени между потоками процессов.

CreateProcess(NULL, buffer, NULL, NULL, TRUE, NULL, NULL ,NULL, &si2, &pi2);

SetPriorityClass(pi2.hProcess, HIGH_PRIORITY_CLASS);

  1.  Наследование дочерними процессами ресурсов (файлов) родительского процесса.

Для наследования дочерними процессами ресурсов (файлов) родительского процесса в нем необходимо объявить структуру sa (SECURITY_ATTRIBUTES). Третий параметр sa устанавливает права по совместному доступу к созданному файлу:

SECURITY_ATTRIBUTES sa = {0};

sa.nLength = sizeof(SECURITY_ATTRIBUTES);

sa.bInheritHandle = NULL;

sa.bInheritHandle = TRUE;

Затем в функции создания файла (родительский процесс) необходимо передать указатель на данную структуру:

HANDLE hTextFile = CreateFile("file.txt", GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

HANDLE hBinaryFile = CreateFile("file.bin",GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

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

int n = sprintf_s(buffer, 1024, "%s", "\"child.exe\"");

sprintf_s(buffer + n, 1024 - n, "%d", hTextFile);    

В дочернем процессе описатель файла получают следующим образом:

LPTSTR str = GetCommandLine();

LPTSTR sp = StrRStrI(str, NULL, "\"");

sp++;

HANDLE hFile = (HANDLE)StrToInt(sp);

В процедуре CreateProcess пятый параметр устанавливается в TRUE, что дает возможность созданному процессу наследовать все доступные (разрешено наследование) дескрипторы объектов ядра, принадлежащие родительскому процессу.

  1.  Окончание процесса.

Процесс можно завершить четырьмя способами:

1) входная функция первичного потока возвращает управление (рекомендуемый способ);

2) один из потоков процесса вызывает функцию ExitProcess (нежелательный способ);

3) поток другого процесса вызывает функцию TerminateProcess (тоже нежелательно);

4) все потоки процесса умирают по своей воле (большая редкость).

 

В программе:

ExitProcess(0);

  1.  Переменные окружения процесса: структура, значения.

С каждым процессом в системе связан блок переменных окружения - область памяти, выделенная в адресном пространстве процесса. Каждый блок содержит группу строк такого вида:

=::=::\ …

VarName1=VarValue1\0

VarName2=VarValue2\0

VarName3=VarValue3\0 …

VarNameX=VarValueX\0

\0

 Первая часть каждой строки - имя переменной окружения. За ним следует знак равенства и значение, присваиваемое переменной. Стоит отметить, что не только первая строка, но и другие строки в этом блоке могут начинаться символом =(недопустимые строки). Такие строки не считаются переменными окружения.

  1.  Передача информации между процессами через среду процесса.

Пользователь создает и инициализирует переменную среды, затем запускает приложение, и оно, анализируя блок, отыскивает одну или несколько «своих» переменных, а обнаружив, проверяет их значение и соответствующим образом настраивается. Инициализируем переменную среды до создания процесса:

char envalue[20] = "Binary File";

SetEnvironmentVariable("BinaryFileHeader", envalue);

Поле создания дочернего процесса отыскиваем в нем эту же переменную и считываем ее значение:

char envalue[20]="";

GetEnvironmentVariable("BinaryFileHeader", (char*) &envalue, sizeof(envalue));

SetWindowText(hDlg,envalue);

Среды дочерних процессов показаны на Рисунке 8.1.   

Рисунок 8.1 – Среды дочерних процессов  

  1.  Список процессов.

Все современные ОС содержат средства (библиотеки, такие как Tlhelp32.dll) для наблюдения за состоянием системных объектов. В основном эти средства позволяют делать «снимок» их состояния на определенный момент времени.

VOID CALLBACK UpdateTimerFunction(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)

{

 HWND hListBox = GetDlgItem(hWnd, IDC_LIST1);

 SendMessage(hListBox, LB_RESETCONTENT, 0, 0);

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

 PROCESSENTRY32 process;

process.dwSize = sizeof(PROCESSENTRY32);

 char *buffer = new char[2024];

 if (Process32First(hSnapshot, &process))

{

 do

 {

  sprintf_s(buffer, 2024, "%u %s %u %s %s", process.th32ProcessID,"         ",process.th32ParentProcessID,"           ",process.szExeFile);

  SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)buffer);

 } while (Process32Next(hSnapshot, &process));

}

 delete buffer;

 CloseHandle(hSnapshot);

}

  1.  Время выполнения процесса

На использование процессом ресурсов ОС затрачивается некоторое время, система же предоставляет некоторые функции для отображения этой информации(время создания, время ядра и т.д).

void TimeProcess(PROCESS_INFORMATION pi, PROCESS_INFORMATION pi2,HWND hDlg)

{

 FILETIME timeCreation;

 FILETIME timeExit;

 FILETIME timeKernel;

 FILETIME timeUsed;

 SYSTEMTIME creat;

 SYSTEMTIME exit;

 char *buffer = new char[1024];

GetProcessTimes(pi.hProcess, &timeCreation, &timeExit,&timeKernel, &timeUsed);

FileTimeToSystemTime(&timeCreation, &creat);

FileTimeToSystemTime(&timeExit, &exit);

creat.wHour+=3;

sprintf_s(buffer, 1024, "%d", creat.wHour);

SetWindowText(GetDlgItem(hDlg, IDC_EDIT3), buffer);

sprintf_s(buffer, 1024, "%d", creat.wMinute);   SetWindowText(GetDlgItem(hDlg, IDC_EDIT4), buffer);

sprintf_s(buffer, 1024, "%d", creat.wSecond);

 SetWindowText(GetDlgItem(hDlg, IDC_EDIT5), buffer);

exit.wHour+=3;

sprintf_s(buffer, 1024, "%d", exit.wHour);

 SetWindowText(GetDlgItem(hDlg, IDC_EDIT6), buffer);

sprintf_s(buffer, 1024, "%d", exit.wMinute);

 SetWindowText(GetDlgItem(hDlg, IDC_EDIT7), buffer);

sprintf_s(buffer, 1024, "%d", exit.wSecond);

 SetWindowText(GetDlgItem(hDlg, IDC_EDIT8), buffer);

delete buffer;

}

  1.  Результаты работы программы

Результаты работы программного обеспечения  приведены на Рисунках 10.1 и 10.2:

Рисунок 10.1 – Дочерние процессы

Рисунок 10.2 – Родительский процесс

Выводы

  1.  С любым процессом связан блок переменных окружения (среда) – область памяти, выделенная в адресном пространстве процесса, который обычно применяется для «тонкой» настройки приложения.
  2.  Пользователь создает и инициализирует переменную среды, затем запускает приложение, и оно, анализируя блок, отыскивает одну или несколько «своих» переменных, а обнаружив, проверяет их значение и соответствующим образом настраивается.
  3.  Все процессы в системе имеют уникальные идентификаторы. Они позволяют системе различать все процессы. Пользователю такой идентификатор доступен только для чтения, он присваивается процессу на этапе его создания и не изменяется в течение всего времени работы процесса.
  4.  Для наследования дочерними процессами ресурсов (файлов) родительского процесса в нем необходимо объявить структуру sa (SECURITY_ATTRIBUTES).

 

А также другие работы, которые могут Вас заинтересовать

48095. Навчально-методичні матеріали. Земельне право 409.5 KB
  В сучасних умовах актуальність цих відносин значно підвищилась у звязку з проведенням земельної реформи приватизації землі прийняттям нового Земельного Кодексу України. Проблеми даної навчальної дисципліни висвітлюються на базі сучасних і нормативних документів: Конституції України Земельного кодексу України Кодексів інших галузей права указів Президента України декретів і постанов Кабінету Міністрів України відомчих нормативних актів що регулюють земельні правовідносини в державі. Джерела земельного права України і їх...
48096. НАЦІОНАЛЬНА ЕКОНОМІКА: ЗАГАЛЬНЕ ТА ОСОБЛИВЕ 2.5 MB
  Теоретичні аспекти виникнення та розвитку науки національної економіки Основоположником науки про національну економіку є німецький економіст Ф. Лістом у вказаній праці можна звести до трьох взаємоповязаних підходів: 1 теорії продуктивних сил; 2 концепції стадійного економічного розвитку; 3 положення про активну економічну роль держави. Вона є результатом попереднього розвитку відкриттів удосконалень традицій досвіду знань. Ліст справедливо відзначає що істинні багатство і добробут нації зумовлюються не кількістю мінових...
48097. Планирование персонала на ОАО «Реал-Моторс» 240.5 KB
  Проблемы усиливается в большей мере в связи с развитием рыночной системы в России, в которой большую важность приобретает рынок трудовых ресурсов. Поэтому политика предприятия по отбору и набору персонала является приоритетной для фирмы, поскольку она играет важную роль для достижения миссии и целей организации.
48098. МЕНЕДЖМЕНТ ЯК СПЕЦИФІЧНА СФЕРА ЛЮДСЬКОЇ ДІЯЛЬНОСТІ 2.97 MB
  Сутність категорій âуправлінняâ та âменеджментâ. Менеджмент як система наукових знань та мистецтво управління. КЛЮЧОВІ СЛОВА: менеджмент управління менеджер організація об'єкт менеджменту суб'єкт менеджменту.
48099. НТФ Комерційний відділ. Опорний конспект лекцій 508.5 KB
  В залежності від обיєкта рекламування розрізняють два види реклами: реклама товару товарна реклама; реклама з метою створення іміджу престижу фірми престижна реклама. Товарна реклама здійснює пропаганду товару інформує покупця про переваги і якості товару. Товарна Престижна Переконуюча Заохочує покупця віддати переваги саме цьому товару. Змінює сприйняття споживачем властивостей товару.
48100. Регіональна економіка 350.5 KB
  В основі вивчення регіональної економіки є дослідження розвитку продуктивних сил що являє собою розподіл за територією трудових ресурсів і засобів виробництва всіх основних компонентів соціальноекономічних відносин. Оскільки РПС розглядається як динамічний стан процесу їх розвитку у просторі і в часі форми зосередження виробничої діяльності постійно змінюються. В процесі вивчення регіонального розвитку визначаються комплексні завдання цієї науки а саме: вивчення ТПП регіонів і їх спеціалізації; вдосконалення внутрішньорегіональних та...
48101. ФІНАНСОВИЙ МЕНЕДЖМЕНТ. ОПОРНИЙ КОНСПЕКТ ЛЕКЦІЙ 1.01 MB
  З огляду на це найманого менеджера підприємства іноді розглядають як фінансового посередника. Найбільший вплив на вибір типу фінансової політики підприємства здійснює саме субєктивний фактор тип фінансового менеджера. Унітарне підприємство створюється одним засновником який виділяє необхідне для того майно формує відповідно до закону статутний фонд не поділений на частки паї затверджує статут розподіляє доходи безпосередньо або через керівника який ним призначається керує підприємством і формує його трудовий колектив на засадах...
48102. Техноекологія. Опорний конспект лекцій 368.5 KB
  Контроль забруднення довкілля. Якість вимірювань складу та властивостей об'єктів довкілля та джерел їх забруднення В. Отже антропогенне забруднення атмосфери спричиняється насамперед роботою промислових сільськогосподарських підприємств а також підприємств енергетики автотранспорту тощо що може призвести до таких негативних наслідків: перевищення гранично допустимих концентрацій ГДК багатьох токсичних речовин у містах і населених пунктах; утворення смогу і кислотних дощів; поява парникового ефекту підвищення середньої...
48103. Мікроекономіки. Конспект лекцій 3.63 MB
  Варіації факторів виробництва та оптимум товаровиробника 85 Тема 8. Витрати виробництва 96 Тема 9. Ринок факторів виробництва 155 Тема 13. Він також вважав що багатство створюється в процесі виробництва а розподіл праці конкуренція продуктивність праці ринок підвищують ефективність виробництва.