Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
9 views40 pages

Program 5

The document discusses various page replacement algorithms including FIFO, LRU, LFU, and Optimal Page Replacement, emphasizing their mechanisms and performance in minimizing page faults. It provides detailed examples and Python code implementations for FIFO and LRU, along with a brief overview of LFU. The document also highlights Belady's Anomaly, where increasing the number of frames can paradoxically lead to more page faults.

Uploaded by

kvlbhavya333
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views40 pages

Program 5

The document discusses various page replacement algorithms including FIFO, LRU, LFU, and Optimal Page Replacement, emphasizing their mechanisms and performance in minimizing page faults. It provides detailed examples and Python code implementations for FIFO and LRU, along with a brief overview of LFU. The document also highlights Belady's Anomaly, where increasing the number of frames can paradoxically lead to more page faults.

Uploaded by

kvlbhavya333
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 40

PROGRAM 5

Simulate the page replacement algorithms a) FIFO


b) LRU c) LFU d) Optimal Page Replacement

❖ Page replacement is done to get the lowest page fault rate.


❖ Algorithm is evaluated by running it on a reference string and
computing the number of page faults on the string.
PAGE FAULT vs NUMBER OF FRAMES - GRAPH
❖ Some page replacement algorithms are:
➢ First In First Out
➢ Least Recently Used
➢ Least Frequently Used
➢ Optimal Page Replacement

1. FIRST IN FIRST OUT (FIFO)


❖ Simplest algorithm
❖ During page replacement it chooses the oldest page
❖ Easy to understand
❖ Performance is not always good.
❖ If active page is replaced, page fault occurs and increases.

BELADY’S ANOMALY
Normally, the number of page faults decreases with increased frames.
But the number of page faults increases. This is Belady’s Anomaly.
EXAMPLE
Reference string: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

Step 1
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.

Step 2
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.

0
Step 3
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.

Step 4
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.
Page 7 is replaced by Page 2 as it entered first.

1
Step 5
Page 0 is referred. It is already present in the memory.

Step 6
Page 3 is referred. It is not present in the memory. Page fault has
occurred. We load page 3 from secondary memory to main memory.
Page 0 is replaced by Page 3 as it entered first.

1
Step 7
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.
Page 1 is replaced by Page 0 as it entered first.

Step 8
Page 4 is referred. It is not present in the memory. Page fault has
occurred. We load page 4 from secondary memory to main memory.
Page 2 is replaced by Page 4 as it entered first.

0
Step 9
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.
Page 3 is replaced by Page 2 as it entered first.

Step 10
Page 3 is referred. It is not present in the memory. Page fault has
occurred. We load page 3 from secondary memory to main memory.Page
0 is replaced by Page 3 as it entered first.

3
Step 11
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.
Page 4 is replaced by Page 0 as it entered first.

Step 12
Page 3 is referred. It is already present in the memory.

Step 13
Page 2 is referred. It is already present in the memory.

3
Step 14
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.
Page 2 is replaced by Page 1 as it entered first.

Step 15
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.Page
3 is replaced by Page 2 as it entered first.

3
Step 16
Page 0 is referred. It is already present in the memory.

2
Step 17
Page 1 is referred. It is already present in the memory.

Step 18
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.Page
0 is replaced by Page 7 as it entered first.

2
Step 19
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.Page
1 is replaced by Page 0 as it entered first.

Step 20
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.Page
2 is replaced by Page 1 as it entered first.

With three frames, the number of page faults are: 15


PYTHON CODE IMPLEMENTATION FOR FIRST IN FIRST
OUT PAGE REPLACEMENT TECHNIQUE
from queue import Queue
def pageFaults(pages, n, capacity):
s = set()
indexes = Queue()
page_faults = 0
for i in range(n):
if (len(s) < capacity):
if (pages[i] not in s):
s.add(pages[i])
page_faults += 1
indexes.put(pages[i])
else:
if (pages[i] not in s):
val = indexes.queue[0]
indexes.get()
s.remove(val)
s.add(pages[i])
indexes.put(pages[i])
page_faults += 1

return page_faults
if __name__ == '__main__':
pages = [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1]
n = len(pages)
capacity = 3
print("The number of page faults are:")
print(pageFaults(pages, n, capacity))

OUTPUT

2. LEAST RECENTLY USED (LRU)


❖ LRU looks backward in time
❖ It requires previous information
❖ Replace the page that is last used

EXAMPLE
Reference string: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

Step 1
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.

Step 2
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.

Step 3
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.

Step 4
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.
Page 7 is replaced by Page 2 as it is last referred.

1
Step 5
Page 0 is referred. It is already present in the memory.

Step 6
Page 3 is referred. It is not present in the memory. Page fault has
occurred. We load page 3 from secondary memory to main memory.
Page 1 is replaced by Page 3 as it is last referred.

Step 7
Page 0 is referred. It is already present in the memory.

Step 8
Page 4 is referred. It is not present in the memory. Page fault has
occurred. We load page 4 from secondary memory to main memory.
Page 2 is replaced by Page 4 as it is last referred.

3
Step 9
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.
Page 3 is replaced by Page 2 as it is last referred.

Step 10
Page 3 is referred. It is not present in the memory. Page fault has
occurred. We load page 3 from secondary memory to main memory.Page
0 is replaced by Page 3 as it is last referred.

Step 11
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.
Page 4 is replaced by Page 0 as it is last referred.

Step 12
Page 3 is referred. It is already present in the memory.

Step 13
Page 2 is referred. It is already present in the memory.

Step 14
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.
Page 0 is replaced by Page 1 as it is last referred.

Step 15
Page 2 is referred. It is already present in the memory.

Step 16
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.Page
3 is replaced by Page 0 as it is last referred.

Step 17
Page 1 is referred. It is already present in the memory.

Step 18
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.Page
2 is replaced by Page 7 as it last referred.

Step 19
Page 0 is referred. It is already present in the memory.

7
Step 20
Page 1 is referred. It is already present in the memory.

With three frames, the number of page faults are: 12


PYTHON CODE IMPLEMENTATION FOR LEAST
RECENTLY USED PAGE REPLACEMENT TECHNIQUE
capacity = 3
processList = [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1]
s = []
pageFaults = 0
for i in processList:
if i not in s:
if(len(s) == capacity):
s.remove(s[0])
s.append(i)
else:
s.append(i)
pageFaults +=1
else:
s.remove(i)
s.append(i)
print("The number of page faults are: ")
print("{}".format(pageFaults))

OUTPUT

3. LEAST FREQUENTLY USED LFU


❖ It is a counting algorithm
❖ Keeps counter of number of references that have been made to
each page
❖ LFU replaces page with smallest cout
❖ In case of tie, page with oldest arrival time is replaced.

EXAMPLE

Reference string: 1 2 3 4 1 2 5 1 2 3 4 5

Step 1
Page 1 is referred. It is not present in memory. Page fault has occurred.
Page 1 is loaded from secondary to primary memory.

11

Step 2
Page 2 is referred. It is not present in memory. Page fault has occurred.
Page 2 is loaded from secondary to primary memory.

11

21

Step 3
Page 3 is referred. It is not present in memory. Page fault has occurred.
Page 3 is loaded from secondary to primary memory.

11

21

31

Step 4
Page 4 is referred. It is not present in memory. Page fault has occurred.
Page 4 is loaded from secondary to primary memory.

11

21

31

41

With the above step the memory is full, with all pages having count 1
each.

Step 5
Page 1 is referred. It is already present in the memory. Page 1 count is
incremented by 1.

12

21

31

41

Step 6
Page 2 is referred. It is already present in the memory. Page 2 count is
incremented by 1.

12

22

31

41

Step 7
Page 5 is referred. It is not present in memory. Page fault has occurred.
Page 5 is loaded from secondary to primary memory. Page 3 is replaced
by Page 5 as it is with older arrival time.

12

22

51

41

Step 8
Page 1 is referred. It is already present in the memory. Page 1 count is
incremented by 1.

13

22

51

41

Step 9
Page 2 is referred. It is already present in the memory. Page 2 count is
incremented by 1.

13

23

51

41

Step 10
Page 3 is referred. It is not present in memory. Page fault has occurred.
Page 3 is loaded from secondary to primary memory. Page 4 is replaced
by Page 3 as it is with older arrival time.

13

23

51

31

Step 11
Page 4 is referred. It is not present in memory. Page fault has occurred.
Page 4 is loaded from secondary to primary memory.Page 5 is replaced
by Page 4 as it is with older arrival time.

13

23

41

31

Step 12
Page 5 is referred. It is not present in memory. Page fault has occurred.
Page 5 is loaded from secondary to primary memory. Page 3 is replaced
by Page 5 as it is with older arrival time.

13

23

31

51

With four frames, the number of page faults are: 8

PYTHON CODE IMPLEMENTATION FOR LEAST


FREQUENTLY USED PAGE REPLACEMENT ALGORITHM
from collections import defaultdict
def lfu(page_list, frame_size):
page_faults = 0
frame = []
frequency = defaultdict(int)

for page in page_list:


if page not in frame:
page_faults += 1
if len(frame) < frame_size:
frame.append(page)
else:
min_freq = min(frequency.values())
lfu_pages = [p for p in frame if frequency[p] == min_freq]
if lfu_pages:
page_to_replace = min(lfu_pages, key=frame.index)
frame.remove(page_to_replace)
frame.append(page)
frequency[page] = 1
else:
frequency[page] += 1
return page_faults
while True:
try:
page_list = list(map(int, input("Enter the page list separated by
spaces: ").split()))
if not page_list:
raise ValueError
break
except ValueError:
print("Invalid input. Please enter a valid list of integers.")
while True:
try:
frame_size = int(input("Enter the frame size: "))
if frame_size <= 0:
raise ValueError
break
except ValueError:
print("Invalid input. Please enter a positive integer for frame size.")
page_faults = lfu(page_list, frame_size)
print("Number of page faults:", page_faults)
OUTPUT

4. OPTIMAL PAGE REPLACEMENT


❖ It has lowest page fault size
❖ Never suffers from Belady’s Anomaly
❖ Replace page that is not used for longest period of time in future
❖ Algorithm requires future knowledge

EXAMPLE
Reference String: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

Step 1
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.

Step 2
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.

Step 3
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.
7

Step 4
Page 2 is referred. It is not present in the memory. Page fault has
occurred. We load page 2 from secondary memory to main memory.
Page 7 is replaced by Page 2 as it is least referred in future.

1
Step 5
Page 0 is referred. It is already present in the memory.

Step 6
Page 3 is referred. It is not present in the memory. Page fault has
occurred. We load page 3 from secondary memory to main memory.
Page 1 is replaced by Page 3 as it is least referred in future.

Step 7
Page 0 is referred. It is already present in the memory.

3
Step 8
Page 4 is referred. It is not present in the memory. Page fault has
occurred. We load page 4 from secondary memory to main memory.
Page 0 is replaced by Page 4 as it is least referred in future.

Step 9
Page 2 is referred. It is already present in the memory.

Step 10
Page 3 is referred. It is already present in the memory.

3
Step 11
Page 0 is referred. It is not present in the memory. Page fault has
occurred. We load page 0 from secondary memory to main memory.
Page 4 is replaced by Page 0 as it is least referred in future.

Step 12
Page 3 is referred. It is already present in the memory.

Step 13
Page 2 is referred. It is already present in the memory.

3
Step 14
Page 1 is referred. It is not present in the memory. Page fault has
occurred. We load page 1 from secondary memory to main memory.
Page 3 is replaced by Page 1 as it is least referred in future.

Step 15
Page 2 is referred. It is already present in the memory.

Step 16
Page 0 is referred. It is already present in the memory.

1
Step 17
Page 1 is referred. It is already present in the memory.

Step 18
Page 7 is referred. It is not present in the memory. Page fault has
occurred. We load page 7 from secondary memory to main memory.Page
2 is replaced by Page 7 as it is least referred in future.

Step 19
Page 0 is referred. It is already present in the memory.

1
Step 20
Page 1 is referred. It is already present in the memory.

With three frames, the number of page faults are: 9


PYTHON CODE IMPLEMENTATION FOR OPTIMAL PAGE
REPLACEMENT TECHNIQUE
def optimal_page_replacement(ref_string, frame_size):
page_faults = 0
current_frames = []

for page in ref_string:


if page in current_frames:
continue
if len(current_frames) < frame_size:
current_frames.append(page)
page_faults += 1
continue
farthest_page = None
farthest_distance = -1
for frame in current_frames:
try:
farthest_index = ref_string.index(frame, ref_string.index(page))
if farthest_index > farthest_distance:
farthest_distance = farthest_index
farthest_page = frame
except ValueError:
farthest_page = frame
break
current_frames[current_frames.index(farthest_page)] = page
page_faults += 1
return page_faults

ref_string = [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1]
frame_size = 3
page_faults = optimal_page_replacement(ref_string, frame_size)
print(f"Number of page faults are: {page_faults}")

OUTPUT

You might also like