Posts

Showing posts from December, 2024

SJF

  // SJF code #include <stdio.h>    #include <limits.h> #define NUM_PROCESSES 5 void sortProcesses (int at [ ], int bt [ ], int p[ ], int n) { for (int i = 0; i < n - 1; i++) { for (int j =0; j < n - i - 1; j++) { if ( at[ j ] > at[ j + 1] ) { int temp = at[ j ]; at[ j ] = at[j + 1]; at[ j+1]= temp; temp = bt[ j ]; bt[ j ] = bt[ j + 1]; bt[ j+1 ]= temp; temp = p[j]; p[j] = p[j + 1]; p[j+1]= temp;    } } } } int main() { int p[NUM_PROCESSES] = {1, 2, 3, 4, 5}; int at[NUM_PROCESSES] = {2, 1, 4, 0, 2}; int bt[NUM_PROCESSES] = {1, 5, 1, 6, 3}; int ct[NUM_PROCESSES] = {0}; int tat[NUM_PROCESSES] = {0}; int wt[NUM_PROCESSES] = {0}; int rt[NUM_PROCESSES] = {0}; int isCompleted[NUM_PROCESSES]={0}; int time = 0, completed = 0; float avg_tate = 0, avg_wt = 0, avg_rt = 0; sortProcesses(at, bt, p, NUM_PROCESSES); while (completed < NUM_PROCESSES) { int idx = -1; int min_bt = INT_MAX; for (...

RR

  // RR   #include <stdio.h> struct Process { int pid, arrival, burst, remaining, completion, turnaround, waiting, response;    }; void roundRobinScheduling(struct Process p[ ], int n, int quantum) { int currentTime=0, completed=0, visited[n]; for (int i = 0; i < n; i++) visited[i] = 0; while (completed <n) (     int idle 1; for (int i=0; i<n; 1++) {     if (p[ i ].remaining>0 && p[ i ].arrival <= currentTime) { idle=0;        if (!visited[i]) ( p[i].response = currentTime - p[i].arrival; visited[i] =1;} if (p[i].remaining >quantum) {     currentTime += quantum; p[i].remaining -= quantum;    } else { currentTime += p[i].remaining; p[i].completion = currentTime; p[i].remaining =0;        completed++;    }   }   } if (idle) currentTime++;     } for (int...

READER WRITER SEMAPHORE

  // READER WRITER SEMAPHORE #include <stdio.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h> int shared_data = 0; int read_count = 0; sem_t wrt;                  pthread_mutex_t mutex;       void *writer(void *writer_id) { int id = *(int *)writer_id; sem_wait(&wrt);       shared_data += 1;   printf("Writer %d modified shared_data to %d\n", id, shared_data); sem_post(&wrt);       return NULL; }   void *reader(void *reader_id) { int id = *(int *)reader_id; pthread_mutex_lock(&mutex);   read_count++;                 if (read_count == 1)          sem_wait(&wrt);   pthread_mutex_unlock(&mutex); ...

Producer-Consumer Problem (pthread)

  // Producer-Consumer Problem #include <stdio.h> #include <pthread.h> #define BUFFER_SIZE 5 int buffer = 0; // Single shared buffer pthread_mutex_t mutex; void producer() { pthread_mutex_lock(&mutex);     if (buffer < BUFFER_SIZE)     {              // Check if buffer is not full         buffer++; // Produce (increment)         printf("Producer produced, buffer: %d\n", buffer);     }   else     {   printf("Buffer is full, cannot produce.\n");      }     pthread_mutex_unlock(&mutex); } void consumer() {     pthread_mutex_lock(&mutex);     if (buffer > 0)     {              // Check if...

Producer consumer (mutex)

  // Producer consumer (mutex)… #include<stdio.h>             #include<conio.h> Int mutex =1;                    Int full =0; Int empty =10;                  Int data=0; Void producer() { --mutex;     ++ full;    --empty;       Data++;   Printf(“ producer item number %d\n”,data);   Mutex++;                      }Void consumer() {    --mutex;           --full;          ++empty; Printf(“consumer consume item %d\n”,data); Data--;          ...

Priority scheduling

  // Priority scheduling   #include <stdio.h> struct Process { int pid, arrival, burst, priority, completion, turnaround, waiting, response;}; void sortProcesses (struct Process p[], int n) { for (int i = 0; i<n-1; i++) { for (int j=0; j < n - i – 1;j++) { if (p[j].arrival > p[j + 1] .arrival || (p[j].arrival == p[j + 1] .arrival && p[j].priority > p[j+1].priority)) struct Process temp = p[j]; p[j] = p[j + 1];p[j+1]= temp;    }}}} void calculateTimes(struct Process p[], int n) { int currentTime = 0, completed = 0, visited[n]; for (int i=0; i < n; i++) visited[i] = 0; while (completed < n) { int idx = -1, minPriority=1e9; for (int = 0; i < n; i++) { if (!visited[i] && p[1].arrival <= currentTime && p[i].priority < minPriority){   idx = i;             minPriority = p[i].priority;    }} if (idx != -1) {  ...

LRU

  // LRU #include <stdio.h>     #include <stdlib.h> #define FRAME_SIZE 3       #define PAGE_COUNT 10 int isPageInMemory(int page, int frames[], int frameCount) {   for (int i = 0; i < frameCount; i++) {        if (frames[i] == page) {   return 1;    }      }      return 0;    } int getLRUIndex(int time[], int frameCount) {   int min = time[0], index = 0;   for (int i = 1; i < frameCount; i++) {     if (time[i] < min) {      min = time[i];   index = i;   }     }        return index;    } void lruPageReplacement(int pages[], int pageCount) {   int frames[FRAME_SIZE];      int time[FRAME_SIZE];      int pageFaults = 0;   for (int i = 0; i < FRAME_SIZE; i++) {     ...

FORK

  // FORK #include<stdio.h> #include<stdlid.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> int main()       { pid_t pid; pid = fork();       if (pid < 0) { perror("Fork failed"); exit(EXIT_FAILURE); } else if (pid == 0) { printf("Child process: PID = %d\n", getpid()); execlp("/bin/ls", "ls", "-l", NULL); perror("exec failed"); exit(EXIT_FAILURE);     } else { printf("Parent process: PID = %d,             waiting for child...\n", getpid()); wait(NULL); printf("Child process finished.\n"); } return 0; }

FIFO PAGE REPLACEMENT

  // FIFO PAGE REPLACEMENT #include <stdio.h>   #include <stdlib.h> #define FRAME_SIZE 3    #define PAGE_COUNT 10 int isPageInMemory(int page, int frames[], int frameCount) {   for (int i = 0; i < frameCount; i++) {   if (frames[i] == page) {    return 1;     }     }      return 0;    } void fifoPageReplacement(int pages[], int pageCount) {   int frames[FRAME_SIZE];      int frameIndex = 0;       int pageFaults = 0; for (int i = 0; i < FRAME_SIZE; i++) {      frames[i] = -1;     }   printf("Page Reference:\n");   for (int i = 0; i < pageCount; i++) {      printf("%d ", pages[i]);   if (!isPageInMemory(pages[i], frames, FRAME_SIZE)) {    pageFaults++;   frames[frameIndex] = pages[i];   frameIndex = (frameIndex + 1) % FRAME_SIZE;   pr...

FCFS DYNAMIC

  // FCFS DYNAMIC #include <stdio.h> int main() { int n = 5; int i, j; int AT[5], BT [5], CT[5], TAT [5], WT [5]; int total_TAT = 0, total_WT = 0; float avg _TAT, avg_WT; printf("Enter Arrival Time and Burst Time for 5 processes: \n"); for ( i = 0 ; i < n; i++) { printf("Process %d:\n", i + 1 ) ; printf("Arrival Time: "); scanf("%d", &AT[i]); printf("Burst Time: "); scanf("%d", &BT[i]); } for ( i = 0 ; i<n-1; i++) { for (j = i + 1) j<n; j++) { if (AT[i] > AT[j]) { int temp AT[i]; AT[i] =AT[J]; AT[j] = temp;   temp = BT[i]; BT[i] = BT[j]; BT[j]= temp; }}} CT[0] = AT[0] + BT[0]; for (i=1; i < n; i++) { if (AT[i] > CT[i - 1]) {    CT[i] = AT[i] + BT[i]; } else { CT[i] = CT[i - 1] + BT[i]; }} for (i = 0 ; i <n; i++) { TAT [i]= CT[i] -AT[i]; WT(i) = TAT(i) – BT[i] ; total_TAT += TAT[i]; total_WT += WT[i]; } avg _TAT =(...

FCFS Static code

    // FCFS Static code…. #include<stdio.h>    #include<unistd.h>    int main() {               int n = 5; int i, j; int AT[5] = {0, 2, 4, 6, 8};          int BT[5] = {3, 6, 4, 5, 2}; int CT[5], TAT[5], WT[5]; int total_TAT = 0, total_WT = 0; float avg_TAT, avg_WT; printf("Process\tAT\tBT\n"); for ( i = 0 ; i < n; i++) { printf("P%d\t%d\t%d\n", i + 1,AT[i], BT[i]);   } sleep(3);   for (i=0; i < n – 1; i++) {   for ( j = i + 1 ; j<n; j++) {   if (AT[i] > AT[j]) {   int temp=AT[i]; AT[i]=AT[j]; AT[j] = temp;   temp=BT[i]; BT[i]=BT[j]; BT[j] = temp;   }   }   } CT[0]=AT[0] + BT[0]; for ( i = 1; i < n ;i++ ) {   if(AT[i] > CT[i - 1]) { CT[1] = AT[i] + BT[i]; }else{ CT[i] = CT[i - 1] + BT[i]; }}   for ( i = 0; i < n ;i++) { ...