typedef struct sThread
{
// --- threads.c's
- // 0
struct sThread *Next; //!< Next thread in list
- tSpinlock IsLocked; //!< Thread's spinlock
+ tShortSpinlock IsLocked; //!< Thread's spinlock
volatile int Status; //!< Thread Status
int RetStatus; //!< Return Status
- // 16
Uint TID; //!< Thread ID
Uint TGID; //!< Thread Group (Process)
Uint PTID; //!< Parent Thread ID
char *ThreadName; //!< Name of thread
// --- arch/proc.c's responsibility
- // 40
//! Kernel Stack Base
tVAddr KernelStack;
- // 44 (x86)
//! Memory Manager State
tMemoryState MemState;
- // 48 (x86)
//! State on task switch
tTaskState SavedState;
// --- threads.c's
- // 60
int CurFaultNum; //!< Current fault number, 0: none
tVAddr FaultHandler; //!< Fault Handler
int NumTickets; //!< Priority - Chance of gaining CPU
Uint Config[NUM_CFG_ENTRIES]; //!< Per-process configuration
+
+ volatile int CurCPU;
} tThread;
// === FUNCTIONS ===
extern tThread *Proc_GetCurThread(void);
extern tThread *Threads_GetThread(Uint TID);
-extern void Threads_Wake(tThread *Thread);
+extern void Threads_SetTickets(tThread *Thread, int Num);
+extern int Threads_Wake(tThread *Thread);
extern void Threads_AddActive(tThread *Thread);
+extern tThread *Threads_GetNextToRun(int CPU, tThread *Last);
#endif