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 
37 class SplitAllocator : public Allocator
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 */
SplitAllocator::allocate
virtual Result allocate(Range &args)
Allocate physical memory.
Definition: SplitAllocator.cpp:35
SplitAllocator::m_alloc
BitAllocator m_alloc
Physical memory allocator.
Definition: SplitAllocator.h:141
SplitAllocator::m_pageSize
const Size m_pageSize
Size of a memory page.
Definition: SplitAllocator.h:147
Types.h
Allocator.h
Allocator
Memory Allocator.
Definition: Allocator.h:46
CallbackFunction
Represents a callback function.
Definition: Callback.h:34
SplitAllocator::available
virtual Size available() const
Get memory available.
Definition: SplitAllocator.cpp:30
Address
unsigned long Address
A memory address.
Definition: Types.h:131
Callback.h
SplitAllocator
Allocator which separates kernel mapped memory at virtual and physical addresses.
Definition: SplitAllocator.h:37
Size
unsigned int Size
Any sane size indicator cannot go negative.
Definition: Types.h:128
Allocator::Range
Describes a range of memory.
Definition: Allocator.h:65
SplitAllocator::m_virtRange
const Range m_virtRange
Virtual memory range to manage.
Definition: SplitAllocator.h:144
SplitAllocator::release
virtual Result release(const Address addr)
Release memory page.
Definition: SplitAllocator.cpp:89
SplitAllocator::toPhysical
Address toPhysical(const Address virt) const
Convert Address to physical pointer.
Definition: SplitAllocator.cpp:100
BitAllocator
Bit memory allocator.
Definition: BitAllocator.h:40
BitAllocator.h
SplitAllocator::SplitAllocator
SplitAllocator(const Range physRange, const Range virtRange, const Size pageSize)
Class constructor.
Definition: SplitAllocator.cpp:20
SplitAllocator::isAllocated
bool isAllocated(const Address page) const
Check if a physical page is allocated.
Definition: SplitAllocator.cpp:106
SplitAllocator::toVirtual
Address toVirtual(const Address phys) const
Convert Address to virtual pointer.
Definition: SplitAllocator.cpp:94
Allocator::Result
Result
Allocation results.
Definition: Allocator.h:53
SplitAllocator::allocateSparse
Result allocateSparse(const Range &range, CallbackFunction *function)
Allocate sparse (non-contiguous) physical memory.
Definition: SplitAllocator.cpp:40