Xv6_study_210716

Day6

Xv6 의 스케쥴링 파트를 공부했다. 책과 코드를 함께 보면서 공부했는데 흐름이 잘 파악되지 않아서 시간이 많이 걸렸다.

  1. Inturrupt 가 발생해서 트랩이 일어나면, yeald -> sched -> switch 의 흐름을 따라서 스케쥴러의 문맥으로 바뀐다. 스케쥴러는 스케쥴링 정책에 따라서 다음 실행할 프로세스를 정하고, 또 다시 switch 함수를 통해서 해당 프로세스의 문맥으로 전환되어 실행된다. 여기에서 프로세스의 context 가 어떻게 save, restore 되는지가 어려웠다. 실행중이던 프로세스에서 인터럽트가 발생했을때 Eip 레지스터가 언제 저장되고, 어떻게 그 뒤로 context 로 만들어지는지가 주요한 포인트였는데, 함수가 call되었을 때 처럼 inturrupt가 일어났을때도 비슷한 방식으로 그것을 가져오는 것 같은데, 정확하게 이해하지는 못해서 공부를 더 해야한다..

  2. 완벽하진 않지만, 대략적으로 이해한 스케쥴러의 흐름을 가지고 어떻게 lab2 문제를 해결할지 잠깐 생각 해 보있다. 지금의 xv6 커널은 프로세스간의 priority가 없는 상태에서 round robin으로 스케쥴이 진행된다. 여기에 priority를 추가하려면, 먼저 프로세스 구조체에 그것을 표현하는 변수가 필요할 것이고, 그걸 가지고 어떻게 스케쥴링 정책을 표현할지를 생각해야 한다. 그리고 priorty를 결정하기 위해서 우선은 임의로 사용자가 그것을 줄 수 있게 system call을 구현하는것이 좋을 것 같다