Added Endsem Questions
This commit is contained in:
parent
6ff1894732
commit
d46358f2da
2 changed files with 169 additions and 0 deletions
48
OS/endsem/bashq.sh
Normal file
48
OS/endsem/bashq.sh
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ask for the directory
|
||||||
|
echo "Enter directory path:"
|
||||||
|
read dir
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo ""
|
||||||
|
echo "Menu:"
|
||||||
|
echo "1. Convert .txt files to .py in $dir"
|
||||||
|
echo "2. List ownership properties (ls -l) of all files in $dir"
|
||||||
|
echo "3. Count .sh files and subdirectories in $dir"
|
||||||
|
echo "4. Exit"
|
||||||
|
echo -n "Choose an option: "
|
||||||
|
read option
|
||||||
|
|
||||||
|
case $option in
|
||||||
|
1)
|
||||||
|
for file in "$dir"/*.txt; do
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
new="${file%.txt}.py"
|
||||||
|
mv "$file" "$new"
|
||||||
|
echo "Renamed: $file -> $new"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
ls -l "$dir"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
# Count .sh files in the given directory (errors hidden if none found)
|
||||||
|
sh_count=$(ls -1 "$dir"/*.sh 2>/dev/null | wc -l)
|
||||||
|
# Count subdirectories (using a trailing slash pattern)
|
||||||
|
dir_count=$(ls -d "$dir"/*/ 2>/dev/null | wc -w)
|
||||||
|
echo ".sh file count: $sh_count"
|
||||||
|
echo "Subdirectory count: $dir_count"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
echo "Exiting..."
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option. Please try again."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Bye!"
|
121
OS/endsem/cq.c
Normal file
121
OS/endsem/cq.c
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#define MAX_PROC 10
|
||||||
|
#define MAX_REF 100
|
||||||
|
#define MAX_FRAMES 10
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int id; // Process ID
|
||||||
|
int frames; // Number of frames for this process
|
||||||
|
int n; // Number of page references
|
||||||
|
int ref[MAX_REF]; // Array of page references
|
||||||
|
int faults; // Page faults counter
|
||||||
|
} Process;
|
||||||
|
|
||||||
|
Process procs[MAX_PROC];
|
||||||
|
int proc_count = 0;
|
||||||
|
|
||||||
|
void *simulateOptimal(void *arg) {
|
||||||
|
Process *p = (Process *)arg;
|
||||||
|
int frameArr[MAX_FRAMES];
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
// Initialize frames as empty (-1)
|
||||||
|
for (i = 0; i < p->frames; i++) {
|
||||||
|
frameArr[i] = -1;
|
||||||
|
}
|
||||||
|
p->faults = 0;
|
||||||
|
|
||||||
|
// Process each page reference
|
||||||
|
for (i = 0; i < p->n; i++) {
|
||||||
|
int page = p->ref[i];
|
||||||
|
int found = 0;
|
||||||
|
// Check if page is already in a frame
|
||||||
|
for (j = 0; j < p->frames; j++) {
|
||||||
|
if (frameArr[j] == page) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
continue;
|
||||||
|
// Page fault occurs
|
||||||
|
p->faults++;
|
||||||
|
|
||||||
|
// Look for an empty frame (-1)
|
||||||
|
int empty = -1;
|
||||||
|
for (j = 0; j < p->frames; j++) {
|
||||||
|
if (frameArr[j] == -1) {
|
||||||
|
empty = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty != -1) {
|
||||||
|
frameArr[empty] = page;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No empty frame; choose a victim using Optimal algorithm:
|
||||||
|
int replace = 0, farthest = -1;
|
||||||
|
for (j = 0; j < p->frames; j++) {
|
||||||
|
int k, nextUse = INT_MAX;
|
||||||
|
for (k = i + 1; k < p->n; k++) {
|
||||||
|
if (frameArr[j] == p->ref[k]) {
|
||||||
|
nextUse = k;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nextUse > farthest) {
|
||||||
|
farthest = nextUse;
|
||||||
|
replace = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frameArr[replace] = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Process %d: Faults = %d\n", p->id, p->faults);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int i, j;
|
||||||
|
pthread_t threads[MAX_PROC];
|
||||||
|
|
||||||
|
// Input the number of processes
|
||||||
|
printf("Enter number of processes (max %d): ", MAX_PROC);
|
||||||
|
scanf("%d", &proc_count);
|
||||||
|
if (proc_count > MAX_PROC) proc_count = MAX_PROC;
|
||||||
|
|
||||||
|
// Input process details
|
||||||
|
for (i = 0; i < proc_count; i++) {
|
||||||
|
procs[i].id = i + 1;
|
||||||
|
printf("\nProcess %d:\n", procs[i].id);
|
||||||
|
printf("Enter number of frames (max %d): ", MAX_FRAMES);
|
||||||
|
scanf("%d", &procs[i].frames);
|
||||||
|
if (procs[i].frames > MAX_FRAMES) procs[i].frames = MAX_FRAMES;
|
||||||
|
printf("Enter number of page references (max %d): ", MAX_REF);
|
||||||
|
scanf("%d", &procs[i].n);
|
||||||
|
if (procs[i].n > MAX_REF) procs[i].n = MAX_REF;
|
||||||
|
printf("Enter %d page references (space separated): ", procs[i].n);
|
||||||
|
for (j = 0; j < procs[i].n; j++) {
|
||||||
|
scanf("%d", &procs[i].ref[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a thread for each process simulation
|
||||||
|
for (i = 0; i < proc_count; i++) {
|
||||||
|
pthread_create(&threads[i], NULL, simulateOptimal, &procs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int totalFaults = 0;
|
||||||
|
// Wait for all threads to complete
|
||||||
|
for (i = 0; i < proc_count; i++) {
|
||||||
|
pthread_join(threads[i], NULL);
|
||||||
|
totalFaults += procs[i].faults;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate and display average faults
|
||||||
|
printf("\nAverage Page Faults: %.2f\n", (float)totalFaults / proc_count);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue