1) 다중 프로그래밍
컴퓨터 시스템의 단일 사용자가 동시에 CPU와 입출력 장치를 사용할 수 없기 때문에 CPU의 사용율을 높이기 위하여 여러 개의 작업을 메모리에 유지하며 하나의 프로세스가 CPU를 사용하다가 입출력을 해야 할 경우에는 하나의 다른 작업을 선정하여 CPU에게 할당하여 사용하게 한다.
2) 다중 태스킹
컴퓨터를 사용하는 여러 사용자의 작업을 빠르게 스위칭하며 동작시켜 각 작업의 사용자가 빠른 응답을 받도록 동작시키는 방식으로 프로그램의 반응시간이 짧아 마치 혼자 컴퓨터를 사용하는 느낌을 갖게 한다.
멀티 프로세싱(Multi-processing)
멀티 프로세싱은 다수의 프로세서가 협력적으로 일을 처리하는 것을 의미한다. 여기서 주의해야 할 점은 프로세스가 아니라 프로세서이다.
보통 하나의 프로세서(CPU)가 하나의 작업을 맡지만 멀티 프로세싱은 다수의 프로세서가 다수의 작업을 함께 처리하는 것을 의미한다.
멀티 프로세싱의 장점은 하나의 프로세서가 고장이 나더라도 해당 프로세서가 진행 중인 작업은 다른 프로세서에서 수행하고 있기 때문에 작업이 정지되지 않는다.
또한, 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용한다면 각 데이터를 각 프로세서에게 할당할 필요 없이 하나의 공간에 데이터를 저장한 후 이를 공유하여 사용하도록 한다면 비용을 절약할 수 있다.
멀티 프로그래밍(Multi-programming)
멀티 프로그래밍은 하나의 프로세서가 하나의 프로세스를 수행하는 동안 다른 프로세스에 접근할 수 있도록 하는 방법을 의미한다.
초기 컴퓨터는 하나의 프로세서가 하나의 프로세스만 처리할 수 있도록 설계되었다. 하지만 하나의 프로세스를 처리하는 과정에서 프로세서의 처리 속도와 입출력 속도 간의 차이로 인해 입출력 처리가 완료될 때까지 기다리는 비효율적인 상황이 발생하게 된다.
멀티 프로그래밍은 입출력이 완료될 때까지 기다리는 시간을 버리지 말고 프로세서가 다른 프로세스를 처리할 수 있도록 해주는 것이다.
멀티 태스킹(Multi-tasking)
멀티 태스킹은 다수의 작업(Task)을 운영체제의 스케줄링에 의해 번갈아 가며 수행되도록 해주는 것을 의미한다.
프로세서는 특정 순간에 하나의 작업만 수행할 수 있다. 하지만 우리는 컴퓨터를 사용할 때 인터넷도 사용하고 카카오톡도 사용하고 게임도 하는 등 다양한 작업을 동시에 사용할 수 있다.
이는 운영체제가 다수의 작업을 스케줄링하여 우리가 느끼지 못하는 시간마다 작업을 번갈아가며 수행하여 우리 눈에는 동시에 수행되는 것처럼 보이게 해주기 때문이다.
멀티 태스킹의 스케줄링 방식은 멀티 프로그래밍 방식(Multi-programming), 시분할 방식(Time-sharing), 실시간 시스템 방식(Real-time)을 사용하여 수행된다.
멀티 프로그래밍은 위에서 언급하였고 시분할 방식은 CPU의 전체 사용 시간을 작은 작업 시간량으로 분할하여 그 시간량 동안 작업에게 번갈아가며 CPU를 할당해 주는 방식을 의미한다.
실시간 시스템 방식은 말 그대로 실시간으로 처리해 주는 것을 의미한다.
멀티 스레딩(Multi-threading)
멀티 스레딩은 하나의 프로세스를 다수의 스레드로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 의미한다.
즉, 하나의 프로세스가 동시에 여러 개의 스레드를 수행할 수 있도록 해주는 것이다.
하나의 프로세스에는 하나 이상의 스레드가 존재할 수 있다. 프로세스를 생성하는 비용보다 스레드를 생성하는 비용이 더 저렴하기 때문에 프로세스에 다수의 스레드를 생성하여 병렬처리하는 것이다.
또한, 프로세스는 데이터, 힙, 스택 영역을 서로 공유하지 않지만 스레드는 스택 영역을 제외한 데이터, 힙 영역을 서로 공유하기 때문에 메모리 부분에서도 훨씬 효율적이다.