Macros | |
#define | lodsReg(reg) |
Functions | |
void | scheduler_add_thread () |
Add the given thread to the given priority list for the scheduler. in: edx -> APPDATA, ecx = priority. More... | |
void | scheduler_remove_thread () |
Remove the given thread from the corresponding priority list for the scheduler. in: edx -> APPDATA. More... | |
void | find_next_task () |
info: Find next task to execute in: bl = SCHEDULE_ANY_PRIORITY: consider threads with any priority bl = SCHEDULE_HIGHER_PRIORITY: consider only threads with strictly higher priority than the current one, keep running the current thread if other ready threads have the same or lower priority retval: ebx = address of the APPDATA for the selected task (slot-base) ZF = 1 if the task is the same warning: [current_slot_idx] = bh – as result [current_slot] is not set to new value (ebx)!!! scratched: eax,ecx More... | |
Variables | |
label | irq0 |
label | change_task |
dd | context_counter |
far_jump: .offs dd ? .sel dw ? noname & halyavin More... | |
dd | next_usage_update |
dd | timer_ticks |
label | update_counters |
label | updatecputimes |
label | do_change_task |
ax | Mov |
set gs selector unconditionally More... | |
rd | scheduler_current |
[scheduler_current + i*4] = zero if there are no threads with priority i, pointer to APPDATA of the current thread with priority i otherwise. More... | |
TIMER | struc |
dd | _next |
dd | _exp_time |
dd | _func |
dd | _arg |
rd | rdy_head |
label | pick_task |
label | shed |
param eax= task More... | |
label | enqueue |
param eax= task More... | |
#define lodsReg | ( | reg | ) |
void find_next_task | ( | ) |
info: Find next task to execute in: bl = SCHEDULE_ANY_PRIORITY: consider threads with any priority bl = SCHEDULE_HIGHER_PRIORITY: consider only threads with strictly higher priority than the current one, keep running the current thread if other ready threads have the same or lower priority retval: ebx = address of the APPDATA for the selected task (slot-base) ZF = 1 if the task is the same warning: [current_slot_idx] = bh – as result [current_slot] is not set to new value (ebx)!!! scratched: eax,ecx
void scheduler_add_thread | ( | ) |
Add the given thread to the given priority list for the scheduler. in: edx -> APPDATA, ecx = priority.
void scheduler_remove_thread | ( | ) |
Remove the given thread from the corresponding priority list for the scheduler. in: edx -> APPDATA.
dd _arg |
dd _exp_time |
dd _func |
dd _next |
label change_task |
dd context_counter |
label do_change_task |
label enqueue |
param eax= task
label irq0 |
gs Mov |
set gs selector unconditionally
dd next_usage_update |
label pick_task |
rd rdy_head |
rd scheduler_current |
[scheduler_current + i*4] = zero if there are no threads with priority i, pointer to APPDATA of the current thread with priority i otherwise.
label shed |
TIMER struc |
dd timer_ticks |
label update_counters |
label updatecputimes |