Организация планирования в UNIX
Планирование основывается на понятии приоритета. Чем выше числовое значение приоритета, тем меньше приоритет (разрешено и отрицательное значение). Приоритет процесса - это параметр, который размещен в контексте процесса, и по значению этого параметра осуществляется выбор очередного процесса для продолжения работы или выбор процесса для его приостановки. Приоритет системного процесса задается в виде аргумента функции SLEEP, который переводит процесс в состояние ожидания некоторого события. Процесс перейдет в это состояние, но приоритет останется прежним и после выхода из ожидания у процесса будет именно этот приоритет. Существует граница PZERO (системная константа). Ее значение по умолчанию равно некоторому числу (например, 25). Значение системной константы можно изменить при генерации системы. Эти константы подбираются таким образом, чтобы поддерживать определенное равновесие системы. Если приоритет системного процесса больше PZERO, то он считается низким. Если приоритет системного процесса меньше или равно PZERO, то он считается высоким. Процесс, находящийся в состоянии ожидания с высоким приоритетом не может быть выведен из этого состояния каким - либо сигналом. Если процесс имеет низкий приоритет, то он будет обрабатываться. Приоритет пользовательского процесса собирается из нескольких частей. В вычислении приоритета пользовательского процесса используются значения двух полей дескриптора процесса (ДП) - P_NICE и P_CPU. P_NICE - формируется пользователем и называется пользовательской составляющей приоритета. Она наследуется от родителя и может изменяться по воле процесса. Изменяться она может только в сторону увеличения значения (до некоторого предельного значения). Т.е. пользователь может снижать приоритет своих процессов. Начальное значение P_NICE равняется некоторому значению NZERO (константа, например, 20) и в дальнейшем это поля может модифицироваться системной функцией nice(). Аргумент этой функции - это добавка к значению текущего поля. Непривилегированный процесс может задавать только неотрицательной значение этой добавки, а привилегированный - любые значения. Результирующее значение - это сумма добавок и старого значения. P_NICE ограничена снизу 0 и сверху константой NZERO*2. Если процесс непривилегированный, то NZERO < P_NICE < 2*NZERO. Если привилегированный - то
предыдущаяследующая