Final ASR
Final ASR
1. mkdir images/
mkdir -p movies/2004/
2. ls
3. unalias ls
4. pwd
5. cd car
6. cp file_to_copy.txt new_file.txt
7. rm file_to_copy.txt
8. mv source_file destination_folder/
9. touch abc
11. exit
19. passwd
20. wc long.txt
23 . Word count
24. If Command
25. Case Command
#include <stdio.h>
#include <stdlib.h>
struct Process {
int pid, arrival, burst, completion, turnaround, waiting;
};
int main() {
int n;
printf("Enter number of processes: ");
scanf("%d", &n);
struct Process p[n];
for(int i = 0; i < n; i++) {
printf("Enter arrival time and burst time for process %d: ", i+1);
p[i].pid = i+1;
scanf("%d %d", &p[i].arrival, &p[i].burst);
}
printf("\nFCFS Scheduling:\n");
fcfs(p, n);
printf("PID\tAT\tBT\tCT\tTAT\tWT\n");
for(int i = 0; i < n; i++)
printf("%d\t%d\t%d\t%d\t%d\t%d\n", p[i].pid, p[i].arrival, p[i].burst,
p[i].completion, p[i].turnaround, p[i].waiting);
printf("\nSJF Scheduling:\n");
sjf(p, n);
printf("PID\tAT\tBT\tCT\tTAT\tWT\n");
for(int i = 0; i < n; i++)
printf("%d\t%d\t%d\t%d\t%d\t%d\n", p[i].pid, p[i].arrival, p[i].burst,
p[i].completion, p[i].turnaround, p[i].waiting);
return 0;
}
Experiment 3: Priority and Multi-level Queue
Scheduling
#include <stdio.h>
#include <stdlib.h>
struct Process {
int pid, arrival, burst, priority, completion, turnaround, waiting;
};
while(completed != n) {
int highest = -1, maxPriority = -1;
for(int i = 0; i < n; i++) {
if(p[i].arrival <= currentTime && !isCompleted[i] && p[i].priority >
maxPriority) {
maxPriority = p[i].priority;
highest = i;
}
}
if(highest == -1) {
currentTime++;
} else {
p[highest].completion = currentTime + p[highest].burst;
p[highest].turnaround = p[highest].completion - p[highest].arrival;
p[highest].waiting = p[highest].turnaround - p[highest].burst;
currentTime = p[highest].completion;
isCompleted[highest] = 1;
completed++;
}
}
}
int main() {
int n;
printf("Enter number of processes: ");
scanf("%d", &n);
priorityScheduling(p, n);
printf("\nPriority Scheduling:\n");
printf("PID\tAT\tBT\tPriority\tCT\tTAT\tWT\n");
for(int i = 0; i < n; i++)
printf("%d\t%d\t%d\t%d\t\t%d\t%d\t%d\n", p[i].pid, p[i].arrival,
p[i].burst, p[i].priority, p[i].completion, p[i].turnaround, p[i].waiting);
return 0;
}
Experiment 4: Resource Allocation Graph (RAG)
#include <stdio.h>
#include <stdbool.h>
#define MAX_RESOURCES 10
#define MAX_PROCESSES 10
struct ResourceAllocationGraph {
int numProcesses;
int numResources;
int maxResources[MAX_RESOURCES];
int allocatedResources[MAX_RESOURCES];
int allocationMatrix[MAX_PROCESSES][MAX_RESOURCES];
bool finished[MAX_PROCESSES];
};
int main() {
struct ResourceAllocationGraph graph;
int processes, resources;
return 0;
}
Experiment 5: Banker's Algorithm
#include <stdio.h>
#include <stdbool.h>
#define MAX 10
int main() {
int n, m, i, j, k;
printf("Enter number of processes: ");
scanf("%d", &n);
printf("Enter number of resources: ");
scanf("%d", &m);
int count = 0;
while (count < n) {
bool found = false;
for (i = 0; i < n; i++) {
if (!finish[i]) {
for (j = 0; j < m; j++)
if (need[i][j] > avail[j])
break;
if (j == m) {
for (k = 0; k < m; k++)
avail[k] += alloc[i][k];
safeSeq[count++] = i;
finish[i] = true;
found = true;
}
}
}
if (!found) {
printf("System is not in safe state\n");
return 0;
}
}
return 0;
}
Experiment 6: RAG to WFG Conversion
#include <stdio.h>
#include <stdbool.h>
#define MAX 10
int main() {
int n, r;
printf("Enter number of processes: ");
scanf("%d", &n);
printf("Enter number of resources: ");
scanf("%d", &r);
return 0;
}
Experiment 7: System Calls Implementation
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
pid_t pid;
int fd, status;
// Directory operations
printf("\n3. Directory Operations\n");
if (mkdir("testdir", 0755) == 0) {
printf("Directory created successfully\n");
rmdir("testdir");
printf("Directory removed successfully\n");
}
return 0;
}
Experiment 8: Contiguous Allocation Techniques
#include <stdio.h>
#define MAX 25
int main() {
int blockSize[] = {100, 500, 200, 300, 600};
int processSize[] = {212, 417, 112, 426};
int m = sizeof(blockSize) / sizeof(blockSize[0]);
int n = sizeof(processSize) / sizeof(processSize[0]);
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#define BUFFER_SIZE 5
buffer[in] = item;
printf("Producer produced: %d at position %d\n", item, in);
in = (in + 1) % BUFFER_SIZE;
sem_post(&mutex);
sem_post(&full);
sleep(1);
}
return NULL;
}
item = buffer[out];
printf("Consumer consumed: %d from position %d\n", item, out);
out = (out + 1) % BUFFER_SIZE;
sem_post(&mutex);
sem_post(&empty);
sleep(2);
}
return NULL;
}
int main() {
pthread_t prod, cons;
sem_init(&empty, 0, BUFFER_SIZE);
sem_init(&full, 0, 0);
sem_init(&mutex, 0, 1);
pthread_join(prod, NULL);
pthread_join(cons, NULL);
sem_destroy(&empty);
sem_destroy(&full);
sem_destroy(&mutex);
return 0;
}
Experiment 10: Readers-Writers Problem
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
sem_wait(&mutex);
rcount++;
if (rcount == 1)
sem_wait(&writeblock);
sem_post(&mutex);
sem_wait(&mutex);
rcount--;
if (rcount == 0)
sem_post(&writeblock);
sem_post(&mutex);
return NULL;
}
sem_wait(&writeblock);
data++;
printf("Writer %d wrote data: %d\n", f, data);
sleep(1);
sem_post(&writeblock);
return NULL;
}
int main() {
pthread_t readers[3], writers[2];
int reader_ids[3] = {1, 2, 3};
int writer_ids[2] = {1, 2};
sem_init(&mutex, 0, 1);
sem_init(&writeblock, 0, 1);
sem_destroy(&mutex);
sem_destroy(&writeblock);
return 0;
}