Computer Science
-
Pintos Project #3 : Thread schedulingComputer Science/OS 2020. 5. 29. 15:22
1. 프로젝트 개요 pintos에 priority scheduler를 구현한다. 추가적으로, priority inversion을 해결하기 위해 priority inheritance 기능을 구현한다. 2. 문제 분석 현재 pintos는 RR방식의 scheduler가 구현되어 있다. 이를 수정하여 preemptive dynamic priority scheduling을 구현한다. 여기서 말하는 “preemptive하다, dynamic하다”는 의미는 thread가 run이던 도중에 자신의 priority보다 높은 priority를 가진 thread가 있다면 cpu를 반납한다는 의미이다. priority scheduling의 단점은 priority inversion이 생길 수 있다는 것이다. 이를 해결하기 위해서..
-
Pintos Project #2 : Alarm Clock의 개선Computer Science/OS 2020. 5. 29. 15:01
1. 프로젝트 개요 pintos 커널의 timer_sleep()함수를 개선한다. 2. 문제의 정의 devices/timer.c에 정의되어 있는 timer_sleep()함수는 기능적으로는 작동하지만, 현재 busy-waiting방식으로 구현되어 있다. Busy-waiting방식은 cpu 자원의 낭비를 초래한다. 3. 문제의 분석 timer_sleep()함수는 현재의 thread를 ticks 시간동안 잠재우는 함수이다. 기존의 timer_sleep()함수는 다음과 같다. while문을 살펴보면, scheduling에 의해 자신의 순서가 될 때마다 이 while문이 실행되고 timer_elapsed(start)를 호출한다. Timer_elapsed()함수는 start로부터 tick이 얼마나 경과하였는지 ret..
-
Pintos Project #1 : Pintos 환경 구축 (3/3)Computer Science/OS 2020. 5. 29. 14:57
3-2. 자료구조 분석 1. Thread의 tcb의 구조 1) Tid_t tid : thread의 고유한 id이다. Allocate_tid()함수에 의해 생성된다. 2) Enum thread_status status : thread의 상태를 나타낸다. 번호 이름 설명 1 THREAD_RUNNING thread가 run상태임을 나타내고, 한 시점에 cpu를 가지는 thread, 즉 run하는 thread는 1개이다. 2 THREAD_READY run인 thread가 interrupt로 인해 ready상태가 됨을 나타낸다. 또는 새로 만들어진 thread가 바로 실행(run)되지 않고, ready상태가 됨을 나타낸다. 이 상태의 thread는 ready queue에서 run하기를 기다린다. 본격적으로 Sch..
-
Pintos Project #1 : Pintos 환경 구축 (2/3)Computer Science/OS 2020. 5. 29. 14:56
12. thread_yield() 1) thread_yield() : thread switching에 의해 실행되는 첫 번째 경우의 함수이다. 이 함수는 run하던 thread가 time slice expired로 인해 cpu를 빼앗겨야 하는 경우에 실행되는 함수이다. 2) If구문을 보면, 현재 thread가 idle thread가 아니라면, 현재 thread를 ready queue에 넣고, 상태를 ready상태로 바꾼다. 3) Schedule() : shcedule함수로 인해 shceduling을 한다. 이 함수를 기준으로 run하는 thread와 다음 run할 thread의 context가 바뀐다. 13. thread_block() 1) thread_block() : thread switching에..