LRU cache design

后端 未结 11 2003
借酒劲吻你
借酒劲吻你 2020-11-27 09:26

Least Recently Used (LRU) Cache is to discard the least recently used items first How do you design and implement such a cache class? The design requirements are as follows:

11条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-27 09:54

    LRU Page Replacement Technique:

    When a page is referenced, the required page may be in the cache.

    If in the cache: we need to bring it to the front of the cache queue.

    If NOT in the cache: we bring that in cache. In simple words, we add a new page to the front of the cache queue. If the cache is full, i.e. all the frames are full, we remove a page from the rear of cache queue, and add the new page to the front of cache queue.

    # 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
    

提交回复
热议问题