thread가 cpu를 점유하면서 대기하고 있는 상태이다. cpu 자원이 낭비되고, 소모 전력이 불필요하게 낭비될 수 있다.
그렇다면??? 이 방식을 고쳐야한다!(일단 busy waiting 방식을 먼저 익히고나서)
struct thread
{
/* Owned by thread.c. */
tid_t tid; /* Thread identifier. */
enum thread_status status; /* Thread state.*/
char name[16]; /* Name (for debugging purposes). */
uint8_t *stack; /* Saved stack pointer. */
int priority; /* Priority. */
struct list_elem allelem; /* List element for all threads list. */
/* Shared between thread.c and synch.c. */
struct list_elem elem; /* List element. */
#ifdef USERPROG
/* Owned by userprog/process.c. */
uint32_t *pagedir; /* Page directory. */
#endif
/* Owned by thread.c. */
unsigned magic; /* Detects stack overflow. */
};
enum thread_status
{
THREAD_RUNNING,
THREAD_READY,
THREAD_BLOCKED,
THREAD_DYING
}
하나의 thread가 CPU를 점유하고있으면 기다리고 끝나면 다른 thread가 점유하는 방식
→ 즉 loop 기반 wait()
이 방식은 CPU낭비가 심하고, 소모 전력이 불필요하게 낭비될수있다. 따라서 이 방식을 좀 업그레이드 시킨 sleep/wakeup 방식을 사용해야한다.
오늘 드디어 C학습을 통한 준비과정이 끝났다...
이제 그 유명한 pintos를 들어간다.. 허허... 🙄