KThread: Difference between revisions

Subv (talk | contribs)
mNo edit summary
No edit summary
Line 7: Line 7:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! Offset
! Type
! Type
! Description
! Description
|-
|-
| 0x0
| 0x0
Line 45: Line 45:
| 0x34
| 0x34
| u8
| u8
| Whether the thread is in the scheduler's queue and is ready to run
| Scheduling mask
|-
|-
| 0x35
| 0x35
Line 174: Line 174:
With the following declarations: <code>struct KThreadLinkedList { KThread *first, *last; };</code> and <code>struct KThreadLinkedListNode { KThread *prev, *next; };</code>.
With the following declarations: <code>struct KThreadLinkedList { KThread *first, *last; };</code> and <code>struct KThreadLinkedListNode { KThread *prev, *next; };</code>.


=Thread Scheduling Mask=
The thread scheduling mask is made of a low nibble (enum) and a high nibble (bitfield).
Low nibble:
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0
| The thread is not scheduled
|-
| 1
| The thread is scheduled
|-
| 2
| The thread is being terminated
|}
High nibble:
{| class="wikitable" border="1"
|-
! Mask
! Description
|-
| 0
| Nothing special
|-
| 0x8 (bit 3)
| The thread has been debug-locked
|}
A thread is scheduled *if and only if* its (full) scheduling mask is exactly 1. This allows debug-(un)locking of threads to be done transparently.
=Thread Affinity Mask=
=Thread Affinity Mask=