Comments (1)
We have implemented a heap allocation algorithm that is the exact same used in the kernel in user space.
We have extracted the implementation from the kernel into a middle common library and used by both.
User space uses inc_heap
syscall which is like sbrk
.
The location of the heap is calculated like so:
const HEAP_OFFSET_FROM_ELF_END: usize = 1 * MB;
const DEAFULT_MAX_HEAP_SIZE: usize = 1 * GB;
let (_min_addr, max_addr) = load_elf_to_vm(elf, file, &mut vm)?;
// set it quite a distance from the elf and align it to 2MB pages (we are not using 2MB virtual memory, so its not related)
let heap_start = align_up(max_addr + HEAP_OFFSET_FROM_ELF_END, PAGE_2M);
let heap_size = 0; // start at 0, let user space programs control it
let heap_max = DEAFULT_MAX_HEAP_SIZE;
It moves 1MB
after the elf and align it on 2MB
boundary, then the max possible heap (for now) is 1GB
starts at 0
, and can be increased with inc_heap
syscall.
/// Add/Remove to/from the heap and return the previous end of the heap before the change
/// If this is an `Add` (positive), it will return the address of the new block
/// If this is a `Remove` (negative), the result will generally be useless
/// Use with `0` to get the current heap end
fn sys_inc_heap(increment: isize);
from emerald.
Related Issues (20)
- Create Netcat similar program
- Create ping software
- Create an ethernet network driver
- Create TCP stack
- Implement IO waiting
- Implement file append and truncate
- Better logging support in the kernel, `info!/debug!` similar macros, and logging to vga and file
- Profiling + stack unwinding
- User space processes performance metrics
- shared memory maps
- Handle sigfaults and memory errors in kernel and userspace programs
- Implement process signals and abnormal events
- Distribute the custom rust toolchain
- Add support for open file operations
- File canonicalize
- Improvement for fat file names
- Environment variables
- Add kernel cmdline
- Remove `embedded_graphics` from the kernel
- Add more tests for AML/ASL
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emerald.