Commit Graph

87 Commits

Author SHA1 Message Date
Brian Anderson 01dc4a8b26 core: Add priv::weaken_task 2012-04-07 19:56:41 -07:00
Brian Anderson e325146eb4 Merge remote-tracking branch 'brson/mainthread'
Conflicts:
	src/rt/rust_kernel.cpp
	src/rt/rust_scheduler.cpp
	src/rt/rust_scheduler.h
2012-04-03 20:30:01 -07:00
Brian Anderson c0e12854ed rt: Fix bugs in the osmain scheduler 2012-04-03 18:01:13 -07:00
Jon Morton 386069f39e actually remove memory.h; include cleanups 2012-04-03 16:02:38 -07:00
Jon Morton 632a4c9326 Refactor includes structure, getting rid of rust_internal.h
Many changes to code structure are included:
- removed TIME_SLICE_IN_MS
- removed sychronized_indexed_list
- removed region_owned
- kernel_owned move to kernel.h, task_owned moved to task.h
- global configs moved to rust_globals.h
- changed #pragma once to standard guard in rust_upcall.h
- got rid of memory.h
2012-04-03 16:02:38 -07:00
Brian Anderson e1858882a4 rt: Run a single-threaded scheduler on the main thread 2012-04-02 15:35:47 -07:00
Jon Morton 128a8b6ed5 remove rust_srv 2012-04-01 22:18:40 -05:00
Brian Anderson 7c1be236a5 rt: Introduce rust_sched_launcher_factory. Sorry, I need one 2012-04-01 17:27:18 -07:00
Brian Anderson fb528dd7d6 rt: Allow some schedulers to stay alive even without tasks to execute 2012-04-01 16:57:14 -07:00
Brian Anderson e78396850d Merge remote-tracking branch 'brson/mainthread'
Conflicts:
	src/rt/rust_sched_loop.cpp
	src/rt/rust_shape.cpp
	src/rt/rust_task.cpp
2012-04-01 00:15:04 -07:00
Brian Anderson de47fcfdf9 rt: Extract rust_thread_sched_launcher from rust_sched_launcher 2012-03-31 23:35:41 -07:00
Brian Anderson 21064637ed rt: Fix whitespace 2012-03-31 23:12:06 -07:00
Brian Anderson 6bf8d19712 rt: Extract rust_sched_launcher from rust_task_thread
rust_sched_launcher is actually responsible for setting up the thread and
starting the loop. There will be other implementations that do not actually
set up a new thread, in order to support scheduling tasks on the main OS
thread.
2012-03-31 19:51:29 -07:00
Jon Morton 9851a906a5 initialize cur_thread, first task on thread 0 2012-03-31 13:14:54 -05:00
Jon Morton 8aee42a382 Choose task thread in rust_scheduler by round robin
Remove the random context from rust_scheduler and use a simple round robin system to choose which thread a new task gets put on. Also, some incorrect tab indents around scoped blocks were fixed.
2012-03-31 02:14:44 -05:00
Brian Anderson f5f6135fd0 rt: Stop using large stacks for the main task 2012-03-21 19:10:32 -07:00
Brian Anderson b247de6458 rt: Remove lock_held_by_current_thread 2012-03-18 17:03:35 -07:00
Brian Anderson 1366d65660 rt: Remove remaining uses of rust_kernel::get_task_by_id 2012-03-15 11:10:52 -07:00
Brian Anderson b3f77bf927 rt: Change the way the kernel exits to avoid pthread leaks
This makes the kernel join every scheduler thread before exiting in order to
ensure that all threads are completely terminated before the process exits. On
my machine, for 32-bit targets, this was causing regular valgrind errors.
2012-02-27 14:25:32 -08:00
Brian Anderson 028af5cb6c rt: Change the lifecycle of tasks and schedulers for various reasons
This is in preparation for giving schedulers their own life cycle separate
from the kernel.

Tasks must be deleted before their scheduler thread, so we can't let the
scheduler exit before all its tasks have been cleaned up. In this scheme,
the scheduler will unregister tasks with the kernel when they are reaped,
then drop their ref on the task (there may still be others). When the task
ref count hits zero, the task will request to be unregistered from the
scheduler, which is responsible for deleting the task.

Instead of having the kernel tell the scheduler to exit, let the scheduler
decide when to exit. For now it will exit when all of its tasks are
unregistered.
2012-02-08 15:42:51 -08:00
Brian Anderson 7685e5de94 rt: Refactor the rust_kernel interface a bit 2012-02-08 15:42:47 -08:00
Brian Anderson ad80823a6c rt: Introduce scheduler ids 2012-02-08 15:33:40 -08:00
Brian Anderson c76b81cddf rt: Delete schedulers immediately upon release
This will be needed once we support dynamically changing schedulers.
2012-02-08 15:33:40 -08:00
Brian Anderson f39e64d56a rt: Change the scheme used for terminating the kernel
Instead of joining on the scheduler threads, instead keep a count of active
schedulers. When there are no more schedulers raise a signal for the main
thread to continue.

This will be required once schedulers can be added and removed from the
running kernel.
2012-02-08 15:33:40 -08:00
Brian Anderson 21d783c338 rt: Make isaac_init not a template 2012-02-03 23:48:12 -08:00
Brian Anderson f7a727e861 rt: Remove some silly locks in rust_scheduler 2012-02-03 23:48:12 -08:00
Brian Anderson 12fa90888e rt: Clean up the way the kernel tracks tasks 2012-02-03 23:48:12 -08:00
Brian Anderson 8d881967a2 rt: Extract rust_scheduler from rust_task_thread 2012-02-03 23:48:12 -08:00
Brian Anderson f94339cc1c rt: Rename rust_scheduler to rust_task_thread 2012-02-03 23:48:12 -08:00
Brian Anderson 3b4dd26ff1 rt: Remove lock_and_signal::signal_all 2012-02-02 18:29:03 -08:00
Brian Anderson cd774fc5fa rt: Stop waking up the scheduler on a timer 2012-02-02 18:23:01 -08:00
Brian Anderson b1a090c7c4 rt: Remove unused arguments in rust_scheduler 2012-02-02 18:17:33 -08:00
Brian Anderson 6c632c71c6 rt: Simplify reap_dead_tasks 2012-02-02 18:10:24 -08:00
Brian Anderson f719ea552b rt: Remove rust_scheduler::interrupt_flag. Unused 2012-02-02 18:10:24 -08:00
Brian Anderson aee83d2ff1 rt: Only wake up all schedulers when no tasks are left
At the moment there's not really any reason to be raising this signal,
since they schedulers wake up periodically anyway, but once we remove
the timer this will be how the schedulers know to exit.
2012-02-02 18:10:24 -08:00
Brian Anderson 5449b886d3 rt: Remove bogus task reaping from the scheduler 2012-02-02 18:10:24 -08:00
Brian Anderson 3978fbff8b rt: Remove rust_task::can_schedule. Does nothing 2012-02-02 18:10:24 -08:00
Brian Anderson ed3a5ad5ad rt: Remove running_on flag. Does nothing 2012-02-02 18:10:24 -08:00
Brian Anderson 57cad61353 rt: Remove task pinning. Does nothing 2012-02-02 18:10:24 -08:00
Brian Anderson 8693fcc2d7 rt: Remove yield timers 2012-02-02 18:10:24 -08:00
Brian Anderson 5c89938544 rt: Remove rust_timer. Unused 2012-02-01 16:05:17 -08:00
Brian Anderson 6548cdd59b rt: Make the initial segment of the main task's stack 1MB
This is a trick to fool microbenchmarks. Closes #1681
2012-01-29 21:20:39 -08:00
Brian Anderson 0616cba62b libcore: Add sys::set_exit_status
Sets the process exit code
2012-01-12 22:24:27 -08:00
Niko Matsakis 8506241f3a fix how we walk functions to match new closure fmt 2012-01-06 22:40:31 -08:00
Graydon Hoare 5930463faa Tidy up some drift in runtime logging, close #1380. 2011-12-28 11:53:12 -08:00
Brian Anderson 9e6ff44d93 rt: Make __morestack work on win32 2011-12-08 16:47:33 -08:00
Brian Anderson 5d1a1dc420 rt: Rename stk_seg.limit to stk_seg.end
rust_task is using the word limit it two ways, so one has to change.
2011-12-06 21:45:53 -08:00
Brian Anderson 6da1a3fcd6 rt: Refactor record_sp into task::record_stack_limit 2011-12-01 15:26:42 -08:00
Brian Anderson 6bdf347418 rt: Make __morestack (without unwinding) work on 32-bit linux 2011-11-22 18:02:10 -08:00
Brian Anderson 0dfa1410d3 rt: Remove task::on_wakeup. Unused 2011-11-18 10:32:27 -08:00