diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-04-23 20:42:17 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-04-23 20:42:17 -0700 |
commit | c475ccc380c7a17d088ae6fa17060d39c59ec5d1 (patch) | |
tree | 945e030ba8a87d7f955cb0dc8585fd1cc19012f3 | |
parent | 785f85f5e6deb494e9836a7f4cea55eb60bc1d9e (diff) | |
download | mu-c475ccc380c7a17d088ae6fa17060d39c59ec5d1.tar.gz |
1153 - start of scheduler implementation
This first step is just stopping run() after a fixed number of instructions. But the scheduler layer isn't done yet.
-rw-r--r-- | cpp/020run | 6 | ||||
-rw-r--r-- | cpp/038scheduler | 19 |
2 files changed, 23 insertions, 2 deletions
diff --git a/cpp/020run b/cpp/020run index 456d578a..3e993f95 100644 --- a/cpp/020run +++ b/cpp/020run @@ -44,9 +44,11 @@ void run(recipe_number r) { run(routine(r)); } -void run(routine rr) { +void run(routine rr) +{ // curly on a separate line, because later layers will modify signature Current_routine = &rr; - while (!done(rr)) { + while (!done(rr)) // later layers will modify condition + { // Running One Instruction. vector<instruction>& instructions = steps(rr); size_t& pc = running_at(rr); diff --git a/cpp/038scheduler b/cpp/038scheduler new file mode 100644 index 00000000..3196795c --- /dev/null +++ b/cpp/038scheduler @@ -0,0 +1,19 @@ +//: Run multiple routines concurrently, without any guarantees on how the +//: operations in each are interleaved with each other. + +:(before "End Globals") +size_t Scheduling_interval = 500; + +//: first, add a deadline to run() +//: todo: these changes are ugly and brittle +:(replace{} "void run(recipe_number r)") +void run(recipe_number r) { + run(routine(r), Scheduling_interval); +} +:(replace "void run(routine rr)") +void run(routine rr, size_t time_slice) +:(replace "while (!done(rr))" following "void run(routine rr, size_t time_slice)") +size_t ninstrs = 0; +while (!done(rr) && ninstrs < time_slice) +:(after "Running One Instruction") +ninstrs++; |