악명 높은 pintos
프로젝트가 시작됐다.
이번 주에는 thread
가 어떻게 만들어지며 관리되고 자원을 어떻게 사용하는지에 대해 다뤘다.
기존의 BusyWating 방식에서 Sleep Wake방식으로 바꾸는 과제였다.
cpu가 인터럽트를 발생시킬때마다 tick을 올려서 시간을 관리하는 것을 보고 신기했었는데
인터럽트에 대해서 알아보고 싶어서 깊게 들어가니 어셈블리어 언어가 나왔는데
더 이상 이해못하고 넘어 갔던 아쉬움이 남는다.
기존에 구현한 alarmSystem에서의 thread들은 FIFO방식으로 스케줄링 되는데,
이것을 우선순위를 부여해 관리하게 하는 과제였다.
정렬해서 넣어주는 코드만 구현해주면 되는 문제였기 때문에 굉장히 수월하게 해결했다.
thread의 우선순위에 따라 preemption이 일어날때 발생하는 priority inversion problem을 donation으로 해결하는 과제였다.
여러가지 찾아보다가 그림으로 설명해둔 블로그를 보게되었는데, 이해하는데 굉장히 도움을 많이 받았다.