요즘 개 같이 바빠서 정신을 똑바로 못 차리고 있당.
그냥 블로그에 글 하나 쓸 필요가 있지 않을까 싶어서 하나 써본당.
최근에 하던 과제 중 스케쥴러 시뮬레이션 하기라고 뭐 있었는데 내용은 간단하다.
MLQ 스케쥴러를 구현하는 것이당.
이 스케쥴러는 3 단계의 큐를 가지고 있다.
1단계 > 2단계 > 3단계 순의 우선 순위를 가지고 있고 당연 위의 작업들이 먼저 수행된다.
각 단계의 스케쥴 방식도 다른데 1단계의 일들은 RoundRobin에 타임 슬라이스는 2초로 돌고 2단계는 RR에 타임슬라이스는 4초, 마지막 3단계는 FCFS 다시말해 먼저 온 녀석들을 끝까지 한다.
간단하다. 작업이 들어오면 1단계에 넣는다. 1단계에 있던 녀석이 시퓨한테 불려 작업을 2초간 하다가 끝나면 끝나는거구 안 끝나면 2단계로 밀려난다. 그리고 시퓨는 다시 1단계부터 할 일을 검색하고 없으면 2단계 아니면 3단계로 간다.
2단계에서도 안 끝나면 3단계로 내려갈테구.
그래서 내가 할 일은 pid, arrival time, burst time(작업 소요시간)을 입력으로 받고 적당히 구현하면 된다.
이걸 왜 설명하고 있는지는 모르지만 어쩌다보니 그러고 있다.
이걸 C로 구현하려니 너무 귀찮아서 Gantt chart를 그리기 너무 귀찮아서 Python으로 구현하였다.
구현은 매우 쉬웠는데 문제는 시각화다.
이걸 Gantt chart로 표현하려니 갑자기 짜증이 나기 시작했다.
그래도 구현은 해야겠으니 matplotlib를 사용하였다.
그 결과 값은 다음과 같다.
가로 축은 시간 세로 축은 별꺼 아니다.
중간에 각 사각형은 1코어 시퓨 기준으로 현재 돌리고 있는 프로세스를 색으로 나타내고 위의 화살표는 arrival time, 밑의 화살표는 작업이 끝난 시점을 표시한다.
뭐 보는거와 같이 직관적으로 나타나고 프로우를 따라가보면 각 스케줄러 정책이 잘 시행되고 있는 것을 확인할 수 있다.
역시 파이썬 짱짱이시다. 정말로 쉽게 이런 것을 그릴 수 있다니 정말로 놀라울 따름이다.
전체 코드량 자체도 작고 만드는 과정에서도 직관적이다 보니 빠르게 빠르게 할 수 있었다.
파이썬으로 주석, 간트 차트 그리는거 포함 173줄 나왔는데 똑같이 C로 주석 없이 차트 안 그리고 264줄 나왔다 ㄷㄷ.
정말 쉽고 간편하게 내가 생각하는 대로 짤 수 있으며 바로바로 테스트 가능한 것은 큰 장점이다.
하지만 더 큰 장점이 있었는데 파이썬으로 코드를 짠 후 다시 C로 짜는 과정이다.
이미 파이썬으로 로직이 완성되어있으니 그냥 그 코드를 그대로 C로 옮기면 된다.
물론 Queue 같은 건 다 구현해야했지만 정말 짧은 시간에 C로 코드를 짤 수 있었다.
큐 만들고 하는 시간 다 포함해서도 1시간 조금 넘는 시간에 다 짰다.
아마 이걸 처음부터 C로 짰으면 지금 파이썬 + C 한 시간 보다도 훨씬 많이 걸렸을 것이 분명하다.
뭔가 파이썬 찬양론으로 끝나지만 사실 C 찬양론을 하려한다.
두 개의 같은 코드를 짜고 똑같은 입력을 돌렸을 시에 속도 차이가 어마어마하게 난다.
C로 짰을 시에는 1,000,000 프로세스 입력 시에 작업하는데 1초 정도 걸렸는데 파이썬으로는 10분이 걸렸다.
물론 자료구조 자체를 최소화하고 했으니 C가 훨씬 빠른게 당연하지만 그래도 정말 놀라울 정도다.
한번씩 속도 차이를 느끼긴 했지만 동일 코드를 가지고 해본 적이 없었는데 이번 기회를 통해 파이썬으로 깝치면 안된다는 사실을 깨달았다.
사실 C로 다시 짠 이유가 교수님이 과제를 파이썬으로 하길 권장한다길래 쫄려서 부록 개념으로 C 코드를 짠거다.
당연히 짜는 내내 하아아… 내가 왜 C로 짜고 있지, 이거 큐도 없어 ㅡㅡ 하면서 난리쳤는데 짜고 나니 알 것 같다.
C는 소중한 친구다.
사랑해 C
ps. 쓰고나니 왜 썼는지 잘 모르겠는데 아무리 생각해봐도 잘 모르겠다.