Implement page replacement algorithms a) FIFO b) LRU
a) FIFO
#!/bin/bash
# FIFO Page Replacement Algorithm in Shell Script
pages=(7 0 1 2 0 3 0 4 2 3 0 3 2)
frames=3
frame_queue=()
page_faults=0
for page in "${pages[@]}"; do
# Check if page is already in frames
if [[ ! " ${frame_queue[@]} " =~ " ${page} " ]]; then
((page_faults++))
if [[ ${#frame_queue[@]} -eq $frames ]]; then
frame_queue=("${frame_queue[@]:1}") # Remove the first page (FIFO)
fi
frame_queue+=("$page")
fi
echo "Frames: ${frame_queue[*]}"
done
echo "Total Page Faults (FIFO): $page_faults"
b) LRU
#!/bin/bash
# LRU Page Replacement Algorithm in Shell Script
pages=(7 0 1 2 0 3 0 4 2 3 0 3 2)
frames=3
frame_queue=()
page_faults=0
for page in "${pages[@]}"; do
# Check if page is already in frames
if [[ ! " ${frame_queue[@]} " =~ " ${page} " ]]; then
((page_faults++))
if [[ ${#frame_queue[@]} -eq $frames ]]; then
frame_queue=("${frame_queue[@]:1}") # Remove the least recently used
fi
else
# Remove page and re-add to simulate recent use
frame_queue=("${frame_queue[@]/$page}")
fi
frame_queue+=("$page")
echo "Frames: ${frame_queue[*]}"
done
echo "Total Page Faults (LRU): $page_faults"
Implement Disk scheduling algorithms (a) Scan (b) C-Scan
a) Scan
#!/bin/bash
requests=(98 183 37 122 14 124 65 67)
head=53
direction="up"
# Sort the requests
sorted_requests=($(for r in "${requests[@]}"; do echo "$r"; done | sort -n))
# Find the position of the head in the sorted list
index=0
for i in "${!sorted_requests[@]}"; do
if [[ ${sorted_requests[i]} -ge $head ]]; then
index=$i
break
fi
done
echo "Head Movement (SCAN):"
if [[ $direction == "up" ]]; then
for ((i=index; i<${#sorted_requests[@]}; i++)); do
echo "${sorted_requests[i]}"
done
for ((i=0; i<index; i++)); do
echo "${sorted_requests[i]}"
done
else
for ((i=index-1; i>=0; i--)); do
echo "${sorted_requests[i]}"
done
for ((i=index; i<${#sorted_requests[@]}; i++)); do
echo "${sorted_requests[i]}"
done
fi
b) C-Scan
#!/bin/bash
requests=(98 183 37 122 14 124 65 67)
head=53
# Sort the requests
sorted_requests=($(for r in "${requests[@]}"; do echo "$r"; done | sort -n))
echo "Head Movement (C-SCAN):"
for ((i=index; i<${#sorted_requests[@]}; i++)); do
echo "${sorted_requests[i]}"
done
echo "0" # Jump to the start
for ((i=0; i<index; i++)); do
echo "${sorted_requests[i]}"
done