FreeNOS
SplitAllocator.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 Niek Linnenbank
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __LIBALLOC_SPLITALLOCATOR_H
19#define __LIBALLOC_SPLITALLOCATOR_H
20
21#include <Types.h>
22#include <Callback.h>
23#include "Allocator.h"
24#include "BitAllocator.h"
25
38{
39 public:
40
48 SplitAllocator(const Range physRange,
49 const Range virtRange,
50 const Size pageSize);
51
57 virtual Size available() const;
58
68 virtual Result allocate(Range & args);
69
79 Result allocateSparse(const Range & range, CallbackFunction *function);
80
91 Result allocate(Range & phys, Range & virt);
92
100 Result allocate(const Address addr);
101
111 virtual Result release(const Address addr);
112
120 Address toVirtual(const Address phys) const;
121
129 Address toPhysical(const Address virt) const;
130
136 bool isAllocated(const Address page) const;
137
138 private:
139
142
145
148};
149
155#endif /* __LIBALLOC_SPLITALLOCATOR_H */
Memory Allocator.
Definition Allocator.h:47
Result
Allocation results.
Definition Allocator.h:54
Bit memory allocator.
Represents a callback function.
Definition Callback.h:35
Allocator which separates kernel mapped memory at virtual and physical addresses.
Address toPhysical(const Address virt) const
Convert Address to physical pointer.
virtual Result allocate(Range &args)
Allocate physical memory.
Result allocateSparse(const Range &range, CallbackFunction *function)
Allocate sparse (non-contiguous) physical memory.
bool isAllocated(const Address page) const
Check if a physical page is allocated.
Address toVirtual(const Address phys) const
Convert Address to virtual pointer.
virtual Result release(const Address addr)
Release memory page.
const Size m_pageSize
Size of a memory page.
virtual Size available() const
Get memory available.
const Range m_virtRange
Virtual memory range to manage.
BitAllocator m_alloc
Physical memory allocator.
unsigned long Address
A memory address.
Definition Types.h:131
unsigned int Size
Any sane size indicator cannot go negative.
Definition Types.h:128
Describes a range of memory.
Definition Allocator.h:66