sched2.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 <unistd.h>
#include <sys/stat.h>
#define MAX_NUM_OF_PROCESSES 10
int main( int argc, char *argv[])
{
int i, policy, num_of_processes;
int pid [MAX_NUM_OF_PROCESSES];
int priority[MAX_NUM_OF_PROCESSES];
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]);
}
num_of_processes = atoi(argv[1]);
system("ps -l");
sleep(2);
for( i =0; i < num_of_processes; i++)
{
pid[i] = spawnl( P_NOWAIT, "./prog", "prog", NULL );
param.sched_priority = priority[i];
sched_setparam(pid[i], ¶m);
sched_setscheduler(pid[i], policy, ¶m);
}
sleep(20);
system("ps -l");
for (i =0; i < num_of_processes; i++)
{
kill(pid[i], SIGKILL);
}
return EXIT_SUCCESS;
}
prog2.c
#include <stdlib.h>
#include <stdio.h>
int main( int argc, char *argv[])
{
while(1){};
return EXIT_SUCCESS;
}
Анализ правильной работы дисциплины планирования осуществлялся по общему времени работы каждого процесса.
Примеры работы:
./sched2 3 1 45 50 45
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000000 - 0 725028 561180 - 63 0 - 600K - ? 00:00:00 ./sched
00000000 - 0 741413 725028 - 45 0 - 536K - ? 00:00:00 prog
00000000 - 0 741414 725028 - 50 0 - 600K - ? 00:00:20 prog
00000000 - 0 741415 725028 - 45 0 - 600K - ? 00:00:00 prog
Дисциплина планирования FIFO, 1 процесс (наивысший приоритет) занял все отведенное время процессора.
./sched2 3 1 45 30 45
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000000 - 0 815247 561190 - 63 0 - 600K - ? 00:00:00 ./sched
00000000 - 0 831531 815247 - 45 0 - 536K - ? 00:00:20 prog
00000000 - 0 831532 815247 - 30 0 - 600K - ? 00:00:00 prog
00000000 - 0 831533 815247 - 45 0 - 600K - ? 00:00:00 prog
Дисциплина планирования FIFO, 0 процесс занял все отведенное время процессора (стоял в очереди первый на исполнение).
./sched2 3 2 45 30 45
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000000 - 0 815140 561184 - 63 0 - 600K - ? 00:00:00 ./sched
00000000 - 0 831525 815140 - 45 0 - 536K - ? 00:00:10 prog
00000000 - 0 831526 815140 - 30 0 - 600K - ? 00:00:00 prog
00000000 - 0 831527 815140 - 45 0 - 600K - ? 00:00:10 prog
Дисциплина планирования RR, процессорное время поровну распередилилось между 0 и 2 процессом.
./sched2 3 2 45 30
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
00000000 - 0 578142 418425 - 63 0 - 600K - ? 00:00:00 ./sched
00000000 - 0 612547 578142 - 45 0 - 536K - ? 00:00:20 prog
00000000 - 0 612548 578142 - 30 0 - 600K - ? 00:00:00 prog
00000000 - 0 612549 578142 - 30 0 - 600K - ? 00:00:00 prog
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.