рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Синопсис

Синопсис - раздел Образование, Лекція 4 5 Створення процесу # Include < Sys/resource.h > Int Setrlimit (Int Resource, Cons...

# include < sys/resource.h >

int setrlimit (int resource, const struct rlimit *rlp);

int getrlimit (int resource, struct rlimit *rlp);

int getrusage (int who, struct rusage *r_usage);

Функція setrlimit () використовується для встановлення обмежень на ви­користання заданих ресурсів. Дана функція дозволяє встановити як жорстку так і м’яку межі. Параметр resource подає тип ресурсу. Значення типів ресурсів (та їх опис) подано в табл. 4. Жорсткі та м’які межі заданого ресурсу подаються параметром rlp, який вказує на структуру rlimit, яка містить два об’єкти типу rlim_t.

іекгсе rlimit

{

rlim_t rlim_cur;

rlim_t rlim_max;

};

Тип rlim_t – це цілий тип без знаку. Елемент rlim_cur містить значення біжучої, або м’якої межі, а елемент rlim_max – значення максимуму, або жорст­кої межі. Елементам rlim_cur і rlim_max можемо надати довільні значення, а та­кож символьні константи, визначені в оголошенні < sys/resource.h >.

RLIM_INFINITY Відсутні обмеження
RLIM_SAVED_MAX Непередбачувана жорстка межа, яка зберігається
RLIM_SAVED_CUR Непередбачувана м’яка межа, яка зберігається

Як жорстку, так і м’яку межі можемо встановити значенню RLIM_ INFINITY, що говорить – ресурс необмежений.

Таблиця 4. Значення параметру resource
Визначення ресурсу Опис
RLIMIT_CORE Максимальний розмір файлу ядра в байтах, який може бути створено процесом
RLIMIT_CPU Максимальний об’єм часу ЦП в секундах, який може бути використаний процесом
RLIMIT_DATA Максимальний розмір розділу даних процесу в байтах
RLIMIT_FSIZE Максимальний розмір файлу в байтах, який може бути створено процесом
RLIMIT_NOFILE Збільшене на одиницю максимальне значення, яке система може призначити знову створеному дескриптору файлу
RLIMIT_STACK Максимальний розмір стеку процесу в байтах
RLIMIT_AS Максимальний розмір доступної пам’яті процесу в байтах
     

Функція getrlimit () повертає значення м’якої та жорсткої межу заданого ресурсу в об’єкт rlp. Обидві функції повертають значення 0 при успішному за­вершенні і число -1 в іншому випадку. Приклад встановлення м’якої межі для розміру файлів в байтах подано в лістінгу 3.

 

 

// Лістінг 3. Використання функції setrlimit () для встановлення м’якої межі

// для розміру файлу

# include < sys/resource.h >

 

// . . .

struct rlimit R_limit;

struct rlimit R_limit_values;

 

// . . .

R_limit.rlim_cur = 2000;

R_limit.rlim_max = RLIM_SAVED_MAX;

setrlimit (RLIMIT_FSIZE, &R_limit);

getrlimit (RLIMIT_FSIZE, &R_limit_values);

cout << “мяка межа для розміру файлів:”

<< R_limit_values.rlim_cur

<< endl;

 

// . . .

В лістінгу 3 м’яка межа для розміру встановлюється рівною 2000 байт, а жорстка межа – максимально можливому значенню. Функції setrlimit () переда­ю­ться значення RLIMIT_FSIZE і R_limit, а функції getrlimit () – значення RLIMIT_FSIZE і R_limit_values. Після їх виконання на екран виводиться вста­новлене значення м’якої межі.

Функція getrusage () повертає інформацію про використання ресурсів процесом, що викликає. Вона також повертає інформацію про дочірній процес, завершення якого очікує процес, який викликає. Параметр who може мати нас­тупні значення:

RUSAGE_SELF

RUSAGE_CHILDREN

Якщо параметру who передано значення RUSAGE_SELF, то інформація, яка повертається, біде належати (відноситися) до процесу, що викликає. Якщо ж параметр who містить значення RUSAGE_CHILDREN, то інформація, яка повертається буде належати (відноситися) до нащадка процесу, який викликає. Якщо, процес який викликає, не очікує завершення свого нащадка, інформація, пов’язана з ним, відкидається (не враховується). Інформація, яка повертається передається через параметр r_usage, який вказує на структуру rusage. Дана стру­ктура містить елементи, подані в таблиці 5. При вдалому виконанні функція по­вертає число 0, в іншому випадку – число -1.

Таблиця 5. Елементи структури rusage
Елемент структури Опис
struct timevai ru_utime Час, затрачений користувачем
struct timevai ru_sutime Час, використаний системою
long ru_maxrss Максимальний розмір, встановлений для резидентної програми
long ru_maxixrss Розмір пам’яті, яка поділяється
long ru_maxidrss Розмір області даних, що не поділяються
long ru_maxisrss Розмір області стеків, що не поділяється
long ru_minflt Кількість запитів на сторінці
long ru_majflt Кількість помилок через відсутність сторінок
long ru_nswap Кількість (перекачек) сторінок
long ru_inblock Блочні операції по вводу даних
long ru_oublock блочні операції по виводу даних
long ru_msgsnd Кількість відправлених повідомлень
long ru_msgrcv Кількість отриманих повідомлень
long ru_nsignals Кількість отриманих сигналів
long ru_nvcsw Кількість передбачених перемикань контексту
long ru_nivcsw Кількість вимушених перемикань контексту

5.3.Асинхронні і синхронні процеси

Асинхронні процеси виконуються незалежно один від одного. Це озна­чає, що процес А буде виконуватися до завершення незалежно до процесу В. Між асинхронними процесами можуть бути прямі родинні (²батько-донька²) відносини, а можуть і не бути. Якщо процес А створює процес В, вини обидва можуть виконуватися незалежно, але в деякий момент батько повинен отрима­ти статус завершення дочірнього процесу. Якщо між процесами немає прямих родинних відносин, у них може бути загальний предок.

Асинхронні процеси можуть виконуватися послідовно, паралельно або з перекриттям. Ці сценарії подано на рис. 4. В ситуації 1 до кінця виконується процес А, потім процес В і тільки потім виконується до кінця процес С. Це і є послідовне виконання процесів. В ситуації 2 процеси виконуються одночасно. Процеси А і В – активні процеси. Під час виконання процесу А процес В знахо­диться в стані очікування. На протязі деякого інтервалу часу обидва процеси пе­ребувають в режимі очікування. Потім процес В ²просинається², причому раніше процесу А, а через деякий час ²просинається² і процес А, і тепер обидва процеси виконуються одночасно. Дана ситуація показує, що обидва процеси можуть виконуватися одночасно на певному інтервалі часу. В ситуації 3 вико­
нання процесів А і В перекриваються.

Асинхронні процеси можуть спільно використовувати наступні ресурси: файли і пам'ять. Це може вимагати (або не вимагати) синхронізації або взаємо­дії при розподілі ресурсів. Якщо процеси виконуються послідовно (ситуація 1), то вони не потребують ніякої синхронізації. Наприклад, всі три процеси А, В і С можуть поділяти деяку глобальну змінну. Процес А (перед тим як заверши­ться) записує значення в цю змінну, потім процес В під час свого виконання зчитує дані, що зберігаються в змінній і (перед тим як завершитися) записує до неї ²своє² значення. Потім під час свого виконання процес С зчитує дані з цієї змінної. Але в ситуації 2 і 3 процеси можуть спробувати одночасно модифіку­вати цю змінну, тому тут необхідна синхронізація доступу до змінної.

Ми визначаємо синхронні процеси як процеси, що виконуються почер­гово, коли один процес призупиняє своє виконання до тих пір, доки не завер­ши­ться другий. Наприклад, процес А, батьківський, при виконанні створює про­цес В, дочірній. Процес А призупиняє своє виконання до тих пір, доки не завершиться процес В. Після завершення процесу В його вихідний код розмі­щу­ється в таблицю процесів. Тим самим процес А отримує повідомлення про завершення процесу В. Процес А може продовжити виконання, а потім завер­шиться або завершиться відразу. В цьому випадку виконання процесів А і В є синхронізованим. Сценарій синхронного виконання процесів А і В (для порів­няння) також показано на рис. 4.

5.4. Створення синхронних та асинхронних процесів за допомогою функцій fork (), exec (), system () та posix_spawn ()

Функції fork (), fork-exec і posix_spawn () дозволяють реалізувати асинх­ронні процеси. При використанні функції fork () дублюється образ батьківсько­го процесу. Після створення дочірнього процесу ця функція повертає батьку (через параметр) ідентифікатор (PID) процесу-нащадка і (звичайним шляхом) число 0, що означає – створення процесу пройшло успішно. При цьому батьків­ський процес не призупиняється; обидва процеси продовжують виконуватися незалежно від інструкції, яка знаходиться безпосередньо за викликом функції fork (). При створенні дочірнього процесу засобами fork-exec комбінації його образ ініціюється за допомогою образу нового процесу. Якщо функція exec () виконалася успішно (тобто успішно пройшла ініціалізація), то вона не повертає батьківському процесу ніякого значення. Функції posix_spawn () створюють образ дочірніх процесів та ініціюють їх. Окрім ідентифікатора (PID), що повер­тається через параметр функції posix_spawn () батьківському процесу, звичай­ним шляхом повертається значення, яке є індикатором успішного продовження процесу. Після виконання функції posix_spawn () обидва процеси виконуються одночасно. Функція system () дозволяє створювати синхронні процеси. При цьо­му створюється оболонка, яка виконує системну команду або запускає файл, що виконується. В цьому випадку батьківський процес призупиняється до тих пір, доки не завершиться дочірній процес і функція system () не поверне зна­че­ння.

5.4. Функція wait ()

Асинхронний процес, викликавши функцію wait (), може призупинити виконання до тих пір, доки не завершиться дочірній процес. Після завершення дочірнього процесу батьківський процес, який очікує, зчитує статус завершення свого нащадка, щоб не допустити створення процесу-²зомбі². Функція wait () отримує статус завершення з таблиці процесів. Параметр status вказує на об­ласть, яка містить статус завершення дочірнього процесу. Якщо батьківський процес має не один, а декілька дочірніх процесів і деякі з них вже завершилися, функція wait () зчитує з таблиці процесів статус завершення тільки для одного дочірнього процесу. Якщо інформація про статус виявиться доступною ще до виконання функції wait (), ця функція завершиться миттєво. Якщо батьківський процес не має ні одного потомка, ця функція повертає код помилки. Функцію wait () можемо використати також в тому випадку, коли процес, що викликає повинен очікувати до тиж пір, доки не отримає сигнал, щоб потім виконати пе­в­ні дії по його обробці.

– Конец работы –

Эта тема принадлежит разделу:

Лекція 4 5 Створення процесу

Синопсис... pstree a c h frac Hpid l n p u G frac U... pid frac user...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Синопсис

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Створення процесу
Відношення між батьківським і дочірнім процесами;

Відношення між батьківським та дочірніми процесами
Процес, який створює, або породжує, інший процес, є батьківським (parent) процесом по відношенню до породженого, або дочірнього (child) проце­су. Процес init – батьківський (або предок) всіх

Використання системних функцій
2.1. Системна функція fork () Системна функція (або системний виклик) fork () створює новий процес, який є дублікатом процесу який його викликав, тобто його батька. При успіш­ному виконанн

Синопсис
# include <unistd> pid_t fork (void); Невдале виконання функції fork () можливе у випадку, коли система не володіє ресурсами для створення ще одного процесу. Це відбувається

Синопсис
# include <unistd.h int execl (const char *path, const char *arg0, . . ./*, (char *)0 */); int execle (const char *path, const char *arg0, . . ./*, (char *)0 *, char * const en

Синопсис
# include < unistd.h > long sysconf (int name); Ще одним обмеженням при використанні функцій сімейства exec та інших функцій, які застосовуються для створення процесів, є ма

Синопсис
# include < stdlib.h > char *getenv ( const char *name ); int setenv (const char *name, const char *value, int overwrite ); void unsetenv ( const char *name );

Синопсис
# include < stdlib.h > int system (const char *string); В якості параметру string можемо передати системну команду або ім'я файлу, який виконується. При вдалому виконанні фу

Використання POSIX-функцій для породження процесів
Подібно створенню процесів за допомогою функцій system () і fork- exec, функцій posix_spawn () створюють нові дочірні процеси із заданих образів про­цесів. Однак функції posix_spawn () дозволяють п

Синопсис
# include < stdlib.h > int posix_spawn (pid_t *restrict pid, const char *restrict path, const posix_spawn_file_actions_t * file_actions, const posix_spawnattr_t *restrict attrp, char

Завершення процесу
Коли процес завершується, його блок БУП руйнується, а адресний прос­тір, який він займав і ресурси звільняються. Код завершення розміщується в головну таблицю процесів. Як тільки батьківський проце

Синопсис
# include < stdlib.h > void exit (int status); void abort (void); Функцію kill () можемо використати для примусового завершення іншо­го процесу. Дана функція відпра

Ресурси процесу
При виконанні призначених на процес задач часто приходиться запису­вати дані у файл, відправляти їх на принтер або відображати отримані результа­ти на екран. Процесу можуть знадобитися дані, що вво

Синопсис
# include < sys/wait/h > pid_t wait (int *status); pid_t waitpid (pid_t pid, int *status, int oрtions); Функція waitpid () аналогічна функції wait () за виключенням

Розбиття програми на задачі
Аналізуючи розбиття програми на декілька задач, ми робимо перший крок до реалізації паралелізму в свою програму. В одно процесорному середо­вищі паралелізм реалізується засобами багатозадачності. Ц

Лінії видимого контуру
Породження процесі, як подано в лістінгу 6, можливе за допомогою фу­нкцій, які викликаються із функції mane (). // Лістінг 6. Основна гілка програми, з якої викликається функція,

Висновки
Паралелізм в С++ програмі досягається за рахунок поділу на декілька процесів або декілька потоків. Процес – це ²одиниця роботи², що реалізується операційною системою. Якщо програма – це а

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги