Skip to content

Commit

Permalink
new if stmt in unpin method
Browse files Browse the repository at this point in the history
  • Loading branch information
munafahad committed Apr 21, 2016
1 parent 76a37ff commit d7979dc
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 25 deletions.
Binary file modified Muna.minibase
Binary file not shown.
46 changes: 26 additions & 20 deletions src/bufmgr/BufMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public BufMgr(int numframes) {
frametab[i] = new FrameDesc();
}

pageFrameMap = new HashMap<>();
pageFrameMap = new HashMap<Integer, Integer>();
replPolicy = new Clock(this);

} // public BufMgr(int numframes)
Expand Down Expand Up @@ -86,7 +86,7 @@ public void pinPage(PageId pageno, Page mempage, int contents) {
//frameNo: to get the frame that holds the page if it is exist in the buffer pool
Integer frameNo = pageFrameMap.get(pageno.pid);

System.out.println("In pinPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);
//System.out.println("In pinPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);

// If disk page pageno is already in the buffer pool ==> increment pin_count of that frame.
if(frameNo != null){
Expand Down Expand Up @@ -115,6 +115,7 @@ public void pinPage(PageId pageno, Page mempage, int contents) {
frametab[victimFrm].valid = false;
frametab[victimFrm].dirty = false;
frametab[victimFrm].refbit = false;


switch (contents)
{
Expand All @@ -130,7 +131,7 @@ public void pinPage(PageId pageno, Page mempage, int contents) {
frametab[victimFrm].dirty = false;

//frametab[victimFrm].pageno.copyPageId(pageno);
frametab[victimFrm].pageno = pageno;
frametab[victimFrm].pageno = new PageId(pageno.pid);

frametab[victimFrm].refbit = true;

Expand All @@ -148,14 +149,15 @@ public void pinPage(PageId pageno, Page mempage, int contents) {
frametab[victimFrm].pin_count ++;
frametab[victimFrm].valid = true;
frametab[victimFrm].dirty = false;


frametab[victimFrm].pageno = new PageId();
//frametab[victimFrm].pageno.copyPageId(pageno);
frametab[victimFrm].pageno = pageno;
frametab[victimFrm].pageno = new PageId(pageno.pid);

frametab[victimFrm].refbit = true;


pageFrameMap.put(frametab[victimFrm].pageno.pid, victimFrm);
pageFrameMap.put(this.frametab[victimFrm].pageno.pid, victimFrm);

buffer_pool[victimFrm].setPage(mempage);

Expand Down Expand Up @@ -186,10 +188,12 @@ public void pinPage(PageId pageno, Page mempage, int contents) {
*/
public void unpinPage(PageId pageno, boolean dirty) {

if(pageFrameMap.containsKey(pageno.pid)){

//frameNo: to get the frame that holds the page if it is exist in the buffer pool
Integer frameNo = pageFrameMap.get(pageno.pid);

System.out.println("In unpinPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);
//System.out.println("In unpinPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);


//first check if the page is not in the buffer pool OR not pinned
Expand Down Expand Up @@ -217,6 +221,7 @@ public void unpinPage(PageId pageno, boolean dirty) {
}
}

}
} // public void unpinPage(PageId pageno, boolean dirty)

/**
Expand All @@ -238,7 +243,7 @@ public PageId newPage(Page firstpg, int run_size) {
Integer frameNo = pageFrameMap.get(pageno.pid);


System.out.println("In newPage: "+ "frameNo is: #" + frameNo + "run_size is: " + run_size);
//System.out.println("In newPage: "+ "frameNo is: #" + frameNo + "run_size is: " + run_size);


// Allocates a run of new disk pages and pins the first one in the buffer pool.
Expand Down Expand Up @@ -277,7 +282,7 @@ public void freePage(PageId pageno) {
//frameNo: is used to check if firstpg is already pinned
Integer frameNo = pageFrameMap.get(pageno.pid);

System.out.println("In freePage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);
//System.out.println("In freePage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);

//1. check if pageno in the buffer pool already
// and if it is pinned or not
Expand All @@ -300,14 +305,15 @@ public void freePage(PageId pageno) {
*/
public void flushAllFrames() {

for (int i=0 ; i < frametab.length ; i++)
{
if(frametab[i].valid && frametab[i].dirty)

System.out.println(frametab[i].pageno.pid);
System.out.println(pageFrameMap.toString());

flushPage(frametab[i].pageno);
for (int i=0 ; i < frametab.length ; ++i) {
if (frametab[i].pageno != null) {
if (frametab[i].valid && frametab[i].dirty) {
//System.out.println(frametab[i].pageno.pid);
//System.out.println(pageFrameMap.toString());

flushPage(frametab[i].pageno);
}
}
}

} // public void flushAllFrames()
Expand All @@ -323,7 +329,7 @@ public void flushPage(PageId pageno) {
//frameNo: to get the frame that holds the page if it is exist in the buffer pool
Integer frameNo = pageFrameMap.get(pageno.pid);

System.out.println("In flushPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);
// System.out.println("In flushPage: " + "pageno is: # " + pageno.pid + "frameNo is: #" + frameNo);


if(frameNo != null)
Expand Down Expand Up @@ -364,10 +370,10 @@ public int getNumUnpinned() {
}
}

System.out.println("In getNumUnpinned: " + unpinned_count);
// System.out.println("In getNumUnpinned: " + unpinned_count);

return unpinned_count;

}

} // public class BufMgr implements GlobalConst
} // public class BufMgr implements GlobalConst
6 changes: 2 additions & 4 deletions src/bufmgr/Clock.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ public class Clock implements GlobalConst {

private int current;
//frametab: copy of the frametab in "BufMgr.java"
protected FrameDesc[] frametab;
private FrameDesc[] frametab;

public Clock(BufMgr bm) {

current = 0;
this.frametab=bm.frametab;

}



public int pickVictim() {

//(frametab.length)*2: as we need to check the buff. pool 2 times
Expand All @@ -40,7 +39,6 @@ else if (frametab[current].pin_count == 0){
}

// (-1) if No frame available in the buff. pool
// TODO: return an error
return -1;
}
}
1 change: 1 addition & 0 deletions src/bufmgr/FrameDesc.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public FrameDesc() {
pin_count = 0;
refbit = false;


}

}
2 changes: 1 addition & 1 deletion src/diskmgr/DiskMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ protected void set_bits(PageId start_page, int run_size, int value) {
Page pg = new Page();
Minibase.BufferManager.pinPage(pgid, pg, PIN_DISKIO);
byte[] pgbuf = pg.getData();

// locate the piece of the run that fits on this page
int first_byte_no = first_bit_no / 8;
int first_bit_offset = first_bit_no % 8;
Expand Down

0 comments on commit d7979dc

Please sign in to comment.