Abstract the interface to the MSA page replacement policies
authorPhil Miller <mille121@illinois.edu>
Wed, 4 Feb 2009 19:59:38 +0000 (13:59 -0600)
committerPhil Miller <mille121@illinois.edu>
Thu, 10 Dec 2009 22:22:34 +0000 (16:22 -0600)
src/libs/ck-libs/multiphaseSharedArrays/msa-DistPageMgr.h

index 0c1248ce65ad71b2c8570150f0fd9dd67e24d9b8..b6cbd2d5df5b8421e6e360e90b726c05cfb5b00d 100644 (file)
@@ -233,6 +233,22 @@ public:
 //=======================================================
 // Page-out policy
 
 //=======================================================
 // Page-out policy
 
+/**
+   class vmPageReplacementPolicy
+   Abstract base class providing the interface to the various page
+   replacement policies available for use with an MSA
+*/
+template <class ENTRY_TYPE, unsigned int ENTRIES_PER_PAGE>
+class MSA_PageReplacementPolicy
+{
+public:
+  /// Note that a page was just accessed
+  virtual void pageAccessed(unsigned int page) = 0;
+
+  /// Ask for the index of a page to discard
+  virtual unsigned int selectPage() = 0;
+};
+
 /**
   class vmLRUPageReplacementPolicy
   This class provides the functionality of least recently used page replacement policy.
 /**
   class vmLRUPageReplacementPolicy
   This class provides the functionality of least recently used page replacement policy.
@@ -245,7 +261,7 @@ public:
      as both operations would then become O(lg(n))
  */
 template <class ENTRY_TYPE, unsigned int ENTRIES_PER_PAGE>
      as both operations would then become O(lg(n))
  */
 template <class ENTRY_TYPE, unsigned int ENTRIES_PER_PAGE>
-class vmLRUReplacementPolicy
+class vmLRUReplacementPolicy : public MSA_PageReplacementPolicy <ENTRY_TYPE, ENTRIES_PER_PAGE>
 {
 protected:
     unsigned int nPages;            // number of pages
 {
 protected:
     unsigned int nPages;            // number of pages
@@ -310,10 +326,10 @@ public:
              worst-case is O(K n) (if there are no doomed pages).
  */
 template <class ENTRY_TYPE, unsigned int ENTRIES_PER_PAGE>
              worst-case is O(K n) (if there are no doomed pages).
  */
 template <class ENTRY_TYPE, unsigned int ENTRIES_PER_PAGE>
-class vmNRUReplacementPolicy
+class vmNRUReplacementPolicy : public MSA_PageReplacementPolicy <ENTRY_TYPE, ENTRIES_PER_PAGE>
 {
 protected:
 {
 protected:
-    unsigned int nPages;            // number of pages
+  unsigned int nPages;            // number of pages
   const std::vector<ENTRY_TYPE *> &pageTable; // actual pages (NULL means page is gone)
   typedef MSA_Page_StateT<ENTRY_TYPE, ENTRIES_PER_PAGE> pageState_t;
   const std::vector<pageState_t *> &pageState;  // state of each page
   const std::vector<ENTRY_TYPE *> &pageTable; // actual pages (NULL means page is gone)
   typedef MSA_Page_StateT<ENTRY_TYPE, ENTRIES_PER_PAGE> pageState_t;
   const std::vector<pageState_t *> &pageState;  // state of each page
@@ -525,7 +541,7 @@ protected:
     std::stack<ENTRY_TYPE*> pagePool;     // a pool of unused pages
     
   typedef vmNRUReplacementPolicy<ENTRY_TYPE, ENTRIES_PER_PAGE> vmPageReplacementPolicy;
     std::stack<ENTRY_TYPE*> pagePool;     // a pool of unused pages
     
   typedef vmNRUReplacementPolicy<ENTRY_TYPE, ENTRIES_PER_PAGE> vmPageReplacementPolicy;
-    vmPageReplacementPolicy* replacementPolicy;
+    MSA_PageReplacementPolicy<ENTRY_TYPE, ENTRIES_PER_PAGE> *replacementPolicy;
 
     // structure for the bounds of a single write
     typedef struct { unsigned int begin; unsigned int end; } writebounds_t;
 
     // structure for the bounds of a single write
     typedef struct { unsigned int begin; unsigned int end; } writebounds_t;