Процеси нитки і волокна в ОС Windows

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Реферат на тему:
"Процеси, нитки і волокна в ОС Windows"

Зміст
1. Процеси, нитки і волокна в ОС Windows
2. Створення процесів
3. Завершення процесів
4. Створення ниток
5. Завершення ниток
6. Створення волокон
7. Знищення волокон
8. Wait-функції
Висновки
Список літератури

1. Процеси, нитки і волокна в ОС Windows
Процесом зазвичай називають примірник виконуваної програми. Хоча на перший погляд здається, що програма й процес поняття практично однакові, вони фундаментально відрізняються один від одного. Програма являє собою статичний набір команд, а процес це набір ресурсів і даних, що використовуються при виконанні програми. Процес в Windows складається з наступних компонентів:
- Структура даних, що містить всю інформацію про процес, в тому числі список відкритих дескрипторів різних системних ресурсів, унікальний ідентифікатор процесу, різну статистичну інформацію і т.д.;
- Адресний простір - діапазон адрес віртуальної пам'яті, яким може користуватися процес;
- Виконується програма і дані, що проектуються на віртуальний адресний простір процесу.
Процеси інертні. Відповідають ж за виконання коду, що міститься в адресному просторі процесу, нитки. Нитка (thread) - якась сутність всередині процесу, яка отримує процесорний час для виконання. У кожному процесі є мінімум одна нитка. Ця первинна нитка створюється системою автоматично при створенні процесу. Далі ця нитка може породити інші нитки, ті в свою чергу нові і т.д. Таким чином, один процес може володіти кількома нитками, і тоді вони одночасно виконують код в адресному просторі процесу. Кожна нитка має:
- Унікальний ідентифікатор нитки;
- Вміст набору регістрів процесора, що відображають стан процесора;
- Два стеки, один з яких використовується ниткою при виконанні в режимі ядра, а інший - в режимі користувача;
- Закриту область пам'яті, звану локальною пам'яттю нитки (thread local storage, TLS) і використану підсистемами, run-time бібліотеками і DLL.
Щоб всі нитки працювали, операційна система відводить кожній з них певний процесорний час. Тим самим створюється ілюзія одночасного виконання ниток (зрозуміло, для багатопроцесорних комп'ютерів можливий справжній паралелізм). У Windows реалізована система витісняє планування на основі пріоритетів, в якій завжди виконується нитку з найбільшим пріоритетом, готова до виконання. Обрана для виконання нитка працює протягом деякого періоду, званого квантом. Квант визначає, скільки часу буде виконуватися нитка, поки операційна система не перерве її. Після закінчення кванта операційна система перевіряє, чи готова до виконання інша нитку з таким же (або великим) рівнем пріоритету. Якщо таких ниток не виявилося, поточної нитки виділяється ще один квант. Однак нитка може не повністю використовувати свій квант. Як тільки інша нитка з більш високим пріоритетом готова до виконання, поточна нитка витісняється, навіть якщо її квант ще не закінчився.
Квант не вимірюється в яких би то не було одиницях часу, а виражається цілим числом. Для кожної нитки зберігається поточне значення її кванта. Коли нитки виділяється квант процесорного часу, це означає, що її квант встановлюється в початкове значення. Воно залежить від операційної системи. Наприклад, для Win2000 Professional початкове значення кванта дорівнює 6, а для Win2000 Server - 36.
Кожного разу, коли виникає переривання від таймера, з кванта нитки віднімається 3, і так до тих пір, поки він не досягне нуля. Частота спрацьовування таймера залежить від апаратної платформи. Наприклад, для більшості однопроцесорних x86 систем він складає 10 мс, а на більшості багатопроцесорних x86 систем - 15 мс.
У будь-якому випадку операційна система повинна визначити, яку нитку виконувати наступної. Вибравши нову нитку, операційна система перемикає контекст. Ця операція полягає в збереженні параметрів виконуваної нитки (регістри процесора, покажчики на стек ядра і користувальницький стек, покажчик на адресний простір, в якому виконується нитка тощо), і завантаженні аналогічних параметрів для іншої нитки, після чого починається виконання нової нитки.
Планування в Windows здійснюється на рівні ниток, а не процесів. Це здається зрозумілим, тому що самі процеси не виконуються, а лише надають ресурси і контекст для виконання ниток. Тому при плануванні ниток, система не звертає уваги на те, якому процесу вони належать. Наприклад, якщо процес А має 10 готових до виконання ниток, а процес Б - дві, і всі 12 ниток мають однаковий пріоритет, кожна з них отримає 1 / 12 процесорного часу.
У Windows існує 32 рівня пріоритету, від 0 до 31. Вони групуються так: 31-16 - рівні реального часу; 15-1 - динамічні рівні; 0 - системний рівень, зарезервований для процесу обнулення сторінок (zero-page thread).
Пріоритет кожної нитки (базовий пріоритет нитки) складається з пріоритету її процесу і відносного пріоритету самої нитки. Є сім відносних пріоритетів ниток:
Normal: такий же як і в процесу;
Above normal: +1 до пріоритету процесу;
Below normal: -1;
Highest: +2;
Lowest: -2;
Time critical: встановлює базовий пріоритет потоку для Real time класу в 31,
для інших класів - в 15;
Idle: встановлює базовий пріоритет потоку для Real time класу в 16,
для інших класів - в 1.
Якщо операційна система виконується на машині, де встановлено більше одного процесора, то за замовчуванням, нитка виконується на будь-якому доступному процесорі. Однак у деяких випадках, набір процесорів, на яких нитка може працювати, може бути обмежений. Це явище називається прив'язкою до процесорів (processor affinity). Можна змінити прив'язку до процесорів програмно, через Win32-функції планування.
Волокна підтримуються в WIN32 API, починаючи з Windows2000. Під волокном розуміється спрощена нитка, виконання якої планується самим додатком, а не планувальником процесорного часу ОС. Планування волокон може здійснюватися тільки шляхом переключення на них тільки з інших волокон. Волокна виконуються в контексті ниток, в яких планується їх застосування, і допускають повну їх ідентифікацію з нитками. У кожній нитки може бути заплановано декілька волокон. Для кожного волокна створюється власний стек, в якому зберігається інформація про стан волокна.
2. Створення процесів
Створення Win32 процесу здійснюється викликом однієї з таких функцій, як CreateProcess, CreateProcessAsUser (для WinNT/2000/Vista) і CreateProcessWithLogonW (починаючи з Win2000) і відбувається в кілька етапів:
- Відкривається файл образу (EXE), який буде виконуватися в процесі. Якщо виконуваний файл не є Win32 додатком, то шукається образ підтримки (support image) для запуску цієї програми. Наприклад, якщо виконується файл з расшіреніем.bat, запускається cmd.exe і т.п.
У WinNT/2000/Vista для налагодження програм реалізовано наступне. CreateProcess, знайшовши виконуваний Win32 файл, шукає в SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Option розділ з ім'ям і розширенням запускається файлу, потім шукає в ньому параметр Debugger, і якщо рядок не порожній, запускає те, що в ній написано замість даної програми.
- Створюється об'єкт Win32 «процес».
- Складається первинна нитка (стек, контекст і об'єкт «нитка»).
- Підсистема Win32 повідомляється про створення нового процесу і нитки.
- Починається виконання первинної нитки.
- У контексті нового процесу й потоку ініціалізується адресний простір (наприклад, завантажуються необхідні DLL) і починається виконання програми.
3. Завершення процесів
Процес завершується якщо:
- Вхідна функція первинної нитки повернула управління.
- Одна з ниток процесу викликала функцію ExitProcess.
- Нитка іншого процесу викликала функцію TerminateProcess.
Коли процес завершується, всі User-і GDI-об'єкти, створені процесом, знищуються, об'єкти ядра закриваються (якщо їх не використовує інший процес), адресний простір процесу знищується.
Приклад: Програма створює процес «Калькулятор».
# Include <windows.h>
int main (int argc, char * argv [])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory (& si, sizeof (si));
si.cb = sizeof (si);
ZeroMemory (& pi, sizeof (pi));
if (! CreateProcess (NULL, «c: \ \ windows \ \ calc.exe», NULL, NULL, FALSE,
0, NULL, NULL, & si, & pi))
return 0;
/ / Close process and thread handles.
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
return 0;
}
4. Створення ниток
Первинна нитка створюється автоматично при створенні процесу. Решта нитки створюються функціями CreateThread і CreateRemoteThread (тільки в WinNT/2000/XP/Vista).
5. Завершення ниток
Нитка завершується якщо
- Функція нитки повертає управління.
- Нитка самознищується, викликавши ExitThread.
- Інша нитка даного чи стороннього процесу викликає TerminateThread.
- Завершується процес, що містить цю нитку.
6. Створення волокон
Волокно може бути створено за допомогою системного виклику CreateFiber з основної нитки процесу або отримане шляхом перетворення поточної нитки за допомогою функції ConvertThreadToFiber. Переключення між волокнами може бути організовано за допомогою функції SwitchToFiber, але її виклик можна здійснювати тільки з волокна.
Приклад: Програма створює 4 волокна, кожне з яких виконує перемикання на наступне волокно, якщо число перемикань більше 10, робота завершується.
/ / Для роботи з волокнами наступні 2 рядки обов'язкові!
# Define WIN32_LEAN_AND_MEAN
# Define _WIN32_WINNT 0x0400
# Include «stdio.h»
# Include «windows.h»
int Counter;
void * fiber [5];
void WINAPI Func (void *)
{
for (;) {
printf («Fiber Number% d \ n», Counter% 4);
if ((Counter + +) <10) {
SwitchToFiber (fiber [Counter% 4]);
} Else break;
}
}
int main (int argc, char * argv [])
{
Counter = 0;
fiber [0] = CreateFiber (0, Func, NULL);
fiber [1] = CreateFiber (0, Func, NULL);
fiber [2] = CreateFiber (0, Func, NULL);
fiber [3] = CreateFiber (0, Func, NULL);
/ / Для перемикання на перше волокно необхідно перетворити поточну нитку в волокно
fiber [4] = ConvertThreadToFiber (NULL);
SwitchToFiber (fiber [0]);
return 0;
}
7. Знищення волокон
Для примусового знищення волокна застосовується функція DeleteFiber. Також для знищення волокна можуть бути використані всі функції, призначені для знищення ниток.
8. Wait-функції
Щоб призупинити виконання роботи нитки можна використовувати різні способи.
Функція Sleep () призупиняє роботу нитки на задане число мілісекунд. Якщо в якості аргументу ви вкажіть 0 ms, то відбудеться наступне. Нитка відмовиться від свого кванта процесорного часу, проте тут же з'явиться в списку ниток, готових до виконання. Іншими словами відбудеться навмисне перемикання ниток (вірніше сказати, спроба перемикання - адже наступного для виконання ниткою цілком може стати та ж сама).
Приклад. Програма створює процес «Калькулятор» і через 15 секунд його знищує.
# Include <windows.h>
int main (int argc, char * argv [])
{
STARTUPINFO StartUpInfo;
PROCESS_INFORMATION ProcessInfo;
memset (& StartUpInfo, 0, sizeof (STARTUPINFO));
StartUpInfo.cb = sizeof (STARTUPINFO);
If (CreateProcess (NULL, «c: \ \ windows \ \ calc.exe», NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL, NULL, & StartUpInfo, & ProcessInfo))
{
Sleep (15000);
TerminateProcess (ProcessInfo.hProcess, 0);
}
ExitProcess (0);
}
Функція WaitForSingleObject () призупиняє виконання нитки до тих пір, поки не відбудеться одна з двох подій:
- Закінчиться затримку читання;
- Очікуваний об'єкт перейде в сигнальний (signaled) стан.
По поверненню значенням можна зрозуміти, яке з двох подій сталося. Очікувати за допомогою wait-функцій можна більшість об'єктів ядра, наприклад, об'єкт «процес» або «нитка», щоб визначити, коли вони завершать свою роботу.
Функції WaitForMultipleObjects передається відразу масив об'єктів. Можна очікувати спрацьовування відразу всіх об'єктів або якогось одного з них.
Приклад. Програма створює дві однакових нитки і чекає їх завершення. Нитки просто виводять текстове повідомлення, яке передано їм при ініціалізації.
# Include <windows.h>
# Include <process.h>
unsigned ThreadFunc (void * arg)
{
char ** str = (char **) arg;
MessageBox (0, str [0], str [1], 0);
ExitThread (0);
return 0;
}
int main (int argc, char * argv [])
{
char * InitStr1 [2] = {«First thread running!», «11111»}; / / рядок для першої нитки
char * InitStr2 [2] = {«Second thread running!», «22222»}; / / рядок для другої нитки
unsigned long uThreadIDs [2];
HANDLE hThreads [2];
hThreads [0] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,
InitStr1, 0, & uThreadIDs [0]);
hThreads [1] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,
InitStr2, 0, & uThreadIDs [1]);
/ / Чекаємо, поки нитки не завершать свою роботу
WaitForMultipleObjects (2, hThreads, TRUE, INFINITE);
/ / Закриваємо дескриптори
CloseHandle (hThreads [0]);
CloseHandle (hThreads [1]);
return 0;
}

Висновки
У рефераті розглянуті різні WIN API функції і послідовність дій для створення і роботи з процесами, нитками і фолокнамі при створенні вміндоуз-додатків, їх застосування і особливості. Для отримання повної інформації про призначення, використання і синтаксисі всіх функцій WIN32 API необхідно скористатися системою допомоги MS SDK, що входить до складу середовищ програмування Borland Delphi або CBuilder, а також MSDN, що поставляється в складі системи програмування Visual C.

Список літератури
1. Беррі Нансі. Комп'ютерні мережі пер. з англ. - М.: БІНОМ, 1996.
2. Глосарій мережевих термінів http://www.bilim.com/koi8/library/glossary/
3. Комп'ютерні мережі: Навчальний курс Microsoft Corporation - М.: Видавничий відділ «Російська редакція», 1999.
4. Основи сучасних комп'ютерних технологій під редакцією А.Д. Хомоненко - СПб КОРОНА принт, 1998.
5. Ресурси Microsoft Windows NT Workstation 4.0 пер. з англ. яз. BNV - СПб, 1998.
6. Мережеві операційні системи Н.А. Оліфер, В.Г. Оліфер, 2001, СПб, Пітер, 544 стор
7. Синхронізація ниток всередині процесу в ОС Windows, http://subscribe.ru/ archive/comp.soft.win.swodniwgniqaf/200305/23131921.text
8. Сучасні операційні системи, Е. Таненбаум, 2002, СПб, Пітер, 1040 стор
9. Довідник Novell Netware 4 С.Б. Орлов, на замовлення ІВЦ «Попурі», 1994.
10. Тіттел Ед, Хадсон Курт, Дж. Майкл Стюард Networking Essentials - СПб ПИТЕР, 1999.
11. Тіттел Ед, Хадсон Курт, Дж. Майкл Стюард TCP / IP - СПб ПИТЕР, 1999.
12. Якубайтіс Е.А. Інформаційні мережі та системи: Довідкова книга. - М.: Фінанси і статистика, 1996.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
29.8кб. | скачати


Схожі роботи:
Робота з гарячими клавішами в ОС Windows Призначення гарячих клавіш в ОС WINDOWS -функції
Операційні системи WINDOWS NT NetWare UNIX Оперцiйна система Windows NT
Пошук даних в ОС Windows Основні прийоми роботи із пошуком в ОС WINDOWS
Монтаж випробування та експлуатація обладнання для цеху з виробництва центріфугальной віскозної нитки
Волокна
Налаштування локальної мережі і підключення до мережі інтернет для Windows XP і Windows 7
Оптичні волокна
Синтетичні волокна
Природні і синтетичні волокна
© Усі права захищені
написати до нас