1128-TIL(pintos-project1-Priority Scheduling-Sync)

그로밋·2023년 11월 28일
0

krafton jungle

목록 보기
37/58
  • task - comparing the priority when list_elem a and list_elem b are given.
    -> point is accessing waiters from list_elem.
    -> after checking the structure, access it.

  • sema_elem - list_elem, semaphore(list(waiters) - list of threads, value)
    -> path : list_elem - sema_elem - sema - list - threads
    -> now that I know the path, access it by each type of data.

/** 첫번째 인자로 주어진 세마포어를 위해 대기중인 가장 높은 우선순위의 스레드와, 
 * 두번째 인자로 주어진 세마포어를 위해 대기중인 가장높은 우선순위의 스레드와 비교*/
bool
cmp_sem_priority (const struct list_elem *a, const struct list_elem *b, void *aux) {
    // semaphore_elem으로부터 각 semaphore_elem의 쓰레드 디스크립터를 획득. -> thread discriptor 라는게 뭐지
    struct semaphore_elem *se_a = list_entry(a, struct thread, elem);
    struct semaphore_elem *se_b = list_entry(b, struct thread, elem);
    
    struct semaphore sema_a = se_a->semaphore;
    struct semaphore sema_b = se_b->semaphore;
    
    struct list *waiters_a = &sema_a.waiters;
    struct list *waiters_b = &sema_b.waiters;
    
    struct thread* t_a = list_begin(waiters_a);
    struct thread* t_b = list_begin(waiters_b);

    return t_a->priority > t_b->priority;
    
}
profile
Work as though your strength were limitless. <S. Bernhardt>

0개의 댓글