프로세스(Process)
프로세스라는 명칭은 낯설수 있는데, 프로그램은 친숙하리라 생각된다.
우리가 흔히 말하는 프로그램이 실행되면 프로세스 인스턴스가 생성된다.
인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재된다는 뜻이다.
일반적으로 프로세스와 프로그램을 같은 개념으로 이야기할 때가 많다.
하지만 엄밀히 따지면 이 둘은 다른 개념이다.
- 프로그램: 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램.exe
- 프로세스: 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태

이미지와 같이 운영체제(OS)를 통해 여러 프로세스(프로그램)를 실행하고 관리할 수 있다.
이를 멀티태스킹이라고 한다.
멀티 태스킹
멀티태스킹이란 OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위를 말한다.
이를 통해 여러 응용 프로그램을 동시에 열고 작업 할 수 있다는 장점이 있다.
음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 모두 멀티태스킹 덕분이다.
이를 다이어그램으로 표현하면 다음과 같다.

위의 그림처럼 프로세스는 Code, Data, Stack, Heap 영역의 네가지 구조로 되어있다.
각각의 구조의 특징은 다음과 같다.
- 코드 영역(code area) : 프로그래머가 작성한 프로그램이 코드 영역에 작성된다
- 데이터 영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
- 스택 영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다.
- 힙 영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다. ex) malloc
위의 특징 외에도 코드 영역과 데이터 영역은 선언할 때 그 크기가 결정되는 정적 영역이지만,
스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역이다.
원칙적으로 서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않는다.
만약 프로세스간 서로 다른 자원에 접근하려면 프로세스간의 통신을 해야한다.
Tip
그림에서는 여러 프로세스가 동시에 실행되고 관리 되는 것처럼 보이지만, 사실 CPU는 한번에 한가지 명령어밖에 처리하지 못한다.
즉, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고, 관리하는 것이다.
CPU는 상상이상으로 빠르기 때문에, 프로세스들을 번갈아가며 실행하고 관리하는 것이 마치 동시에 하는 것처럼 보일 뿐이다.
스레드(Thread)

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
즉 프로세스를 생성하면 기본적으로 하나의 (메인)스레드가 생성되는 셈이다.

스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

프로세스 VS 스레드 결론
Tip
프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다.
멀티 프로세스와 멀티 스레드
멀티 프로세스
멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

멀티 프로세스는 다음과 같은 특징이 있다.
- 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.
- 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다.
- 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
- 메모리 사용량이 많다.
- 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있다.
멀티 스레드
멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
일반적으로 멀티스레드르 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB 와 같은 긴 작업(Long-running task) 을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.
그림 11을 살펴보면 두개의 스레드가 서로에게 방해주지 않고, 각자 할일을 하는 모습을 보여주고 있다.

멀티 스레드는 다음과 같은 특징이 있다.
- 응답성이 좋다. 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 적으로 수행된다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
- 구현 및 테스트, 디버깅이 어렵다
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.
멀티 프로세스와 멀티 스레드의 비교
종류 | 장점 | 단점 |
멀티 프로세스 | 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. | 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 Context SwitchingVisit Website으로 인한 성능 저하를 유발한다. |
멀티 스레드 | 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다. 또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다. |
프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다. |
멀티 스레드는 멀티 프로세스에 비해 상당한 이점을 가지는 반면 위험 부담도 따른다.
그 이유를 알아보자.
자원의 효율성증대
멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우 프로세스를 생성하여 자원을 할당하는 비용이 적고, 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
응답 시간 단축 및 처리 비용 감소
프로세스간 IPC를 사용하여 통신하는 것은 상대적으로 비용이 크다.
하지만 스레드는 프로세스의 메모리 영역을 공유하여 스레드 간의 통신 비용이 적게 든다.
또한 프로세스간의 Context Switching은 느린 반면 쓰레드간의 Context Switching 은 빠른데, 그 이유는 Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문이다.
멀티 스레드의 안정성 문제
여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다.
Tip
Critical Section:
임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
멀티 프로세스의 프로그램은 문제가 생기면 해당 프로세스가 중단되거나 중단 시키고 다시 시작 하면된다.
하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있다.
'CS 지식 > 운영체제' 카테고리의 다른 글
[운영체제] 데드락(DeadLock)이란? (0) | 2023.03.23 |
---|---|
[운영체제] 동기 / 비동기 (0) | 2023.03.13 |
[운영체제] 스케줄링 관련 면접 대비 질문 정리 (0) | 2023.02.20 |
[운영체제] 스케줄링 기법 정리 (0) | 2023.02.19 |
[운영체제] 프로세스 스레드 면접 대비 질문 정리 (0) | 2023.02.15 |
프로세스(Process)
프로세스라는 명칭은 낯설수 있는데, 프로그램은 친숙하리라 생각된다.
우리가 흔히 말하는 프로그램이 실행되면 프로세스 인스턴스가 생성된다.
인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재된다는 뜻이다.
일반적으로 프로세스와 프로그램을 같은 개념으로 이야기할 때가 많다.
하지만 엄밀히 따지면 이 둘은 다른 개념이다.
- 프로그램: 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램.exe
- 프로세스: 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태

이미지와 같이 운영체제(OS)를 통해 여러 프로세스(프로그램)를 실행하고 관리할 수 있다.
이를 멀티태스킹이라고 한다.
멀티 태스킹
멀티태스킹이란 OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위를 말한다.
이를 통해 여러 응용 프로그램을 동시에 열고 작업 할 수 있다는 장점이 있다.
음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 모두 멀티태스킹 덕분이다.
이를 다이어그램으로 표현하면 다음과 같다.

위의 그림처럼 프로세스는 Code, Data, Stack, Heap 영역의 네가지 구조로 되어있다.
각각의 구조의 특징은 다음과 같다.
- 코드 영역(code area) : 프로그래머가 작성한 프로그램이 코드 영역에 작성된다
- 데이터 영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
- 스택 영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다.
- 힙 영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다. ex) malloc
위의 특징 외에도 코드 영역과 데이터 영역은 선언할 때 그 크기가 결정되는 정적 영역이지만,
스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역이다.
원칙적으로 서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않는다.
만약 프로세스간 서로 다른 자원에 접근하려면 프로세스간의 통신을 해야한다.
Tip
그림에서는 여러 프로세스가 동시에 실행되고 관리 되는 것처럼 보이지만, 사실 CPU는 한번에 한가지 명령어밖에 처리하지 못한다.
즉, 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고, 관리하는 것이다.
CPU는 상상이상으로 빠르기 때문에, 프로세스들을 번갈아가며 실행하고 관리하는 것이 마치 동시에 하는 것처럼 보일 뿐이다.
스레드(Thread)

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
즉 프로세스를 생성하면 기본적으로 하나의 (메인)스레드가 생성되는 셈이다.

스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

프로세스 VS 스레드 결론
Tip
프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다.
멀티 프로세스와 멀티 스레드
멀티 프로세스
멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

멀티 프로세스는 다음과 같은 특징이 있다.
- 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.
- 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다.
- 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
- 메모리 사용량이 많다.
- 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있다.
멀티 스레드
멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
일반적으로 멀티스레드르 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB 와 같은 긴 작업(Long-running task) 을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.
그림 11을 살펴보면 두개의 스레드가 서로에게 방해주지 않고, 각자 할일을 하는 모습을 보여주고 있다.

멀티 스레드는 다음과 같은 특징이 있다.
- 응답성이 좋다. 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 적으로 수행된다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
- 구현 및 테스트, 디버깅이 어렵다
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.
멀티 프로세스와 멀티 스레드의 비교
종류 | 장점 | 단점 |
멀티 프로세스 | 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. | 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 Context SwitchingVisit Website으로 인한 성능 저하를 유발한다. |
멀티 스레드 | 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다. 또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다. |
프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다. |
멀티 스레드는 멀티 프로세스에 비해 상당한 이점을 가지는 반면 위험 부담도 따른다.
그 이유를 알아보자.
자원의 효율성증대
멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우 프로세스를 생성하여 자원을 할당하는 비용이 적고, 스레드는 프로세스 내의 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
응답 시간 단축 및 처리 비용 감소
프로세스간 IPC를 사용하여 통신하는 것은 상대적으로 비용이 크다.
하지만 스레드는 프로세스의 메모리 영역을 공유하여 스레드 간의 통신 비용이 적게 든다.
또한 프로세스간의 Context Switching은 느린 반면 쓰레드간의 Context Switching 은 빠른데, 그 이유는 Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문이다.
멀티 스레드의 안정성 문제
여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다.
Tip
Critical Section:
임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
멀티 프로세스의 프로그램은 문제가 생기면 해당 프로세스가 중단되거나 중단 시키고 다시 시작 하면된다.
하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있다.
'CS 지식 > 운영체제' 카테고리의 다른 글
[운영체제] 데드락(DeadLock)이란? (0) | 2023.03.23 |
---|---|
[운영체제] 동기 / 비동기 (0) | 2023.03.13 |
[운영체제] 스케줄링 관련 면접 대비 질문 정리 (0) | 2023.02.20 |
[운영체제] 스케줄링 기법 정리 (0) | 2023.02.19 |
[운영체제] 프로세스 스레드 면접 대비 질문 정리 (0) | 2023.02.15 |