리액트로 선생님 선물 드리기🔥

jiwon_1214·2021년 5월 30일
13
post-thumbnail

결과물 먼저보기


운영체제 스케쥴링 그래프 & 간트차트

프로세스 정보 입력란

서론


소프트웨어 마이스터고등학교 2학년이 되자, 운영체제 라는 과목을 배우게 되었다. "프론트 전공에 운영체제를 배울 필요가 있나??" 라는 생각이 들었지만 막상 배워보니 재밌었다. 아직도 왜 배우는지는 모른다 그중 내가 흥미가 있던 부분은 CPU 스케쥴링 파트였는데, 쉽게 말하자면 "어떻게 하면 CPU 처리 시간이 가장 빠를까??" 라는 주제를 다루는 파트이다. 아래 사진을 보도록 하자.

부가 설명

간단히 설명하자면, 프로세스 ( CPU가 수행해야 할 작업 ) 의 도착시간과 실행시간 이 주어지고, 어떻게 하면 프로세스의 모든 작업을 끝내는 시간을 줄일 수 있을까? 에 대한 방법을 찾는 것이다.

FCFS ( First Come First Service )

위의 사진이 가장 단순한 방법 ( FCFS라 부른다. ) 으로써, 먼저 도착한 프로세스부터 수행하는 방식이다. 이렇게 되면 복잡하진 않지만, 모든 프로세스의 실행이 끝나는 데에, 오랜 시간이 걸린다. 한마디로 비효율적!! ( 이 외에도 다양한 방법이 있다. 구글에 운영체제 스케쥴링 방법! 이라 치면 자세히 나온다. 궁금하면 참고하길 바란다. )

그래프 & 간트차트


이렇게 프로세스를 처리하게 되는데, 어떻게 처리되었는지 개발자가 편하게 보기 위해서 사용하는 것이 그래프와 간트차트 이다.

간트차트


위의 사진을 간트차트라 부른다. p1,p2... 이게 프로세스의 이름 이고, 색으로 구분된 사각형의 양 끝 숫자가 각각 시작시간, 끝나는 시간 이다. 이를 보면 어떻게 처리되었는지 쉽게 볼 수 있다.

그래프


위의 사진이 그래프이다 구글에 사진이 없어서 내가 만든 사진을 가져왔다. 그래프가 간트차트와 다른 점이라면, 도착시간 까지 나타내줄 수 있다는 것이다. 그래서 나중에 평균 대기시간, 평균 반환 시간 이라는 것을 구하게 될 때 유용하게 활용된다.

만들게 된 이유


그래서 만든 이유가 뭔데? 그 이유는 바로 운영체제 선생님께서 스케쥴링 문제 하나를 풀때마다 간트차트와 그래프를 일일이 그리고 있던 것!! 명색이 소프트웨어 고등학교인데, 이럴 때 학생의 기술을 써먹어줘야 하는 게 아닐까? 라는 생각에 바로 만들게 되었다. 사실 그날 할 것도 없기도 했고...ㅎㅎ

어떤 알고리즘?


시작

일단 시작부터 막막했다. 아까 위에서 봤던 FCFS 의 그래프와 간트차트를 자동으로 그려주는 걸 먼저 만들 계획 하나만 있었기에, 역시 공책과 연필을 활용한 생각할 시간이 필요했다.

최종으로 정한 방법

그렇게 고안해 낸 방법이 무엇이냐,

    1. 프로세스 정보를 입력받는다. ( 이름, 도착시간, 실행시간 3개면 끝 )
    1. 받은 정보 배열을 재조합한다.
    1. 그래프는 순서대로 그려야 하기에, 순서대로 아이디를 줘서 자기 순서를 찾아준다.
    1. 이를 바탕으로 그래프와 간트차트를 싹 그려준다.

리덕스

컴포넌트간의 정보 전달이 필요하였기 때문에, 리덕스를 2교시정도 빡세게 공부해서 써먹어 보았다. 원래는 context api를 썼지만, 실무에서는 리덕스가 필수라는 얘기에 한번 배워보았다.

클린 코드 작성

깔끔한 코드를 작성하기 위해, 컴포넌트 안의 함수 중 중복되는 함수를 거의 밖으로 빼주었다 ( 나중에 다른 스케쥴링 알고리즘을 개발할 수 있기 때문. 실제로 이 함수를 재사용해 SJF 알고리즘도 구현하였다 ).

구현


순서는 디자인 -> 퍼블리싱 -> FCFS 알고리즘 완성 -> SJF 알고리즘 완성 으로 이루어졌다. 대충 2일정도 갈아 넣은 것 같다.

사용해보자

https://operating.netlify.app/ <- 웹사이트 주소
https://github.com/jidole02/OPERATING_SYSTEM_ALGORITHM_GUI <- 코드 보기

먼저 스케쥴링 종류를 선택한다. 그리고 프로세스의 정보를 작성하여 ADD 버튼을 눌러 추가한다. ( 무제한 추가 가능 ) 그리고 꼭 도착시간이 0 인 프로세스가 필요하다. 아니면 상식적으로 말이 안되는 스케쥴링 프로세스 정보를 모두 작성하였으면 START 버튼 을 누르기만 하면 끝이다.

그러면 알아서 그래프, 간트차트, 평균 대기시간, 평균 반환시간 모두 보여준다.

결론


재밌는 경험이였고, 개발하는 의미를 가질 수 있었다. 만든 작업물은 배포하여 선생님께 드렸다. 좋아하셔서 다행이였다. 다음에도 누군가에게 도움이 될 수 있는 작업을 해보고 싶다. 성공은 사람들의 귀차니즘을 해결하는 데에서 나온다고 생각하기 때문에...

긴글 읽어주셔서 감사합니다!

profile
프론트엔드 개발자입니다!

3개의 댓글

comment-user-thumbnail
2021년 5월 30일

와 고등학교 2학년이 이런걸 만들다니....
너무 존경스럽네요

답글 달기
comment-user-thumbnail
2021년 5월 30일

잘 읽었습니다.

답글 달기
comment-user-thumbnail
2021년 6월 2일

운영체제 선생님이라길래 무슨 뜻인가 했더니 고등학생이셨군요. 정말 대단합니다. 존경스럽네요. 😍

답글 달기