본문 바로가기
Computer Science/Operating System

멀티 프로세스와 멀티 스레드

by Ray 2021. 4. 27.

1. 프로세스란?

실행 중인 프로그램으로, 디스크에서 메모리로 적재되어 CPU의 할당을 받은 작업단위를 말한다.

별도의 메모리 영역(Code, Data, Stack, Heap)을 포함하여, CPU시간, 주소 공간등의 시스템 자원을 운영체제로부터 할당받는다.

단순하게 말하면, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스이며, 일을 처리하는 일련의 과정을 말한다.

⇒ 자신만의 공간과 자원을 할당받아 사용하는 작업의 단위

2. 스레드란?

스레드는 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소공간이나 자원을 공유할 수 있는 프로세스의 실행 단위이다.

스레드는 프로세스 내의 Code, Data, Heap 영역을 공유하고 Stack영역은 별도로 할당받는다.

⇒ 프로세스 안에서 실행의 흐름 단위로, 다른 스레드와 프로세스의 자원을 공유한다.

3. 멀티 프로세스 VS 멀티 스레드

- 멀티 프로세스 : 다수의 프로세스가 서로 협력하여 작업을 처리하는 것을 말한다.

    프로세스가 독립적으로 실행되기 때문에, 하나에 문제가 생겨도 다른 프로세스들은 영향을 받지 않는다.

    멀티 스레드처럼 동기화작업을 따로 필요로 하지 않는다..

    자원 소모, 메모리 낭비, 문맥 교환으로 인해 비효율적이다. (+ IPC로 인한 통신비용)

- 멀티 스레드 :

    하나의 프로세스를 여러개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는것을 말한다.

    메모리의 공간과 자원의 소모를 줄이며, 문맥 교환역시 비용이 적고 빠르다.

    자원 공유 문제가 발생할 수 있으며, 하나의 스레드에 문제가 발행사면 전체 프로세스가 영향을 받는다.

4. 멀티 테스킹, 멀티 프로그래밍

- 멀티 테스킹 : 다수의 Task를 운영체제의 스케쥴링에 따라 번갈아 가면서 수행하는 것을 말한다.

    프로세서가 각각의 Task를 조금씩 번갈가가면서 처리하기 때문에, 사용자는 마치 여러 개의 Task가 동시에 수행되는 것처럼 느낀다. 

- 멀티 프로그래밍 :  어떤 프로세서가 A작업(프로세스)을 처리할 때, 낭비되는 시간(대기 시간)동안 다른 프로세스(B 작업)를 처리하는 것을 말한다.

    프로세스 A를 처리하는 동안, 입출력 이벤트 같은 인터럽트가 발생하여 프로세서가 대기해야 할 때, 그 시간을 낭비하지 않고 다른 프로세스를 처리하도록 하여 자원의 낭비를 최소화하느 것이다.