Enter new priority of process:
13
Priority 13 of process with pid 11780132
# ps -l -p 11780132
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000200 - 0 11780132 7401499 - 13 0 - 600K - ? 00:00:00 ./test
Инструменты контроля и изменения политики планирования. К ним относятся функции получения сведений о предельных значениях приоритета при разных политиках: sched_get_priority_min(), sched_get_priority_max().
limprio.c – программа, определяющая предельные значения приоритета при разных политика диспетчеризации (FIFO, RR, OTHER, SPORADIC).
#include <stdlib.h>
#include <sched.h>
main( int argc, char* argv[])
{
printf("policy\t\tminprio\t\tmaxprio\n");
printf("FIFO\t\t%i\t\t%i\n", sched_get_priority_min(SCHED_FIFO), sched_get_priority_max(SCHED_FIFO));
printf("RR\t\t%i\t\t%i\n", sched_get_priority_min(SCHED_RR), sched_get_priority_max(SCHED_RR));
printf("OTHER\t\t%i\t\t%i\n", sched_get_priority_min(SCHED_OTHER), sched_get_priority_max(SCHED_OTHER));
printf("SPORADIC\t%i\t\t%i\n", sched_get_priority_min(SCHED_SPORADIC), sched_get_priority_max(SCHED_SPORADIC));
}
Пример работы программы:
# make limprio
cc limprio.c -o limprio
# ./limprio
policy minprio maxprio
FIFO 1 255
RR 1 255
OTHER 1 255
SPORADIC 1 255
Для пользователя root значения приоритетов при разных политиках диспетчеризации меняются от 1-255, для обычных пользователей от 1-63.
2.7. Планирование и диспетчеризация
Функции sched_setscheduler() и sched_getscheduler позволяют задать дисциплину планирования, а также анализировать текущую дисциплину планирования.
Для управления политиками диспетчеризации в QNX используется механизм (в том числе позволяющий контролировать приоритеты процессов, то есть управлять всей системой планирования) на основе семейства методов, описанных в заголовочном файле sched.h.
sched.c – программа, генерирующая множество процессов, а также позволяющая задавать их количество, приоритеты и дисциплину планирования.
#include <stdlib.h>
#include <stdio.h>
#include <sched.h>
#include <sys/types.h>
#include <process.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <semaphore.h>
#include <unistd.h>
#include <sys/stat.h>
#define SIZE 32780
#define MAX_NUM_OF_PROCESSES 10
int main( int argc, char *argv[])
{
int i, policy, num_of_processes, fd, fda;
int pid [MAX_NUM_OF_PROCESSES];
int priority[MAX_NUM_OF_PROCESSES];
char *buffer, * address;
char argum[5];
struct sched_param param;
if(argc<4)
{
fprintf(stderr, " Need %s num_of_processes policy priority_of_processes\n", argv[0]);
return EXIT_FAILURE;
}
if(atoi(argv[1]) > MAX_NUM_OF_PROCESSES)
{
fprintf(stderr, " number of processes must be lower than %d\n", MAX_NUM_OF_PROCESSES );
return EXIT_FAILURE;
}
param.sched_priority = 63;
sched_setparam(0, ¶m);
policy = atoi(argv[2]);
for(i=0; i<argc-3; i++)
{
priority[i] = atoi(argv[i+3]);
}
num_of_processes = i;
for(i = num_of_processes; i <=atoi(argv[1]); i++)
{
priority[i] = atoi(argv[num_of_processes+2]);
}
//create a new memory object for data array
fd = shm_open("buffer", O_RDWR | O_CREAT, 0777);
if (fd ==-1)
{
fprintf(stderr, "shm_open: open failed: %s\n", strerror(errno));
return EXIT_FAILURE;
}
//set the memory object's size
if(ftruncate(fd, SIZE) == -1)
{
fprintf(stderr, "ftruncate: %s\n", strerror(errno));
return EXIT_FAILURE;
}
//map the memory object
buffer = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.