#include #include #define N 6 int OZNAKA_CEKANJA[N]; int PRIORITET[N]; int TEKUCI_PRIORITET; int sig[]={SIGUSR1, SIGUSR2, SIGILL, SIGCONT, SIGCHLD, SIGINT}; void zabrani_prekidanje(){ int i; for(i=0;i<5;i++) sighold(sig[i]); } void dozvoli_prekidanje(){ int i; for(i=0;i<5;i++) sigrelse(sig[i]); } void obrada_prekida(int i){ switch(i){ case 1: printf("-P----\n"); printf("-1----\n"); sleep(1); printf("-2----\n"); sleep(1); printf("-3----\n"); sleep(1); printf("-4----\n"); sleep(1); printf("-5----\n"); sleep(1); printf("-K----\n"); break; case 2: printf("--P---\n"); printf("--1---\n"); sleep(1); printf("--2---\n"); sleep(1); printf("--3---\n"); sleep(1); printf("--4---\n"); sleep(1); printf("--5---\n"); sleep(1); printf("--K---\n"); break; case 3: printf("---P--\n"); printf("---1--\n"); sleep(1); printf("---2--\n"); sleep(1); printf("---3--\n"); sleep(1); printf("---4--\n"); sleep(1); printf("---5--\n"); sleep(1); printf("---K--\n"); break; case 4: printf("----P-\n"); printf("----1-\n"); sleep(1); printf("----2-\n"); sleep(1); printf("----3-\n"); sleep(1); printf("----4-\n"); sleep(1); printf("----5-\n"); sleep(1); printf("----K-\n"); break; case 5: printf("-----P\n"); printf("-----1\n");sleep(1); printf("-----2\n");sleep(1); printf("-----3\n");sleep(1); printf("-----4\n");sleep(1); printf("-----5\n");sleep(1); printf("-----K\n"); break; case 6: printf("Killed\n"); break; } } void prekidna_rutina(int sig){ int n=1,j,m; zabrani_prekidanje(); switch (sig){ case SIGUSR1: n=1; printf("-X----\n"); break; case SIGUSR2: n=2; printf("--X---\n"); break; case SIGILL: n=3; printf("---X--\n"); break; case SIGCONT: n=4; printf("----X-\n"); break; case SIGCHLD: n=5; printf("-----X\n"); break; case SIGINT: n=6; printf("^C-----X\n"); break; } OZNAKA_CEKANJA[n]=1; while(1){ for(j=0;j<5;j++) if(OZNAKA_CEKANJA[j]!=0&&j>TEKUCI_PRIORITET) m=j; OZNAKA_CEKANJA[j]=0; PRIORITET[j]=TEKUCI_PRIORITET; TEKUCI_PRIORITET=j; dozvoli_prekidanje(); obrada_prekida(j); zabrani_prekidanje(); TEKUCI_PRIORITET=PRIORITET[j]; } dozvoli_prekidanje(); } int main(){ sigset(SIGUSR1,prekidna_rutina); sigset(SIGUSR2,prekidna_rutina); sigset(SIGILL,prekidna_rutina); sigset(SIGCONT,prekidna_rutina); sigset(SIGCHLD,prekidna_rutina); sigset(SIGINT,prekidna_rutina); printf("Proces obrade prekida,PID= %d\n",getpid()); printf("G 12345\n"); printf("-------\n"); printf("1 -----\n"); printf("2 -----\n"); printf("3 -----\n"); printf("4 -----\n"); sleep(10); printf("Zavrsio osnovni program\n"); return(0); }