궁금한점

struct thread {
	/* Owned by thread.c. */
	tid_t tid;                          /* Thread identifier. */
	enum thread_status status;          /* Thread state. */
	char name[16];                      /* Name (for debugging purposes). */
	int priority;                       /* Priority. */

	/* Shared between thread.c and synch.c. */
	struct list_elem elem;              /* List element. */
	// run queue의 원소로 사용되거나 semaphore wait의 원소로 사용.
	// 동시에 두가지 기능을 할 수 있는 이유는 두 기능이 Mutually exclusive이기 때문이다. 
	// run queue에 들어가려면 ready state이어야 하고 
	// semaphore wait list에 들어가려면 block state이다. 
	// 스레드가 동시에 두가지 state를 가질 수 없으므로 elem을 통해 두가지 작업을 수행해도 문제가 생기지 않는다. 
#ifdef USERPROG
	/* Owned by userprog/process.c. */
	uint64_t *pml4;                     /* Page map level 4 */
#endif
#ifdef VM
	/* Table for whole virtual memory owned by thread. */
	struct supplemental_page_table spt;
#endif

	/* Owned by thread.c. */
	struct intr_frame tf;               /* Information for switching */
	unsigned magic;                     /* Detects stack overflow. */
};
             +---------------------------------+
 *           |              magic              |
 *           |            intr_frame           |
 *           |                :                |
 *           |                :                |
 *           |               name              |
 *           |              status             |
 *      0 kB +---------------------------------+

참고자료