운영체제의 CPU 스케줄링

이전 포스팅과 연결되는 부분이 많아서 이전 포스팅을 읽고 오면 이해하기 좋습니다. 이전 포스팅에서 운영체제의 스케줄링 방식과 Context Switching에 대한 글을 쓰겠다고 했다. 따라서 이번 포스팅의 주제로는 스케줄링 알고리즘을 선정했다. 스케줄링? 먼저 스케줄링이 무엇이고, 왜 이런 게 필요한지 알아보도록 하자. 사실 이번 글 뒷부분에서 언급할 여러 가지 스케줄링 알고리즘을 달달달 외우는 것보다 어쩌면 스케줄링이 왜 필요한지 그 이유를 아는 것이 더 중요할 수도 있다. 스케줄(Schedule)이라는 단어에서 알 수 있듯, 운영체제에서 말하는 스케줄링은 운영체제가 CPU의 자원을 어떤 프로세스에게 할당해 줄 지 그 일정을 짜는 것이라고 이해하면 쉽다. 이전 포스팅에서 언급했던 대로 프로세스 간의 ..

프로세스와 스레드의 차이

CS 첫 포스팅으로는 프로세스와 스레드의 차이에 대해 설명하는 글을 쓰기로 결정했다. 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다고 하고, 이 부분이 운영체제 과목에서도 기본으로 다루고 갈 정도로 중요하기 때문이다. 따라서 이번 글에서는 프로세스와 스레드의 차이에 대한 글뿐만 아니라, 프로그램/프로세스/스레드 모두에 대한 설명을 쓰게 될 것 같다. 프로세스와 스레드에 대한 정의 먼저 프로세스와 스레드가 무엇인지 정의부터 살펴보고 가자. 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위. 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위. 일단 정의만 들어보면 무슨 소리인지 쉽게 이해하기 힘들다. 정의..