LRU pagina tecnica di sostituzione:
Quando una pagina viene fatto riferimento, la pagina richiesta può essere nella cache.
If in the cache
: dobbiamo portarlo in primo piano nella coda della cache.
If NOT in the cache
: lo portiamo nella cache. In parole semplici, aggiungiamo una nuova pagina nella parte anteriore della coda della cache. Se la cache è piena, cioè tutti i frame sono pieni, rimuoviamo una pagina dal retro della coda della cache e aggiungiamo la nuova pagina in primo piano nella coda della cache.
# Cache Size
csize = int(input())
# Sequence of pages
pages = list(map(int,input().split()))
# Take a cache list
cache=[]
# Keep track of number of elements in cache
n=0
# Count Page Fault
fault=0
for page in pages:
# If page exists in cache
if page in cache:
# Move the page to front as it is most recent page
# First remove from cache and then append at front
cache.remove(page)
cache.append(page)
else:
# Cache is full
if(n==csize):
# Remove the least recent page
cache.pop(0)
else:
# Increment element count in cache
n=n+1
# Page not exist in cache => Page Fault
fault += 1
cache.append(page)
print("Page Fault:",fault)
Input/Output
Input:
3
1 2 3 4 1 2 5 1 2 3 4 5
Output:
Page Fault: 10
fonte
2017-11-07 18:44:31
Vedi anche http://stackoverflow.com/questions/3639744/least-recently-used-cache-using-c e http: // StackOverflow. it/questions/2057424/lru-implementation-in-production-code – timday