-
Notifications
You must be signed in to change notification settings - Fork 0
/
raid_defines.h
81 lines (68 loc) · 2.24 KB
/
raid_defines.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef __R5_DEFINES__
#define __R5_DEFINES__
#include <stdio.h>
#define ERREUR -1
#define BLOCK_SIZE 4 // octets
#define FILENAME_MAX_SIZE 32 // caractères
#define MAX_FILE_SIZE (50*1024) // uchar
#define INODE_TABLE_SIZE 10 // taille fixe = nb max fichiers
#define MAX_MSG 1024 // uchar
#define SUPER_BLOCK_SIZE 4 // nb blocs avec parité
#define INODES_START SUPER_BLOCK_SIZE*BLOCK_SIZE+1 // en octets
#define INODE_SIZE 11 // en blocks avec parité
#define INODE_OCT 44 // en octets
#define CMD_MAX_SIZE FILENAME_MAX_SIZE+10
//code commande interpreteur
#define LS 1
#define CAT 2
#define RM 3
#define CREATE 4
#define EDIT 5
#define LOAD 6
#define STORE 7
#define QUIT 8
#define RESET 9
#define HELP 11
#define FIN 10
typedef unsigned int uint; // même taille que int
typedef unsigned char uchar; // 8 bits = octet
enum raid {ZERO,UN,CINQ,ZERO_UN,UN_ZERO,CINQUANTE,CENT};
static char nomRaid[7][10] = {"ZERO","UN","CINQ","ZERO_UN","UN_ZERO","CINQUANTE","CENT"};
/* Type of a block of data */
typedef struct block_s{
uchar data[BLOCK_SIZE]; // une case par octet
} block_t;
/* Type of the pseudo-inode structure */
typedef struct inode_s{
char filename[FILENAME_MAX_SIZE]; // dont '\0'
uint size; // du fichier en octets
uint nblock; // nblock du fichier = (size+BLOCK_SIZE-1)/BLOCK_SIZE ?
uint first_byte; // start block number on the virtual disk
} inode_t;
/* Type of the inode table */
typedef inode_t inode_table_t[INODE_TABLE_SIZE];// la taille est fixe
typedef struct super_block_s{
enum raid raid_type;
uint nb_blocks_used ; //
uint first_free_byte; // premier octet libre
} super_block_t;
/* Type of the virtual disk system */
typedef struct virtual_disk_s {
int number_of_files;
super_block_t super_block;
inode_table_t inodes;// tableau
int ndisk;
enum raid raidmode; // type de RAID
FILE **storage; // tab[NUMBER_OF_DISKS]
} virtual_disk_t;
//=======================================================
typedef struct stripe_s {
// inclut le bloc de parité
int nblocks; // egal à NB_DISK : un bloc par disque
block_t *stripe; // stripe[NB_DISK] les data
} stripe_t;
typedef struct file_s{
uint size; // Size of file in bytes
uchar data [MAX_FILE_SIZE] ; // only text files
} file_t ;
#endif // __R5_DEFINES__