정글 개발일지 / Week08 Pintos

HEllo·2022년 5월 25일

1 . Alarm Clock.
Pintos에서는 알람 기능이 Busy waiting을 이용하여 구현되어 있다. 우리가 구현해야 할 알람 기능을 sleep/wait up을 이용하여 다시 구현한다.

Busy waiting

  • Thread가 CPU를 점유하면서 대기하고 있는 상태.
  • CPU 자원이 낭비 되고, 소모 전력이 불필요하게 낭비될 수 있다.

자고 있는 쓰레드들도 ready list에 들어가 있어서 CPU를 점유.
sleep & awake 방식으로 구현.

이제 쓰레드가 sleep 함수를 호출하면 해당 스레드는 ready_list가 아닌 sleep_list로 들어가게 된다.

timer_interrupt가 일어날때마다(1tick) sleeplist에 깨울 애 있는지 확인하고 깨울 애 있으면 sleep list에서 삭제하고 ready list에 넣는다. (구현 완료)


2-1. Priority Scheduling
현재 pintos의 스케줄러는 라운드 로빈으로 구현되어 있다. 이를 우선순위를 고려하여 스케줄링 하도록 수정한다.

Pintos는 ready list에 삽입된 순으로 thread가 CPU를 점유. pintos는 thread가 unblock되거나 생성될 때 우선순위와 관련 없이 ready_list의 가장 뒤에 삽입.

Ready list에 새로 추가된 thread의 우선순위가 현재 CPU를 점유중인 thread의 우선순위보다 높으면, 기존 thread를 밀어내고 CPU를 점유하도록 한다. (구현 완료)

2-2 Priority Scheduling and Synchronization
여러 스레드가 lock, semaphore, condition variable 을 얻기 위해 기다릴 경우 우선순위가 가장 높은 thread가 CPU를 점유 하도록 구현.
현재 pintos는 semaphore를 대기 하고 있는 스레드들의 list인 waiters가 FIFO로 구현되어있다. (구현 완료)

2-3 Priority Inversion Problem
Priority inversion Problem : 우선순위가 높은 쓰레드가 우선순위 낮은 쓰레드를 기다리는 현상.

solution : 낮은 우선순위를 가진 쓰레드에게 높은 우선순위를 가진애가 우선순의를 donation 한다. (문제 해결)

코드와 해설 깃허브 주소

profile
HEllo

0개의 댓글