pintos 요약 - 1. Thread

OS 2015. 7. 5. 02:24

1. What?

1.1 alarm clock 구현, busy waiting 해결

1.2 priority scheduler 구현

1.3 priority aging 구현


2. How?

2.1 alarm clock

- 기존의 timer sleep이 busy waiting으로 되어있음, while을 계속 확인해야한다. cpu time 낭비

- timer interrupt 사용, 설정 시간이 지났을 때 ready state로 바꾸고 ready list에 삽입해줌 

  (timer interrupt handler에서 처리해줌)


2.2 priority scheduling

- 기존에는 thread가 생성된대로 scheduling 되고 있음, convoy effect이 발생할 수 있고, average waiting     time이 길다. thread가 생성될 때( thread_create() ), thread_unblock() 을 호출하면서 ready list의 맨 뒤    에 삽입됨.

- thread들이 priority에 따라 scheduling 되도록 구현


2.3 priority aging

- 기본적인 priority scheduling은 starvation 문제가 발생할 수 있음

- thread가 생성된 시간에 비례하여 priority를 증가시키는 aging을 구현


3. Detail

3.1 alarm clock

- timer_sleep이 호출될 때, timer_sleep() 에서 wake up time을 thread의 wakeup_time에 저장후, sleep list   에 저장

- thread를 block시키고 context switching 되는데, 이 때 interrupt는 disable 되어야함

- 일정 시간마다 timer interrupt가 발생하고, timer_interrupt() 에서는 sleep list 내의 thread들을 확인, 조건   문을 통해 wake up time이 지났는지 확인

- 확인되었으면 sleep list에서 삭제한 후, thread를 unblock 시켜줌 


3.2 priority scheduling

- 기존의 방식은 FCFS, scheduler는 ready list의 맨 앞에 있는 thread부터 처리함

- scheduler는 priority가 큰 순서대로 처리하므로, ready list를 priority가 큰 순서대로 정렬해야함

- list를 정렬하기 위해 compare 함수를 만들음


3.3 priority aging

- ready list를 정렬하면서 priority가 작은 thread들은 ready list의 맨 뒤로 밀려남

- ready list의 맨 끝의 thread들의 priority를 증가시켜줌 

'OS' 카테고리의 다른 글

pintos 요약 - 2-2. User Program (file system & synchronization)  (0) 2015.07.05
pintos 요약 - 2-1. User Program Basic  (3) 2015.07.05
8장 memory management  (0) 2013.12.09
TLB  (0) 2013.12.08
strlcpy  (1) 2013.10.04
Posted by bogus919
,