[PintOS] 1-2 Priority Scheduling 을 들어가기 전에...

JunHyeok Kim·2024년 5월 16일
0

💇🏼‍♀️ CPU 스케쥴링의 역사와 관련 기술

CPU 스케쥴링 기법은 시간이 지남에 따라 발전해 왔으며, 이는 SW 스레드 기법, 세마포어, 잠금, 뮤텍스 등의 발전과 밀접한 관련이 있습니다. 각 시대별로 개발된 기술과 역사를 살펴보겠습니다.

🙋‍♀️ 초기 단일 프로그램 환경 (1940년대 ~ 1950년대)

초기 컴퓨터 시스템에서는 한 번에 하나의 프로그램만 실행할 수 있었습니다. 이러한 환경에서는 CPU 스케쥴링이 필요하지 않았습니다. 프로그램이 실행되면 CPU를 점유한 채 종료될 때까지 계속 실행되었습니다.

👨🏼‍⚖️ 배치 시스템 (1960년대 초반)

배치 시스템은 여러 개의 프로그램을 순차적으로 실행할 수 있게 해주었습니다. 이때 가장 간단한 CPU 스케쥴링 기법인 FCFS(First-Come, First-Served) 방식이 사용되었습니다(1960년). 프로그램들은 순서대로 CPU를 할당받아 실행되었습니다.

🏃🏻‍♂️ 다중 프로그래밍 (1960년대 중반)

다중 프로그래밍 환경에서는 여러 개의 프로그램이 동시에 메모리에 상주할 수 있었습니다. 이때 CPU 스케쥴링 알고리즘이 필요해졌습니다. 초기에는 SJF(Shortest Job First, 1966년), SRTN(Shortest Remaining Time Next, 1968년) 등의 단순한 알고리즘이 사용되었습니다.

다중 프로그래밍 환경에서는 프로세스 간 동기화 문제가 발생했습니다. 이를 해결하기 위해 세마포어(semaphore, 1965년)와 뮤텍스(mutex)와 같은 기법이 도입되었습니다.

🥿 Plus!

초기 컴퓨터에서는 하나의 프로그램이 완전히 실행되기를 기다려야 했습니다. 그리고 그 후에 다음 프로그램이 실행될 수 있었습니다. 문제는 프로세서의 처리 속도와 입출력 장치의 속도가 현저하게 다르다는 것입니다. 이것은 입출력 작업이 완료될 때까지 프로세서가 대기해야 한다는 것을 의미합니다. 그렇기 때문에 한 프로그램이 입출력 작업을 마치기 전까지는 다음 프로그램이 실행될 수 없었습니다.

🍄 세마포어 (1965년)

세마포어는 공유 자원에 대한 접근을 제어하는 데 사용되는 동기화 기법입니다. 네덜란드 컴퓨터 과학자 에드스거 다이크스트라(Edsger Dijkstra)가 1965년에 제안했습니다. 세마포어는 카운터 값과 두 가지 원자적 연산(wait, signal)으로 구성됩니다.

🍈 뮤텍스 (1960년대 후반)

뮤텍스는 상호 배제(mutual exclusion)를 위한 동기화 기법입니다. 뮤텍스는 lock과 unlock 연산으로 구성됩니다. 한 번에 하나의 프로세스만 뮤텍스를 소유할 수 있어 공유 자원에 대한 독점적 접근이 가능합니다.

🦴 시분할 시스템 (1960년대 후반)

시분할 시스템은 다중 프로그래밍 환경에서 더 나아가 CPU 시간을 작은 단위로 나누어 여러 프로세스에게 할당하는 방식입니다. 이를 위해 라운드 로빈(Round-Robin) 스케쥴링 알고리즘이 도입되었습니다(1966년).

시분할 시스템에서는 스레드 개념이 등장했습니다(1960년대 후반). 스레드는 프로세스 내에서 실행 단위로, 프로세스의 자원을 공유하며 독립적으로 실행됩니다. 스레드 기법은 CPU 활용도를 높이고 응답성을 개선했습니다.

🧄 스레드 기법 (1960년대 후반)

스레드 기법은 프로세스 내에서 여러 개의 실행 흐름을 생성할 수 있게 해줍니다. 각 스레드는 독립적인 스택과 레지스터를 가지지만, 프로세스의 코드, 데이터, 파일 등의 자원을 공유합니다. 스레드 기법을 통해 병렬성과 응답성을 높일 수 있습니다.

스레드 간에도 동기화 문제가 발생할 수 있습니다. 이를 해결하기 위해 세마포어, 뮤텍스, 모니터(monitor, 1970년대 초반) 등의 기법이 사용됩니다.

🦍 현대 CPU 스케쥴링 알고리즘 (1970년대 ~ 현재)

현대 운영체제에서는 다양한 CPU 스케쥴링 알고리즘이 사용됩니다. 대표적인 알고리즘으로는 다음과 같은 것들이 있습니다.

  • 우선순위 스케쥴링(Priority Scheduling, 1970년대 초반)
  • 다단계 큐 스케쥴링(Multilevel Queue Scheduling, 1970년대 후반)
  • 공정 Share 스케쥴링(Fair Share Scheduling, 1980년대 초반)
  • 실시간 스케쥴링(Real-Time Scheduling, 1970년대 후반)

이러한 알고리즘들은 프로세스나 스레드의 우선순위, 실행 시간, 자원 사용량 등을 고려하여 CPU 자원을 효율적으로 할당하고 공정성을 유지하려고 합니다.

🍙 결론

CPU 스케쥴링 기법은 SW 스레드 기법, 세마포어, 잠금, 뮤텍스 등의 발전과 밀접하게 연관되어 있습니다. 초기의 단순한 환경에서 시작하여 점차 복잡해지면서 다양한 알고리즘과 기법들이 1960년대부터 현재까지 지속적으로 등장했습니다. 이를 통해 CPU 자원을 효율적으로 관리하고, 프로세스 및 스레드 간 동기화 문제를 해결할 수 있게 되었습니다.

0개의 댓글