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 |