[SW사관학교 정글]53일차 TIL : alarm system call

김승덕·2022년 11월 10일
0

SW사관학교 정글 5기

목록 보기
93/150
post-thumbnail

pintos의 Alarm개요

  • Alarm : 호출한 프로세스를 정해진 시간 후에 다시 시작하는 커널 내부 함수
  • (pintos에서는) 알람 기능이 busy waiting을 이용하여 구현되어 있음
  • 알람 기능을 sleep/wake up을 이용하여 다시 구현

busy waiting

thread가 cpu를 점유하면서 대기하고 있는 상태이다. cpu 자원이 낭비되고, 소모 전력이 불필요하게 낭비될 수 있다.
그렇다면??? 이 방식을 고쳐야한다!(일단 busy waiting 방식을 먼저 익히고나서)

pintos의 thread lifecycle

  1. thread 생성
  2. scheduler에 의해 선택된 thread가 실행
  3. 선점당한 thread는 준비상태가 됨
  4. blocked → thread가 i/o와 같은 이벤트로 인해 대기중인 상태
  5. thread를 종료

Thread 기초

Thread 자료 구조

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. */
};

Thread_status 구조체

enum thread_status
{
    THREAD_RUNNING,
    THREAD_READY,
    THREAD_BLOCKED,
    THREAD_DYING
}

기본 동작 방식

하나의 thread가 CPU를 점유하고있으면 기다리고 끝나면 다른 thread가 점유하는 방식

→ 즉 loop 기반 wait()

이 방식은 CPU낭비가 심하고, 소모 전력이 불필요하게 낭비될수있다. 따라서 이 방식을 좀 업그레이드 시킨 sleep/wakeup 방식을 사용해야한다.

🙋‍♂️오늘의 하루는...

오늘 드디어 C학습을 통한 준비과정이 끝났다...
이제 그 유명한 pintos를 들어간다.. 허허... 🙄

profile
오히려 좋아 😎

0개의 댓글