-
Notifications
You must be signed in to change notification settings - Fork 1
/
mmemory.h
executable file
·110 lines (86 loc) · 3.17 KB
/
mmemory.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef MMEMORY_H
#define MMEMORY_H
#include <stdbool.h>
#include <stddef.h>
#define RC_SUCCESS 0
#define RC_ERR_U 1
#define RC_ERR_INPUT -1
#define RC_ERR_SF -2
#define _init(x, y) s_init(x, y)
#define _malloc(x, y) s_malloc(x, y)
typedef char* VA; // Тип описывающий адрес блока
// ST is a queue that represents segments table.
typedef struct _segment_table
{
VA va; // Segment VA.
size_t l; // Segment length
struct _segment_table* n; // Physical address of next segment's VA.
} ST;
// MEMORY represents virtual address space.
typedef struct
{
size_t pa; // Physical address of first block.
size_t sz; // Number of blocks in memory.
ST* fs; // Points to the first segment in the table.
} MEMORY;
/**
@func _malloc
@brief Выделяет блок памяти определенного размера
@param [out] ptr адресс блока
@param [in] szBlock размер блока
@return код ошибки
@retval 0 успешное выполнение
@retval -1 неверные параметры
@retval -2 нехватка памяти
@retval 1 неизвестная ошибка
**/
int _malloc (VA* ptr, size_t szBlock);
/**
@func _free
@brief Удаление блока памяти
@param [in] ptr адресс блока
@return код ошибки
@retval 0 успешное выполнение
@retval -1 неверные параметры
@retval 1 неизвестная ошибка
**/
int _free (VA ptr);
/**
@func _read
@brief Чтение информации из блока памяти
@param [in] ptr адресс блока
@param [in] pBuffer адресс буфера куда копируется инфомация
@param [in] szBuffer размер буфера
@return код ошибки
@retval 0 успешное выполнение
@retval -1 неверные параметры
@retval -2 доступ за пределы блока
@retval 1 неизвестная ошибка
**/
int _read (VA ptr, void* pBuffer, size_t szBuffer);
/**
@func _write
@brief Запись информации в блок памяти
@param [in] ptr адресс блока
@param [in] pBuffer адресс буфера куда копируется инфомация
@param [in] szBuffer размер буфера
@return код ошибки
@retval 0 успешное выполнение
@retval -1 неверные параметры
@retval -2 доступ за пределы блока
@retval 1 неизвестная ошибка
**/
int _write (VA ptr, void* pBuffer, size_t szBuffer);
/**
@func _init
@brief Инициализация модели менеджера памяти
@param [in] n количество страниц
@param [in] szPage размер страницы
В варианте 1 и 2 общий объем памяти расчитывается как n*szPage
@return код ошибки
@retval 0 успешное выполнение
@retval -1 неверные параметры
@retval 1 неизвестная ошибка
**/
int _init (int n, int szPage);
#endif