Operating System

멀티태스킹, 멀티프로그래밍, 타임쉐어링, 멀티프로세싱 알아보기

mysterious dev 2024. 3. 27. 04:58

유니프로그래밍(단일프로그래밍)

항상 컴퓨터 내에서는 하나의 프로세스만이 실행되며,

프로세스가 종료되어야 다음 프로세스가 실행될 수 있는 형태의 시스템이다.

프로그램이 실행되기 위해서는 반드시 메모리에 올라와야 하며,
따라서 유니프로그래밍 시스템에서는 메모리에 단 하나의 프로그램만 올라오게 된다.

 

유니프로그래밍

위와 같이 한 프로그램이 끝나야만 다음 프로그램이 실행될 수 있으므로

프로세스가 I/O 작업 등으로 인해 멈추게 되면 그 동안 CPU는 아무런 작업을 하지 않게 된다.

 

이로 인해 유니프로그래밍 시스템은 CPU 사용률(Utilization)이 좋지 않다.

 

 

 

 

 

 

멀티태스킹

특정 프로세스가 실행할 수 없는 상태가 되었을 때,

CPU가 대기하지 않고 곧바로 다른 프로세스를 실행하도록 하여 CPU 사용률을 높일 수 있다.

이렇게 다수의 작업을 동시에 처리하는 방식을 멀티태스킹이라 한다.

 

멀티태스킹을 위해서는 다수의 프로세스가 메인 메모리에 상주해야 하는데,

이로 인해 반드시 메모리 관리 기능이 필요하다.

 

또한 다수의 프로세스 중 다음에 실행할 프로세스를 선택하기 위해 스케줄링 기능이 필요하다.

일반적으로 운영체제는 아래 스케줄링 방식들 중 하나를 사용한다.

  • 멀티프로그래밍(MultiProgramming) 방식
  • 시분할(Time Sharing)
  • 실시간(Real-time) 시스템 방식

 

 

 

 

 

멀티프로그래밍

한 프로세스가 실행중일 때 I/O 작업이 발생하면 CPU가 다른 프로세스를 실행하는 방식이다.

I/O 작업이 발생한 경우에만 CPU가 다른 프로세스를 실행한다.

 

멀티 프로그래밍에서는 위와 같이 프로그램 A 실행 중에 I/O 작업이 발생하면 B를 실행하여 CPU를 효율적으로 사용한다.

 

CPU 입장에서는 효율적이나, A가 I/O 작업에 들어가기 전까지 B는 계속 대기해야 한다는 문제점이 있다.

즉 CPU 사용시간이 길어지면 다른 프로세스는 계속 대기해야 하는 것이다.

 

우리가 흔히 사용하는 인터랙티브한 프로세스는 요청에 대해 즉시 응답을 해야 하는데,

멀티프로그래밍 방식을 사용하면 응답 시간(response time)이 길어지므로 문제가 된다.

응답 시간: 유저의 명령을 받았을 때, 이를 실행할때까지의 시간
(실행 완료 시간이 아닌, 실행을 시작하는 시간을 의미.)

 

이와 같은 문제점을 해결하기 위해 시분할 방식이 등장했다.

 

 

 

 

 

 

시분할(Time Sharing)

시분할 방식에서는 여러 프로세스가 CPU를 아주 짧은 시간(quantum 혹은 time slice)씩 나누어 번갈아 실행하게 하여 각 프로세스의 응답 시간을 최소화한다.

 

 

 

 

 

 

 

✔️ 참고 - 용어들에 대해서

책 혹은 글마다 설명이 조금씩 다르지만 참고한 책을 기반으로...
메모리에 여러 프로그램을 올려 실행하는 기법 자체를 멀티프로그래밍 혹은 멀티태스킹이라 부른다고 한다.
또한 대화형(interactive) 멀티프로그래밍을 time sharing 기법이라고 표현한다.

 

 

 

 

 

✔️ 참고 - 스레드의 등장 이후 멀티태스킹

스레드의 등장 이후 멀티태스킹은 여러 프로세스 혹은 여러 스레드가 동시에 실행되는 것을 의미한다.

 

 

 

 

 

 

 

 

 

멀티프로세싱

두 개 이상의 CPU(Processor)를 사용하는 시스템을 멀티프로세싱 시스템이라 부른다.

멀티프로세싱은 대칭형 멀티프로세싱(SMP: symmetric multiprocessing) 시스템과,
비대칭형 멀티프로세싱(ASMP: asymmetric multiprocessing) 시스템으로 구분된다.

 

 

 

 

✔️ 멀티태스킹 VS 멀티프로세싱

멀티태스킹은 1개의 CPU가 여러 프로세스를 서로 다른 시간대에 실행하지만,

멀티프로세싱 시스템에서는 CPU 자체가 여러개이므로 여러 프로세스를 동일 시간에 실행할 수 있다.

멀티태스킹 방식에서 타임 쉐어링을 하더라도 각 프로세스가 실행되는 시간대는 다르다.

 

멀티태스킹 방식을 동시성(concurrent) 프로그래밍,

멀티 프로세싱 방식을 병렬(parallel) 프로그래밍이라고도 부른다.