From 447e01fbc33de86a664ab157bea2b45fd1f9b73c Mon Sep 17 00:00:00 2001 From: Wander_Lust Date: Thu, 14 May 2026 00:24:19 +0530 Subject: [PATCH] cooked --- 1.c | 81 ++++++++++++++++++++++++++++++++ 2.c | 82 ++++++++++++++++++++++++++++++++ 3.c | 54 +++++++++++++++++++++ 4.c | 80 +++++++++++++++++++++++++++++++ 5.c | 70 +++++++++++++++++++++++++++ dp | Bin 0 -> 16424 bytes mem | Bin 0 -> 16296 bytes memory_allocation.c | 112 ++++++++++++++++++++++++++++++++++++++++++++ pc | Bin 0 -> 16688 bytes pc_2 | Bin 0 -> 16392 bytes pcmsg | Bin 0 -> 16744 bytes rw | Bin 0 -> 16344 bytes 12 files changed, 479 insertions(+) create mode 100644 1.c create mode 100644 2.c create mode 100644 3.c create mode 100644 4.c create mode 100644 5.c create mode 100755 dp create mode 100755 mem create mode 100644 memory_allocation.c create mode 100755 pc create mode 100755 pc_2 create mode 100755 pcmsg create mode 100755 rw diff --git a/1.c b/1.c new file mode 100644 index 0000000..199529b --- /dev/null +++ b/1.c @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 5 + +struct shared{ + int buffer[BUFFER_SIZE]; + int in; + int out; +}; + +int main(){ + int n; + printf("\nhow many items to produce? "); + scanf("%d", &n); + + int shmid = shmget(IPC_PRIVATE, sizeof(struct shared), IPC_CREAT | 0666); + struct shared* s = (struct shared* )shmat(shmid, NULL, 0); + s->in = 0; + s->out = 0; + + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + sem_t *mutex = sem_open("/mutex", O_CREAT, 0644, 1); + sem_t *empty = sem_open("/empty", O_CREAT, 0644, BUFFER_SIZE); + sem_t *full = sem_open("/full", O_CREAT, 0644, 0); + + if(fork()==0){ + for(int i =1;i<=n;i++){ + sem_wait(empty); + sem_wait(mutex); + s->buffer[s->in] = i; + printf("produced: %d slot: %d\n", i, s->in); + s->in = (s->in+1)%BUFFER_SIZE; + + sem_post(mutex); + sem_post(full); + sleep(1); + + } + exit(0); + } + + if(fork()==0){ + for(int i =1;i<=n;i++){ + sem_wait(full); + sem_wait(mutex); + int item = s->buffer[s->out]; + printf("consumed: %d slot: %d\n", item, s->out); + s->out = (s->out+1)%BUFFER_SIZE; + + sem_post(mutex); + sem_post(empty); + sleep(2); + + } + exit(0); + } + wait(NULL); + wait(NULL); + + shmdt(s); + shmctl(shmid, IPC_RMID, NULL); + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + + return 0; + + + + + +} diff --git a/2.c b/2.c new file mode 100644 index 0000000..e9027e5 --- /dev/null +++ b/2.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct message{ + long type; + int data; +}; + +int main(){ + int n; + printf("How many items to produce? "); + scanf("%d", &n); + + int msgid = msgget(IPC_PRIVATE, O_CREAT | 0666); + + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + + sem_t *mutex = sem_open("/mutex", O_CREAT, 0644,1); + sem_t *empty = sem_open("/empty", O_CREAT, 0644,n); + sem_t *full = sem_open("/full", O_CREAT, 0644,0); + + if(fork() == 0){ + struct message msg; + msg.type = 1; + + for(int i =1;i<=n;i++){ + sem_wait(empty); + sem_wait(mutex); + + msg.data = i; + msgsnd(msgid, &msg, sizeof(msg.data), 0); + printf("Produced: %d\n", i); + + sem_post(full); + sem_post(mutex); + sleep(1); + + } + exit(0); + } + + if(fork() == 0){ + struct message msg; + + + for(int i =1;i<=n;i++){ + sem_wait(full); + sem_wait(mutex); + + msgrcv(msgid, &msg, sizeof(msg.data),1, 0); + printf("Consumed: %d\n", msg.data); + + sem_post(empty); + sem_post(mutex); + sleep(2); + + } + exit(0); + } + wait(NULL); + wait(NULL); + + msgctl(msgid, IPC_RMID, NULL); + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + + printf("\nDOne\n"); + return 0; + +} + + diff --git a/3.c b/3.c new file mode 100644 index 0000000..acebbd4 --- /dev/null +++ b/3.c @@ -0,0 +1,54 @@ +#include +#include +#include + +int main(){ + int read_count = 0; + int data= 0; + + sem_unlink("/mutex"); sem_unlink("/wrt"); + sem_t *mutex = sem_open("/mutex", O_CREAT, 0644, 1); + sem_t *wrt = sem_open("/wrt", O_CREAT, 0644, 1); + + int choice; + while(1){ + printf("\n1.Read"); + printf("\n2.Write"); + printf("\n3.exit"); + printf("\nEnter the choice: "); + scanf("%d", &choice); + + if(choice ==1){ + sem_wait(mutex); + read_count++; + if(read_count==1) + sem_wait(wrt); + sem_post(mutex); + + printf("read data: %d | Active readers: %d", data, read_count); + + sem_wait(mutex); + read_count--; + if(read_count==0) + sem_post(wrt); + sem_post(mutex); + } + else if(choice ==2){ + sem_wait(wrt); + data+=10; + printf("wrote data: %d", data); + sem_post(wrt); + }else{ + break; + } + + } + sem_close(mutex); + sem_close(wrt); + sem_unlink("/mutex"); + sem_unlink("/wrt"); + + + + return 0; +} diff --git a/4.c b/4.c new file mode 100644 index 0000000..7868d17 --- /dev/null +++ b/4.c @@ -0,0 +1,80 @@ +#include +#include +#include + +int main(){ + int n, phil, ch; + printf("Enter number of philosophers: "); + scanf("%d", &n); + + int eating[n]; + for(int i =0;i +#include +#include + +int main(){ + int n; + printf("\nENter buffer size: "); + scanf("%d", &n); + + int buffer[n]; + int in =0, out= 0; + + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + + sem_t *mutex = sem_open("/mutex", O_CREAT, 0644, 1); + sem_t *empty = sem_open("/empty", O_CREAT, 0644, n); + sem_t *full = sem_open("/full", O_CREAT, 0644, 0); + + int ch, item; + while(1){ + printf("\n--- Producer Consumer ---"); + printf("\n1. Produce (Write)"); + printf("\n2. Consume (Read)"); + printf("\n3. Exit"); + printf("\nEnter choice: "); + scanf("%d", &ch); + + if(ch==1){ + printf("\nEnter item to write: "); + scanf("%d", &item); + + sem_wait(empty); + sem_wait(mutex); + buffer[in]= item; + printf("\nProduced: %d at buffer[%d]", item, in); + in = (in+1)%n; + sem_post(mutex); + sem_post(full); + + } + + else if(ch==2){ + + sem_wait(full); + sem_wait(mutex); + item = buffer[out]; + printf("\nconsumed: %d at buffer[%d]", item, out); + out = (out+1)%n; + sem_post(mutex); + sem_post(empty); + + } + + else if (ch == 3) { + break; + } + else { + printf("Invalid choice\n"); + } + + } + + sem_close(mutex); sem_close(full); sem_close(empty); + sem_unlink("/mutex"); + sem_unlink("/empty"); + sem_unlink("/full"); + return 0; +} diff --git a/dp b/dp new file mode 100755 index 0000000000000000000000000000000000000000..cd586d6a9623729148d5ba8ae943dbcc928ba146 GIT binary patch literal 16424 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 TEq@Ey-})t`af8di#fpCdi4_&* literal 0 HcmV?d00001 diff --git a/mem b/mem new file mode 100755 index 0000000000000000000000000000000000000000..5edd6056bb1c3c0e41ec6ab92deff380caf2d79a GIT binary patch literal 16296 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 literal 0 HcmV?d00001 diff --git a/memory_allocation.c b/memory_allocation.c new file mode 100644 index 0000000..91c4c84 --- /dev/null +++ b/memory_allocation.c @@ -0,0 +1,112 @@ +#include +#include + +#define MAX 25 + +void firstFit(int blocks[], int m, int process[], int n) { + int alloc[MAX]; + memset(alloc, -1, sizeof(alloc)); + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (blocks[j] >= process[i]) { + alloc[i] = j; + blocks[j] -= process[i]; + break; // first block that fits, stop + } + } + } + + printf("\n--- First Fit ---\n"); + printf("Process\tSize\tBlock\n"); + for (int i = 0; i < n; i++) { + if (alloc[i] == -1) + printf("P%d\t%d\tNot Allocated\n", i+1, process[i]); + else + printf("P%d\t%d\tBlock %d\n", i+1, process[i], alloc[i]+1); + } +} + +void bestFit(int blocks[], int m, int process[], int n) { + int alloc[MAX]; + memset(alloc, -1, sizeof(alloc)); + + for (int i = 0; i < n; i++) { + int bestIdx = -1; + for (int j = 0; j < m; j++) { + if (blocks[j] >= process[i]) { + // pick the smallest block that still fits + if (bestIdx == -1 || blocks[j] < blocks[bestIdx]) + bestIdx = j; + } + } + if (bestIdx != -1) { + alloc[i] = bestIdx; + blocks[bestIdx] -= process[i]; + } + } + + printf("\n--- Best Fit ---\n"); + printf("Process\tSize\tBlock\n"); + for (int i = 0; i < n; i++) { + if (alloc[i] == -1) + printf("P%d\t%d\tNot Allocated\n", i+1, process[i]); + else + printf("P%d\t%d\tBlock %d\n", i+1, process[i], alloc[i]+1); + } +} + +void worstFit(int blocks[], int m, int process[], int n) { + int alloc[MAX]; + memset(alloc, -1, sizeof(alloc)); + + for (int i = 0; i < n; i++) { + int worstIdx = -1; + for (int j = 0; j < m; j++) { + if (blocks[j] >= process[i]) { + // pick the largest block + if (worstIdx == -1 || blocks[j] > blocks[worstIdx]) + worstIdx = j; + } + } + if (worstIdx != -1) { + alloc[i] = worstIdx; + blocks[worstIdx] -= process[i]; + } + } + + printf("\n--- Worst Fit ---\n"); + printf("Process\tSize\tBlock\n"); + for (int i = 0; i < n; i++) { + if (alloc[i] == -1) + printf("P%d\t%d\tNot Allocated\n", i+1, process[i]); + else + printf("P%d\t%d\tBlock %d\n", i+1, process[i], alloc[i]+1); + } +} + +int main() { + int m, n; + int blocks[MAX], process[MAX]; + int b1[MAX], b2[MAX], b3[MAX]; + + printf("Enter number of memory blocks: "); + scanf("%d", &m); + printf("Enter block sizes: "); + for (int i = 0; i < m; i++) { + scanf("%d", &blocks[i]); + b1[i] = b2[i] = b3[i] = blocks[i]; // each strategy gets a fresh copy + } + + printf("Enter number of processes: "); + scanf("%d", &n); + printf("Enter process sizes: "); + for (int i = 0; i < n; i++) + scanf("%d", &process[i]); + + firstFit(b1, m, process, n); + bestFit (b2, m, process, n); + worstFit(b3, m, process, n); + + return 0; +} diff --git a/pc b/pc new file mode 100755 index 0000000000000000000000000000000000000000..681ec6ae882d839058778a275c942eedfc95b4b5 GIT binary patch literal 16688 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 literal 0 HcmV?d00001 diff --git a/pcmsg b/pcmsg new file mode 100755 index 0000000000000000000000000000000000000000..582837f3d53d008b245e2872513404ad8bb93e44 GIT binary patch literal 16744 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 literal 0 HcmV?d00001 diff --git a/rw b/rw new file mode 100755 index 0000000000000000000000000000000000000000..b6ac90386f9b47fc3e47c5a85c2c94616e8fc50b GIT binary patch literal 16344 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