From 85709e4a0d2e6c1a2d360dccc1c54fd12e9548cd Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 10 Jan 2012 16:57:46 -0500 Subject: [PATCH] Split out (and elaborate) example --- os-example.rkt | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ os.rkt | 44 ------------------------------------ 2 files changed, 61 insertions(+), 44 deletions(-) create mode 100644 os-example.rkt diff --git a/os-example.rkt b/os-example.rkt new file mode 100644 index 0000000..ccede1f --- /dev/null +++ b/os-example.rkt @@ -0,0 +1,61 @@ +#lang racket/base + +(require "os.rkt") +(require racket/pretty) + +(define (yield k) + (kernel-mode-transition (subscription 'none (lambda (_) (k)) '() '()) + '() + '() + '())) + +(define (quit) + (kernel-mode-transition (subscription 'none #f '() '()) + '() + '() + '())) + +(define (print x k) + (kernel-mode-transition (subscription 'none (lambda (_) (k)) '() '()) + '() + (list (lambda () (pretty-print x))) + '())) + +(define (super-alarm msecs) + (wrap-evt (alarm-evt msecs) (lambda (_) (current-inexact-milliseconds)))) + +(define (sleep n k) + (kernel-mode-transition (subscription 'none + #f + '() + (list (message-handler + (super-alarm (+ (current-inexact-milliseconds) n)) + (lambda (_message) + (lambda (_state) + (k)))))) + '() + '() + '())) + +(define (spawn thunk k) + (kernel-mode-transition (subscription 'none (lambda (_) (k)) '() '()) + '() + '() + (list (runnable 'none (lambda (_) (thunk)))))) + +(define (example-process delay) + (print "SLEEPING" + (lambda () + (sleep delay + (lambda () + (yield + (lambda () + (print "HELLO" + quit)))))))) + +(ground-vm (lambda (p m) (p m)) + (lambda () + (spawn (lambda () + (example-process 1000)) + (lambda () + (example-process 2000))))) diff --git a/os.rkt b/os.rkt index 323d7e3..c126441 100644 --- a/os.rkt +++ b/os.rkt @@ -315,47 +315,3 @@ [_ (error 'ground-vm "Outermost VM may not spawn new siblings or send or receive metamessages")])))) - -;--------------------------------------------------------------------------- - -(require racket/pretty) - -(define (yield k) - (kernel-mode-transition (subscription 'none (lambda (_) (k)) '() '()) - '() - '() - '())) -(define (quit) - (kernel-mode-transition (subscription 'none #f '() '()) - '() - '() - '())) -(define (print x k) - (kernel-mode-transition (subscription 'none (lambda (_) (k)) '() '()) - '() - (list (lambda () (pretty-print x))) - '())) -(define (super-alarm msecs) - (wrap-evt (alarm-evt msecs) (lambda (_) (current-inexact-milliseconds)))) -(define (sleep n k) - (kernel-mode-transition (subscription 'none - #f - '() - (list (message-handler - (super-alarm (+ (current-inexact-milliseconds) n)) - (lambda (_message) - (lambda (_state) - (k)))))) - '() - '() - '())) -(ground-vm (lambda (p m) (p m)) - (lambda () - (print "SLEEPING" - (lambda () - (sleep 2000 - (lambda () - (yield - (lambda () - (print "HELLO" - quit)))))))))