-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuf.h
60 lines (46 loc) · 1.29 KB
/
buf.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef __HW2_H__
#define __HW2_H__
#include "queue.h"
#define MAX_BUFLIST_NUM (4)
#define MAX_BUF_NUM (16)
#define MAX_BUF_STATE_NUM (2)
#define BLKNO_INVALID (-1)
typedef struct Buf Buf;
typedef enum {
FALSE = 0,
TRUE = 1
} BOOL;
typedef enum __BufState
{
BUF_STATE_CLEAN,
BUF_STATE_DIRTY
} BufState;
typedef enum __BufStateList
{
BUF_CLEAN_LIST = 0,
BUF_DIRTY_LIST = 1
} BufStateList;
struct Buf
{
int blkno;
BufState state;
void* pMem;
CIRCLEQ_ENTRY(Buf) blist;
CIRCLEQ_ENTRY(Buf) slist;
CIRCLEQ_ENTRY(Buf) llist;
CIRCLEQ_ENTRY(Buf) flist;
};
extern CIRCLEQ_HEAD(bufList, Buf) bufList[MAX_BUFLIST_NUM];
extern CIRCLEQ_HEAD(stateList, Buf) stateList[MAX_BUF_STATE_NUM];
extern CIRCLEQ_HEAD(freeList, Buf) freeListHead;
extern CIRCLEQ_HEAD(lruList, Buf) lruListHead;
extern void BufInit(void);
extern void BufRead(int blkno, char* pData);
extern void BufWrite(int blkno, char* pData);
extern void BufSync(void);
extern Buf* BufFind(int blkno);
extern void BufSyncBlock(int blkno);
extern int GetBufInfoInStateList(BufStateList listnum, Buf* ppBufInfo[], int numBuf);
extern int GetBufInfoInLruList(Buf* ppBufInfo[], int numBuf);
extern int GetBufInfoInBufferList(int index, Buf* ppBufInfo[], int numBuf);
#endif