资源简介
Storage and Buffer Manager C++ code.在别人的基础上做的,应该说除了lru都是重做的.模拟数据库文件的实现.
代码片段和文件信息
#include “StdAfx.h“
#include “BMgr.h“
#include “DSMgr.h“
//Implementation of BMgr
DSMgr dss;
//LRU Element List
struct LRUEle * lru;
struct LRUEle * mru;
//
LRUEle::LRUEle()
{
frameid = -1;
time = 0.0;
less = nullptr;
more = nullptr;
}
BCB::BCB()
{
next = NULL;
latch = -1;
count = -1;
page_id = -1;
frame_id = -1;
stime =-1;
ftime=-1;
dirty=-1;
}
//
BMgr::BMgr(void)
{
int i = 0;
for(i = 0; i < BUFFERSIZE; i++)
{
//
ptof[i] = nullptr;
ftop[i] = -1;
}
dss.OpenFile(“data.dbf“);
}
BMgr::~BMgr(void)
{
}
//If the page is not resident in the buffer yet it selects a victim page
int BMgr::FixPage(int page_id int prot)
{
//prot means protection
int fid = -1;
int num=Hash(page_id);
BCB * bcb =ptof[num];
while(bcb!=nullptr)
{
if(bcb->page_id == page_id)
{
break;
}
bcb = bcb->next;
}
if(bcb != nullptr)
{
if(bcb->stime != -1)
{
bcb->ftime=bcb->stime;
}
DoLRUList(bcb bcb->frame_id);
return bcb->frame_id;
}
else
{
bcb = ptof[num];
fid = SelectVictim();
buf[fid] = dss.ReadPage(page_id);
ftop[fid] = page_id;
if(bcb != nullptr)
{
while(bcb->next != nullptr)
{
bcb = bcb->next;
}
bcb->next = new BCB();
bcb = bcb->next;
}
else
{
bcb = new BCB();
ptof[num] = bcb;
}
//重新设置bcb//
bcb->next = nullptr;
bcb->page_id = page_id;
bcb->frame_id = fid;
bcb->latch = 0;
bcb->count = 0;
bcb->ftime = static_cast(time(0));
//cout<ftime< bcb->stime = -1;
DoLRUList(bcb fid);
}
return fid;
}
NewPage BMgr::FixNewPage()
{
//find a newpage;
int offset=0;
int i=0;
while(i {
dss.Seek(offsetSEEK_SET);
if(dss.GetUse(i)!=0)break;
i++;
offset+=frameSIZE;
}
if(i==MAXPAGES){
printf(“\t$> error:disk is fullpress enter to exit“);
getchar();
exit(0);
}
NewPage np;
np.page_id=i;
//
np.frame_id=FixPage(i0);
return np;
}
int BMgr::UnfixPage(int page_id)
{
int num=Hash(page_id);
if(ptof[num]->count>0)
ptof[num]->count--;
if(ptof[num]->count==0)
ptof[num]->latch=0;
return ptof[num]->frame_id;
}
int BMgr::NumFreeframes()
{
//return the num of free frame
int i = 0j = 0num = 0Free = 0;
BCB * bcb = nullptr;
for(i = 0; i < BUFFERSIZE; i++)
{
j = ftop[i];
if(j == -1)
{
Free++;
}
else
{
num = Hash(j);
int frame_id = num;
bcb = ptof[num];
while(bcb != nullptr && bcb->frame_id != j)
{
bcb = bcb->next;
}
if(bcb != nullptr && bcb->frame_id == j)
{
if(bcb->count == 0 && bcb->latch == 0)
{
Free++;
}
}
}
}
return Free;
}
int BMgr::SelectVictim()
{
int vframe = 0pid = 0fid=0;
BCB * bcb = nullptr;
bool found = false;
LRUEle * temp = lru;
if(temp == nullptr)
{
return 0;
}
for(int i = 0; i < BUFFERSIZE; i++)
{
if(ftop[i] == -1)
{
return i;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7681 2013-11-23 22:30 dbprj\BMgr.cpp
文件 1291 2013-11-23 19:28 dbprj\BMgr.h
文件 3690270 2013-11-23 20:59 dbprj\data-5w-50w-zipf.txt
文件 3194 2014-03-23 13:31 dbprj\dbprj.cpp
文件 4512 2013-10-31 19:37 dbprj\dbprj.vcxproj
文件 1659 2013-10-31 19:37 dbprj\dbprj.vcxproj.filters
文件 143 2013-10-27 22:23 dbprj\dbprj.vcxproj.user
文件 2045 2013-11-23 19:25 dbprj\DSMgr.cpp
文件 1159 2013-11-23 19:25 dbprj\DSMgr.h
文件 1354 2013-11-23 22:10 dbprj\ReadMe.txt
文件 245 2013-11-23 22:18 dbprj\stdafx.cpp
文件 927 2013-11-23 21:45 dbprj\stdafx.h
文件 234 2013-10-27 22:25 dbprj\targetver.h
目录 0 2014-03-23 13:31 dbprj
----------- --------- ---------- ----- ----
3714714 14
相关资源
- C++模拟磁盘文件系统
- 光线追踪算法实现C++实现
-
《Inside The C++ ob
ject Model》英文pdf - Boost ASIO C++ 网络编程 中文版
- C++ Primer 第五版 课后习题答案高清无
- 微软Win10计算器开源代码C++
- 文件加密器(C++).rar
- C++反汇编与逆向分析技术揭秘PDF(高
- C++实现调用摄像头并实时二值化
- 王桂林老师课件 c++基础与提高.pdf
- Accelerate C++(中文版)
- 入侵检测系统源码VC++
- Thinking in c++ 上下册 书本源码
- Essential c++ 高清pdf+随书源码
- C++编写dll和使用dll(最简单的vs2010)
- 跌倒检测-OPENCV-VC++
- Essential C++中文版(全)
- c++版神经网络实现
- C++编程有限元公式
- 《深入学习c++string》2.1版
- 银行家算法C++实现穷举所有安全序列
- C++课程设计-图书信息管理系统含源码
- C++使用Openssl进行RSA加密解密及签名验
- 三维五角星
- C++蚁群算法求解TSP问题
- C语言编的数据库管理系统DBMS
- C++ Template 完全导引简体中文版
- 中国象棋对弈(MFC单机版)
- IP包流量分析程序.rar含程序+源码WIN
- 谭浩强c++第二章例题源码
评论
共有 条评论