Xv6_study_210719

Day6

Xv6 의 스케쥴러에 priority 정책을 추가해 보았다. 먼저 process id 를 지정해 0에서 31 사이의 priority를 지정할 수 있는 system call 을 추가하였고, 테스트 코드를 통해서 작동을 확인했다. 그리고 나서 프로세스들의 priority를 반영하여 스케쥴링을 할 수 있도록 스케쥴러를 수정하였다.

  1. priority 를 반영하여 스케쥴링을 하려면, 스케쥴러에서 모든 프로세스를 한번은 체크하여 가장 큰 priority를 확인해야 한다. 또한 같은 priority를 가진 프로세스들은 round-robin 정책으로 스케쥴링이 되어야 한다. 한번 max priority를 구한 후에 round robin 으로 스케쥴링을 한다고 해도, 중간에 프로세스의 priority가 바뀌는 경우 문제가 발생한다. 스케쥴러에서 커서가 한번 움직일 때 마다 글로벌 하게 선언된 max priority를 업데이트 하면, 이런 경우를 커버할 수 있다고 생각이 되었지만 너무 cost가 컸다. 또 한가지 아이디어는 max proirty 업데이트가 일어날 수 있는 상황에서 그때 그때 업데이트를 해주는 것이었는데, 기존 system call들을 건들여야 할 필요가 있어서 우선 보류했다. 팀원들과 상황을 공유하면서 얻은 아이디어는, context switch가 일어날 때마다 업데이트를 하고, 동시에 커서 포인터를 유지해서 round robin이 가능하게 구현하는 것이었다. 아직 제대로 구현은 못해본 상황이라 가능한 예외상황들을 더 체크해봐야 한다.

  2. 현재의 xv6 스케쥴링에서는 두개의 cpu가 있지만, 각각의 스케쥴러에서 ptable을 돌면서 스케쥴링을 하기 때문에, 완벽하게 round robin 이 이뤄지지 않을 수도 있을 것 같다. 만약 하나의 글로벌 한 커서를 가지고 움직인다면 어떨까? lock 이 제대로 구현된다면 가능 할 것 같다. 하지만 lock 정책이 추가되면서 cost가 얼마나 커지는 지는 잘 모르겠다. 커서를 바꿔야하는 위치에서는 이미 lock이 구현되어 있을 수도 있다.