Re: Multitasking Preview Release
- Posted by Michael Nelson <mikestar13 at sbcglobal.net> Sep 26, 2005
- 642 views
Rob Craig wrote: >>I haven't looked into the details of ME, >>but couldn't you do a full context switch of all of your ME data >>after each task_yield(), and also at the start of a new task, >>such that you copy (this may be just a pointer copy internally) >>all the ME data for the new current task >>into the simple variables that you use today? e.g. >>me_data1 = all_tasks_me_data1[task_self()] >>me_data2 = all_tasks_me_data2[task_self()] ... >>You could create an ME context-switch routine for this, >>and maybe create a wrapped version of task_yield() >>to add this extra operation. >>It would be extra overhead at each context switch, >>but if the user did not use multitasking, he wouldn't need it, >>and he would have little or no overhead. >>You could also retain the structure of all the >>ME internal variables you are using now. Yes, of course that's it. That does reduce the cost to programs that don't use tasks to zero. All I would need is to redefine task_yield and do my context switching there. I could even make task_yield a no-op in contexts where task switching is inappropriate, for example in the middle of a class definition. This will add some overhead to task_yield, but fairly small. (I might also redefine task_create to reserve space for context switches to reduce the added overhead to task_yield.)