Камерон Хьюз - Параллельное и распределенное программирование на С++
- Название:Параллельное и распределенное программирование на С++
- Автор:
- Жанр:
- Издательство:Издательский дом «Вильямс»
- Год:2004
- Город:МоскваСанкт-ПетербургКиев
- ISBN:ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.
Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Операционная система устанавливает жесткие ограничения на использование ресурсов процессом. Процесс может установить или изменить мягкие ограничения ресурсов, но это значение не должно превысить жесткий предел, установленный операционной системой. Процесс может понизить свой жесткий предел, но его значение не должно быть меньше мягкого предела. Операция по понижению процессом своего жесткого предела необратима. Его могут повысить только процессы, обладающие специальными привилегиями.
Синопсис
#include
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 представляет тип ресурса. Значения типов ресурсов (и их краткое описание) приведено в табл. 3.6. Жесткие и мягкие пределы заданного ресурса представляются параметром rlp, который указывает на структуру rlimit, содержащую два объекта типа rlim_t.
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
} ;
Тип rlim_t — это целочисленный тип без знака. Член rlim_cur содержит значение текущего, или мягкого предела, а член rlim_max — значение максимума, или жесткого предела. Членам rlim_cur и rlim_max можно присвоить любые значения, а также символические константы, определенные в заголовке .
RLIM_INFINITYОтсутствие ограничения.
RLIM_SAVED_MAXНепредставимый хранимый жесткий предел.
RLIM_SAVED_CURНепредставимый хранимый мягкий предел.
Как жесткий, так и мягкий пределы можно установить равными значению RLIM_INFINITY,которое подразумевает, что ресурс неограничен.
Таблица З.6. Значения параметра resource
RLIMIT_COREМаксимальный размер файла ядра в байтах, который может быть создан процессом
RLIMIT_CPUМаксимальный объем времени ЦП в секундах, которое может быть использовано процессом RLIMIT_DATAМаксимальный размер раздела данных процесса в байтах
RLIMIT_FSIZEМаксимальный размер файла в байтах, который может быть создан процессом
RLlMlT_NOFILEУвеличенное на единицу максимальное значение, которое система может назначить вновь созданному дескриптору файла
RLlMlT_STACKМаксимальный размер стека процесса в байтах
RLlMlT_AS Максимальный размер доступной памяти процесса в байтах
Функция getrlimit() возвращает значения мягкого и жесткого пределов заданного ресурса в объекте rlp.Обе функции возвращают значение 0 при успешном завершении и число -1 в противном случае. Пример установки процессом мягкого предела для размера файлов в байтах приведен в листинге 3.4.
Листинг 3.4. Использование функции setrlimit() для установки мягкого предела для размера файлов
#include
struct rlimit R_limit;
struct rlimit R_limit_values;
R_limit.rlim_cur = 2 000;
R_limit.rlim_max = RLIM_SAVED_MAX;
setrlimit (RLIMIT_FSIZE, &R__1 imit);
getrlimit(RLIMIT_FSIZE, &R_limit_values);
cout << «мягкий предел для размера файлов: " << R_limit_values.rlim_cur <
В листинге 3.4 мягкий предел для размера файлов устанавливается равным 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.Эта структура содержит члены, перечисленные и описанные в табл. 3.7. При успешном выполнении функция возвращает число 0, в противном случае — число -1.
Таблица 3.7. Члены структуры rusage
Член структуры Описание
struct timeval ru_utime Время,потраченное пользователем
struct timeval ru_sutime Время,использованное системой
long ru_maxrss Максимальный размер, установленный для резидентной программы
long ru_maxixrss Размер разделяемой памяти
long ru_maxidrss Размер неразделяемой области данных
long ru_maxisrss Размер неразделяемой области стеков
long ru_minflt Количество запросов на страницы
long ru_maj flt Количество ошибок из-за отсутствия страниц
long ru_nswap Количество перекачек страниц
long ru_inblock Блочные операции по вводу данных
long ru_oublock Блочные операции операций по выводу данных
long ru_msgsnd Количество отправленных сообщений
long ru_msgrcv Количество полученных сообщений
long ru_nsignals Количество полученных сигналов
long ru_nvcsw Количество преднамеренных переключений контекста
long ru_nivcsw Количество принудительных переключений контекста
Асинхронные и синхронные процессы
Асинхронные процессы выполняются независимо один от другого. Это означает, что процесс А будет выполняться до конца безотносительно к процессу В. Между асинхронными процессами могут быть прямые родственные («родитель-сын») отношения, а могут и не быть. Если процесс А создает процесс В, они оба могут выполняться независимо, но в некоторый момент родитель должен получить статус завершения сыновнего процесса. Если между процессами нет прямых родственных отношений, у них может быть общий родитель.
Асинхронные процессы могут выполняться последовательно, параллельно или с перекрытием. Эти сценарии изображены на рис. 3.12. В ситуации 1 до самого конца выполняется процесс А, затем процесс В и процесс С выполняются до самого конца. Это и есть последовательное выполнение процессов. В ситуации 2 процессы выполняются одновременно. Процессы А и В - активные процессы. Во время выполнения процесса А процесс В находится в состоянии ожидания. В течение некоторого интервала времени оба процесса пребывают в ждущем режиме. Затем процесс В «просыпается», причем раньше процесса А, а через некоторое время «просыпается» и процесс А, и теперь оба процесса выполняются одновременно. Эта ситуация показывает, что асинхронные процессы могут выполняться одновременно только в течение определенных интервалов времени. В ситуации 3 выполнение процессов А и В перекрывается.
Читать дальшеИнтервал:
Закладка: