shared with the kernel, mapped into kernel address space; kernel is notified of its location. kernel segment size is increased to make it fit. - map in kernel and other processes that don't have their own page table using single 4MB (global) mapping. - new sanity check facility: objects that are allocated with the slab allocator are, when running with sanity checking on, marked readonly until they are explicitly unlocked using the USE() macro. - another sanity check facility: collect all uses of memory and see if they don't overlap with (a) eachother and (b) free memory - own munmap() and munmap_text() functions. - exec() recovers from out-of-memory conditions properly now; this solves some weird exec() behaviour - chew off memory from the same side of the chunk as where we start scanning, solving some memory fragmentation issues - use avl trees for freelist and phys_ranges in regions - implement most useful part of munmap() - remap() stuff is GQ's for shared memory
47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
|
|
#ifndef _PAGETABLE_H
|
|
#define _PAGETABLE_H 1
|
|
|
|
#include <stdint.h>
|
|
#include <sys/vm_i386.h>
|
|
|
|
#include "../vm.h"
|
|
|
|
/* An i386 pagetable. */
|
|
typedef struct {
|
|
/* Directory entries in VM addr space - root of page table. */
|
|
u32_t *pt_dir; /* page aligned (I386_VM_DIR_ENTRIES) */
|
|
u32_t pt_dir_phys; /* physical address of pt_dir */
|
|
|
|
/* Pointers to page tables in VM address space. */
|
|
u32_t *pt_pt[I386_VM_DIR_ENTRIES];
|
|
|
|
/* When looking for a hole in virtual address space, start
|
|
* looking here. This is in linear addresses, i.e.,
|
|
* not as the process sees it but the position in the page
|
|
* page table. This is just a hint.
|
|
*/
|
|
u32_t pt_virtop;
|
|
} pt_t;
|
|
|
|
/* Mapping flags. */
|
|
#define PTF_WRITE I386_VM_WRITE
|
|
#define PTF_PRESENT I386_VM_PRESENT
|
|
#define PTF_USER I386_VM_USER
|
|
#define PTF_GLOBAL I386_VM_GLOBAL
|
|
#define PTF_MAPALLOC I386_VM_PTAVAIL1 /* Page allocated by pt code. */
|
|
|
|
/* For arch-specific PT routines to check if no bits outside
|
|
* the regular flags are set.
|
|
*/
|
|
#define PTF_ALLFLAGS (PTF_WRITE|PTF_PRESENT|PTF_USER|PTF_GLOBAL)
|
|
|
|
#if SANITYCHECKS
|
|
#define PT_SANE(p) { pt_sanitycheck((p), __FILE__, __LINE__); }
|
|
#else
|
|
#define PT_SANE(p)
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|