UserPreferences

PagingAlgorithm


LRU

least recentry used page is replaced.

  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
pages = [[None, 0], [None, 0], [None, 0] , [None, 0]]
access = "ABCDCEACBCDCAFBC"

time = 1
for char in access:
    candidate = [None, 999]
    for page in pages:
        if page[0] == char:
            candidate = page
    if not candidate[0]:
        for page in pages:
            if candidate[1] > page[1]:
                candidate = page
        candidate[0] = char
    candidate[1] = time

    print time, pages
    time = time + 1

output

1 [['A', 1], [None, 0], [None, 0], [None, 0]]
2 [['A', 1], ['B', 2], [None, 0], [None, 0]]
3 [['A', 1], ['B', 2], ['C', 3], [None, 0]]
4 [['A', 1], ['B', 2], ['C', 3], ['D', 4]]
5 [['A', 1], ['B', 2], ['C', 5], ['D', 4]]
6 [['E', 6], ['B', 2], ['C', 5], ['D', 4]]
7 [['E', 6], ['A', 7], ['C', 5], ['D', 4]]
8 [['E', 6], ['A', 7], ['C', 8], ['D', 4]]
9 [['E', 6], ['A', 7], ['C', 8], ['B', 9]]
10 [['E', 6], ['A', 7], ['C', 10], ['B', 9]]
11 [['D', 11], ['A', 7], ['C', 10], ['B', 9]]
12 [['D', 11], ['A', 7], ['C', 12], ['B', 9]]
13 [['D', 11], ['A', 13], ['C', 12], ['B', 9]]
14 [['D', 11], ['A', 13], ['C', 12], ['F', 14]]
15 [['B', 15], ['A', 13], ['C', 12], ['F', 14]]
16 [['B', 15], ['A', 13], ['C', 16], ['F', 14]]

FINUFO

first in not used first out, (also known as second chance)

  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
pages = [[None, 0], [None, 0], [None, 0] , [None, 0]]
pagehash = {}

access = "ABCDCEBABCDCAFBC"

needle = -1
time = 1
for char in access:

    if pagehash.has_key(char):
        page = pagehash[char]
        page[1] = 1
    else:
        while 1:
            needle = (needle + 1) % len(pages)
            page = pages[needle]
            if page[1] == 0:
                if pagehash.has_key(page[0]):
                    del pagehash[page[0]]
                page[0] = char
                pagehash[char] = page
                break
            page[1] = 0
            print time,"(",char ,")", needle, pages

    print time,"(",char ,")", needle, pages
    time = time + 1

output

1 ( A ) 0 [['A', 0], [None, 0], [None, 0], [None, 0]]
2 ( B ) 1 [['A', 0], ['B', 0], [None, 0], [None, 0]]
3 ( C ) 2 [['A', 0], ['B', 0], ['C', 0], [None, 0]]
4 ( D ) 3 [['A', 0], ['B', 0], ['C', 0], ['D', 0]]
5 ( C ) 3 [['A', 0], ['B', 0], ['C', 1], ['D', 0]]
6 ( E ) 0 [['E', 0], ['B', 0], ['C', 1], ['D', 0]]
7 ( B ) 0 [['E', 0], ['B', 1], ['C', 1], ['D', 0]]
8 ( A ) 1 [['E', 0], ['B', 0], ['C', 1], ['D', 0]]
8 ( A ) 2 [['E', 0], ['B', 0], ['C', 0], ['D', 0]]
8 ( A ) 3 [['E', 0], ['B', 0], ['C', 0], ['A', 0]]
9 ( B ) 3 [['E', 0], ['B', 1], ['C', 0], ['A', 0]]
10 ( C ) 3 [['E', 0], ['B', 1], ['C', 1], ['A', 0]]
11 ( D ) 0 [['D', 0], ['B', 1], ['C', 1], ['A', 0]]
12 ( C ) 0 [['D', 0], ['B', 1], ['C', 1], ['A', 0]]
13 ( A ) 0 [['D', 0], ['B', 1], ['C', 1], ['A', 1]]
14 ( F ) 1 [['D', 0], ['B', 0], ['C', 1], ['A', 1]]
14 ( F ) 2 [['D', 0], ['B', 0], ['C', 0], ['A', 1]]
14 ( F ) 3 [['D', 0], ['B', 0], ['C', 0], ['A', 0]]
14 ( F ) 0 [['F', 0], ['B', 0], ['C', 0], ['A', 0]]
15 ( B ) 0 [['F', 0], ['B', 1], ['C', 0], ['A', 0]]
16 ( C ) 0 [['F', 0], ['B', 1], ['C', 1], ['A', 0]]