diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2014-08-22 11:30:36 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2014-08-22 11:30:36 -0700 |
commit | 2ee76bda373acdce71f560908e7c15ae7d97b8f8 (patch) | |
tree | 7365e282d38dee1d10023e60f6de3e9515576c47 /new.arc | |
parent | 1f18a4fd0a44f1e2f7a4b9d6ef0f8e5832c0c069 (diff) | |
download | mu-2ee76bda373acdce71f560908e7c15ae7d97b8f8.tar.gz |
72 - broken
Thoroughly confused about how to manage memory at initialization time, and how to maintain type information in the simulated machine.
Diffstat (limited to 'new.arc')
-rw-r--r-- | new.arc | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/new.arc b/new.arc index 1a31712c..d78ea925 100644 --- a/new.arc +++ b/new.arc @@ -1,27 +1,45 @@ -; Memory management primitive. - -(= Allocator_start 1000) ; lower locations reserved +(load "mu.arc") ; memory map: 0-2 for convenience numbers ; for these, address == value always; never modify them (= Zero 0) (= One 1) (= Two 2) -; memory map: 3 for root custodian (size 1) -; 'new' will allocate from custodians. Custodians will be arranged in trees, -; each node knowing its parent. The root custodian controls all memory -; allocations. And it's located at.. -(= Root_custodian 3) (enq (fn () (run `(((,Zero integer) <- literal 0) ((,One integer) <- literal 1) - ((,Two integer) <- literal 2) - ((,Root_custodian location) <- literal ,Allocator_start)))) + ((,Two integer) <- literal 2)))) + initialization-fns*) + +; high-water mark for global memory used so far +; just on host, not in simulated memory +(= Memory-used-until 3) +(def static-new (n) + (inc Memory-used-until n)) + +; copy types* info into simulated machine +(= Type-table Memory-used-until) +(enq (fn () + (each (type typeinfo) types* + (prn type " " typeinfo))) + initialization-fns*) + +(reset) + +(init-fn sizeof) ; todo + +;; 'new' - simple slab allocator. Intended only to carve out isolated memory +;; for different threads/routines as they request. +; memory map: 3 for root custodian (size 1) +(= Root_custodian 3) +(= Allocator_start 1000) ; lower locations reserved + +(enq (fn () + (run `(((,Root_custodian location) <- literal ,Allocator_start)))) initialization-fns*) -;; simple slab allocator. Intended only to carve out isolated memory for -;; different threads/routines as they request. +; (type-addr val) <- new (custodian x), (type t) ; memory map: 4-5 locals for slab allocator (init-fn new ((4 integer-address) <- copy (3 location)) |