The READY queues just contain pointers to process table entries. Each process table entry contains a pointer that can be used to point to the next READY process on its READY queue when the process is in fact READY.
#define NR_SCHED_QUEUES 16 /* MUST equal minimum priority + 1 */ EXTERN struct proc *rdy_head[NR_SCHED_QUEUES]; /* ptrs to ready list headers */ EXTERN struct proc *rdy_tail[NR_SCHED_QUEUES]; /* ptrs to ready list tails */