Читаем Linux API. Исчерпывающее руководство полностью

# ./sched_view 2006 Выводим исходную политику процесса sleep

2006: OTHER 0

# ./sched_set f 25 2006 Назначаем процессу политику SCHED_FIFO и приоритет 25

# ./sched_view 2006 Выводим изменения

2006: FIFO 25


Листинг 35.3. Получение сведений о политике планирования и приоритете

procpri/sched_view.c

#include

#include "tlpi_hdr.h"


int

main(int argc, char *argv[])

{

int j, pol;

struct sched_param sp;


for (j = 1; j < argc; j++) {

pol = sched_getscheduler(getLong(argv[j], 0, "pid"));

if (pol == –1)

errExit("sched_getscheduler");


if (sched_getparam(getLong(argv[j], 0, "pid"), &sp) == –1)

errExit("sched_getparam");


printf("%s: %-5s", argv[j],

(pol == SCHED_OTHER)? "OTHER":

(pol == SCHED_RR)? "RR":

(pol == SCHED_FIFO)? "FIFO":

#ifdef SCHED_BATCH /* Относится только к Linux */

(pol == SCHED_BATCH)? "BATCH":

#endif

#ifdef SCHED_IDLE /* Относится только к Linux */

(pol == SCHED_IDLE)? "IDLE":

#endif

"???");

printf("%2d\n", sp.sched_priority);

}


exit(EXIT_SUCCESS);

}

procpri/sched_view.c


Предотвращение блокирования системы процессами реального времени

Поскольку процессы SCHED_RR и SCHED_FIFO опережают любую низкоприоритетную программу (например, командную оболочку, в которой эти процессы запущены), при разработке приложений, использующих эти политики, необходимо учитывать возможность того, что слишком активный процесс, работающий в режиме реального времени, может занять все ресурсы ЦПУ и заблокировать систему. Существует несколько программных способов этого избежать.

• Задействуя вызов setrlimit(), установить мягкое ограничение для процессорного времени (RLIMIT_CPU, описанный в разделе 36.3) на достаточно низком уровне. Если процесс потребляет слишком много ресурсов ЦПУ, ему будет послан сигнал SIGXCPU, который по умолчанию должен привести к его завершению.

• Установить таймер с помощью вызова alarm(). Если процесс продолжает работать на протяжении времени, которое превышает количество секунд, заданное в таймере, он будет завершен по сигналу SIGALRM.

• Создать сторожевой процесс, который работает с высоким приоритетом реального времени. Он может постоянно находиться в цикле, переходя в режим сна на определенное время, и затем проверяя состояние других процессов. Такой мониторинг может включать в себя измерение процессорного времени, потребляемого процессами (см. обсуждение функции clock_getcpuclockid() в подразделе 23.5.3), а также проверку их политики планирования и приоритета с помощью вызовов sched_getscheduler() и sched_getparam(). Если какой-то процесс ведет себя неправильно, сторожевой поток может понизить его приоритет или послать ему сигнал, который его остановит или завершит.

• Начиная с версии 2.6.25, ядро Linux предоставляет нестандартное ограничение на ресурсы, RLIMIT_RTTIME, позволяющее контролировать объем процессорного времени, которое может быть потреблено во время одного всплеска активности процесса, работающего в режиме реального времени. Ограничение RLIMIT_RTTIME указывается в микросекундах и ограничивает количество процессорного времени, которое процесс может потребить без выполнения блокирующих системных вызовов. При выполнении такого вызова насчитанное время сбрасывается к нулю. Однако этого не происходит, если процесс опережается другой, более приоритетной программой, если истекает временной отрезок, выделенный ему планировщиком (при использовании политики SCHED_RR), или в случае выполнения вызовов sched_yield() (см. подраздел 35.3.3). Когда процесс достигает установленного ограничения, то, как и в случае с ограничением RLIMIT_CPU, ему передается сигнал SIGXCPU, который по умолчанию приводит к его завершению.

Это нововведение, появившееся в ядре версии 2.6.25, также помогает предотвратить блокирование системы слишком активными процессами. Подробности ищите в исходном файле ядра Documentation/scheduler/sched-rt-group.txt.


Предотвращение наследования привилегированной политики планирования дочерними процессами

В Linux 2.6.32 было добавлено значение SCHED_RESET_ON_FORK, которое можно указать для аргумента policy при вызове sched_setscheduler(). Это флаг, который с помощью логического ИЛИ используется совместно с политиками, перечисленными в табл. 35.1. Если его установить, потомок, созданный процессом с помощью вызова fork(), не наследует его привилегированную политику планирования и приоритет. При этом действуют следующие правила.

• Если процесс имеет политику планирования реального времени (SCHED_RR или SCHED_FIFO), политика потомка сбрасывается к стандартному циклическому алгоритму разделения времени SCHED_OTHER.

• Если процесс имеет отрицательное (то есть высокое) значение nice, это значения для потомка сбрасывается к нулю.

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных