summaryrefslogtreecommitdiff
path: root/include/kernel/buf.h
blob: 099523dc528c65b156b87a9a86eecbe90eb5887b (plain)
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
#pragma once
#include "common/types.h"
#include "kernel/spinlock.h"

#define BSIZE 1024
#define NBUF 30

struct Buf
{
    int valid;        // Whether the data has been read from the disk (1=valid, 0=invalid)
    int disk;         // Whether it has been held by the driver (dirty bit/write-back flag is usually extended here)
    uint32 dev;       // Device Number
    uint32 blockno;   // Block number
    uint32 refcnt;    // Reference Counting
    struct Buf *prev; // LRU linked list
    struct Buf *next;
    uchar data[BSIZE];

    Mutex lock; // Sleep Lock
};

namespace BufferCache
{
    void init();
    struct Buf *bread(uint32 dev, uint32 blockno);
    void bwrite(struct Buf *b);
    void brelse(struct Buf *b);
    void bpin(struct Buf *b);
    void bunpin(struct Buf *b);
} // namespace BufferCache