소프트웨어 마이스터고등학교 2학년이 되자, 운영체제 라는 과목을 배우게 되었다. "프론트 전공에 운영체제를 배울 필요가 있나??" 라는 생각이 들었지만 막상 배워보니 재밌었다. 아직도 왜 배우는지는 모른다 그중 내가 흥미가 있던 부분은 CPU 스케쥴링 파트였는데, 쉽게 말하자면 "어떻게 하면 CPU 처리 시간이 가장 빠를까??" 라는 주제를 다루는 파트이다. 아래 사진을 보도록 하자.
간단히 설명하자면, 프로세스 ( CPU가 수행해야 할 작업 ) 의 도착시간과 실행시간 이 주어지고, 어떻게 하면 프로세스의 모든 작업을 끝내는 시간을 줄일 수 있을까? 에 대한 방법을 찾는 것이다.
위의 사진이 가장 단순한 방법 ( FCFS라 부른다. ) 으로써, 먼저 도착한 프로세스부터 수행하는 방식이다. 이렇게 되면 복잡하진 않지만, 모든 프로세스의 실행이 끝나는 데에, 오랜 시간이 걸린다. 한마디로 비효율적!! ( 이 외에도 다양한 방법이 있다. 구글에 운영체제 스케쥴링 방법! 이라 치면 자세히 나온다. 궁금하면 참고하길 바란다. )
이렇게 프로세스를 처리하게 되는데, 어떻게 처리되었는지 개발자가 편하게 보기 위해서 사용하는 것이 그래프와 간트차트 이다.
위의 사진을 간트차트라 부른다. p1,p2... 이게 프로세스의 이름 이고, 색으로 구분된 사각형의 양 끝 숫자가 각각 시작시간, 끝나는 시간 이다. 이를 보면 어떻게 처리되었는지 쉽게 볼 수 있다.
위의 사진이 그래프이다 구글에 사진이 없어서 내가 만든 사진을 가져왔다. 그래프가 간트차트와 다른 점이라면, 도착시간 까지 나타내줄 수 있다는 것이다. 그래서 나중에 평균 대기시간, 평균 반환 시간 이라는 것을 구하게 될 때 유용하게 활용된다.
그래서 만든 이유가 뭔데? 그 이유는 바로 운영체제 선생님께서 스케쥴링 문제 하나를 풀때마다 간트차트와 그래프를 일일이 그리고 있던 것!! 명색이 소프트웨어 고등학교인데, 이럴 때 학생의 기술을 써먹어줘야 하는 게 아닐까? 라는 생각에 바로 만들게 되었다. 사실 그날 할 것도 없기도 했고...ㅎㅎ
일단 시작부터 막막했다. 아까 위에서 봤던 FCFS 의 그래프와 간트차트를 자동으로 그려주는 걸 먼저 만들 계획 하나만 있었기에, 역시 공책과 연필을 활용한 생각할 시간이 필요했다.
그렇게 고안해 낸 방법이 무엇이냐,
컴포넌트간의 정보 전달이 필요하였기 때문에, 리덕스를 2교시정도 빡세게 공부해서 써먹어 보았다. 원래는 context api를 썼지만, 실무에서는 리덕스가 필수라는 얘기에 한번 배워보았다.
깔끔한 코드를 작성하기 위해, 컴포넌트 안의 함수 중 중복되는 함수를 거의 밖으로 빼주었다 ( 나중에 다른 스케쥴링 알고리즘을 개발할 수 있기 때문. 실제로 이 함수를 재사용해 SJF 알고리즘도 구현하였다 ).
순서는 디자인 -> 퍼블리싱 -> FCFS 알고리즘 완성 -> SJF 알고리즘 완성 으로 이루어졌다. 대충 2일정도 갈아 넣은 것 같다.
https://operating.netlify.app/ <- 웹사이트 주소
https://github.com/jidole02/OPERATING_SYSTEM_ALGORITHM_GUI <- 코드 보기
먼저 스케쥴링 종류를 선택한다. 그리고 프로세스의 정보를 작성하여 ADD 버튼을 눌러 추가한다. ( 무제한 추가 가능 ) 그리고 꼭 도착시간이 0 인 프로세스가 필요하다. 아니면 상식적으로 말이 안되는 스케쥴링 프로세스 정보를 모두 작성하였으면 START 버튼 을 누르기만 하면 끝이다.
그러면 알아서 그래프, 간트차트, 평균 대기시간, 평균 반환시간 모두 보여준다.
재밌는 경험이였고, 개발하는 의미를 가질 수 있었다. 만든 작업물은 배포하여 선생님께 드렸다. 좋아하셔서 다행이였다. 다음에도 누군가에게 도움이 될 수 있는 작업을 해보고 싶다. 성공은 사람들의 귀차니즘을 해결하는 데에서 나온다고 생각하기 때문에...
긴글 읽어주셔서 감사합니다!
와 고등학교 2학년이 이런걸 만들다니....
너무 존경스럽네요