Changes between Initial Version and Version 1 of kernel_switch


Ignore:
Timestamp:
Oct 23, 2014, 11:34:07 AM (10 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • kernel_switch

    v1 v1  
     1= GIET-VM / Context Switch Handler =
     2
     3[[PageOutline]]
     4
     5The [source:soft/giet_vm/giet_kernel/ctx_handler.c ctx_handler.c] and [source:soft/giet_vm/giet_kernel/ctx_handler.h ctx_handler.h] files define the data structure and functions used to handle context switching. They are prefixed by "_" to remind that they can only be executed by a processor in kernel mode.
     6
     7A task context is an array of 64 words = 256 bytes.
     8It contains copies of processor registers (when the task is preempted):
     9 * GPR[i] : generally stored in slot (i). $0, $26 & $27 are not saved.
     10 * HI & LO registers : used by multiply/divide instructions.
     11 * CP0 registers : EPC, SR, CR, BVAR
     12 * CP2 registers : PTPR
     13It contains some general informations associated to the task:
     14 * TTY    : TTY channel global index
     15 * NIC    : NIC channel global index
     16 * CMA    : CMA channel global index
     17 * HBA    : HBA channel global index
     18 * DMA    : DMA channel local index
     19 * TIM    : TIM channel local index
     20 * PTAB   : page table virtual base address
     21 * LTID   : Task local index (in scheduler)
     22 * VSID   : Virtual space index
     23 * RUN    : Task state (0 => sleeping / 1 => runnable )
     24 * TRDID  : Thread ID index (in vspace)
     25
     26|| [0] ***   || [8]   $8    || [16] $16   || [24] $24  || [32] EPC   || [40] TTY   || [48] TRDID ||
     27|| [1] $1    || [9]   $9    || [17] $17  || [25] $25  || [33] CR     || [41] DMA  || [49] ***      ||
     28|| [2] $2    || [10] $10  || [18] $18  || [26]  LO   || [34] SR      || [42] NIC   || [50] ***      ||
     29|| [3] $3    || [11] $11  || [19] $19  || [27]  HI    || [35] BVAR  || [43] TIM  || [51] ***      ||
     30|| [4] $4    || [12] $12  || [20] $20  || [28] $28  || [36] PTAB  || [44] HBA  || [52] ***      ||
     31|| [5] $5    || [13] $13  || [21] $21  || [29] SP     || [37] LTID  || [45] CMA || [53] ***      ||
     32|| [6] $6    || [14] $14  || [22] $22  || [30] $30  || [38] VSID  || [46] GTID || [54] ***      ||   
     33|| [7] $7    || [15] $15  || [23] $23  || [31] RA    || [39] PTPR   || [47] RUN  || [55] ***      ||
     34
     35
     36
     37 === void _ctx_switch() ===
     38This function performs a context switch between the running (calling) task and  another runable task, using a round-robin sheduling policy between all tasks allocated to a given processor (static allocation).
     39It selects the next runable task to resume execution.
     40If the only runable task is the current task, return without context switch.
     41If there is no runable task, the scheduler switch to the default "idle" task.
     42The return address contained in $31 is saved in the current task context (in the ctx[31] slot), and the function actually returns to the address contained in the ctx[31] slot of the next task context.
     43
     44 === void _ctx_eret() ===
     45The address of this function is used to initialise the return address in the "idle" task context.
     46
     47 === void _idle_task() ===
     48This function is executed task when no other task can be executed.
     49
     50
     51