Modestus Moon OS  R4
CS 450 project
heap.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  header
 
struct  footer
 
struct  index_entry
 
struct  index_table
 
struct  heap
 

Macros

#define TABLE_SIZE   0x1000
 
#define KHEAP_BASE   0xD000000
 
#define KHEAP_MIN   0x10000
 
#define KHEAP_SIZE   0x1000000
 

Functions

u32int _kmalloc (u32int size, int align, u32int *phys_addr)
 
u32int kmalloc (u32int size)
 
u32int kfree ()
 
void init_kheap ()
 
u32int alloc (u32int size, heap *hp, int align)
 
heapmake_heap (u32int base, u32int max, u32int min)
 

Macro Definition Documentation

#define KHEAP_BASE   0xD000000

Definition at line 6 of file heap.h.

Referenced by alloc(), and init_paging().

#define KHEAP_MIN   0x10000

Definition at line 7 of file heap.h.

Referenced by alloc(), and init_paging().

#define KHEAP_SIZE   0x1000000

Definition at line 8 of file heap.h.

Referenced by init_paging().

#define TABLE_SIZE   0x1000

Definition at line 5 of file heap.h.

Function Documentation

u32int _kmalloc ( u32int  size,
int  align,
u32int phys_addr 
)

Definition at line 24 of file heap.c.

References alloc(), page_entry::frameaddr, get_page(), and phys_alloc_addr.

Referenced by get_page(), init_paging(), and kmalloc().

25 {
26  u32int *addr;
27 
28  // Allocate on the kernel heap if one has been created
29  if (kheap != 0){
30  addr = (u32int*)alloc(size, kheap, page_align);
31  if (phys_addr){
32  page_entry *page = get_page((u32int)addr, kdir, 0);
33  *phys_addr = (page->frameaddr*0x1000) + ((u32int)addr & 0xFFF);
34  }
35  return (u32int)addr;
36  }
37  // Else, allocate directly from physical memory
38  else {
39  if (page_align && (phys_alloc_addr & 0xFFFFF000)){
40  phys_alloc_addr &= 0xFFFFF000;
41  phys_alloc_addr += 0x1000;
42  }
43  addr = (u32int*)phys_alloc_addr;
44  if (phys_addr){
45  *phys_addr = phys_alloc_addr;
46  }
47  phys_alloc_addr += size;
48  return (u32int)addr;
49  }
50 }
u32int frameaddr
Definition: paging.h:19
page_dir * kdir
Definition: paging.c:21
Definition: paging.h:12
u32int alloc(u32int size, heap *h, int align)
Definition: heap.c:57
u32int phys_alloc_addr
Definition: heap.c:22
heap * kheap
Definition: heap.c:14
unsigned long u32int
Definition: system.h:27
page_entry * get_page(u32int addr, page_dir *dir, int make_table)
Definition: paging.c:85
u32int alloc ( u32int  size,
heap hp,
int  align 
)

Definition at line 57 of file heap.c.

References base, KHEAP_BASE, KHEAP_MIN, no_warn, and serial_println().

Referenced by _kmalloc().

58 {
59  no_warn(size||align||h);
60  static u32int heap_addr = KHEAP_BASE;
61 
62  u32int base = heap_addr;
63  heap_addr += size;
64 
65  if (heap_addr > KHEAP_BASE + KHEAP_MIN)
66  serial_println("Heap is full!");
67 
68  return base;
69 }
u32int base
Definition: tables.h:53
#define KHEAP_MIN
Definition: heap.h:7
#define no_warn(p)
Definition: system.h:7
int serial_println(const char *msg)
Definition: serial.c:44
unsigned long u32int
Definition: system.h:27
#define KHEAP_BASE
Definition: heap.h:6
void init_kheap ( )
u32int kfree ( )
u32int kmalloc ( u32int  size)

Definition at line 52 of file heap.c.

References _kmalloc().

Referenced by init_paging(), initHeap(), make_heap(), and sys_alloc_mem().

53 {
54  return _kmalloc(size,0,0);
55 }
u32int _kmalloc(u32int size, int page_align, u32int *phys_addr)
Definition: heap.c:24
heap* make_heap ( u32int  base,
u32int  max,
u32int  min 
)

Definition at line 71 of file heap.c.

References kmalloc(), and no_warn.

Referenced by init_paging().

72 {
73  no_warn(base||max||min);
74  return (heap*)kmalloc(sizeof(heap));
75 }
u32int base
Definition: tables.h:53
#define no_warn(p)
Definition: system.h:7
Definition: heap.h:33
u32int kmalloc(u32int size)
Definition: heap.c:52