목차
1. 프로세스 개념 & 특징
2. 스레드 개념 & 특징
3. 멀티 프로세스 & 멀티 스레드
1. 프로세스(Process) 개념 & 특징
개념
프로세스란 실행 중인 프로그램의 인스턴스를 말한다. 여기서 프로그램, 프로세스 이 둘은 어떻게 다를까?
프로그램(Program) = .exe 파일(명령어 + 정적 데이터의 모음, 디스크에 존재)
프로세스(Process) = 실행 중인 프로그램(디스크에 존재하는 프로그램이 실행된 것, 메모리에 올라가서 실행)
프로그램이란 명령어와 정적데이터로 이루어진 집합이다. '크롬' 이나 '카카오톡' 이 프로그램에 해당한다.
프로그램과 프로세스의 관계는 객체지향 언어(java, python 등)에서 '클래스' 와 '인스턴스' 관계를 떠올리면 쉽다. Student 클래스를 활용하여 student_a, student_b 등 인스턴스를 만들어서 활용하듯이, 명령어와 정적테이터로 이루어진 프로그램을 통해 실제로 실행하는 인스턴스를 만들 수 있다. 이 인스턴스가 프로세스이다.
실제 프로그램와 프로세스의 예시를 살펴보자.
크롬을 예로 들어보자면 바탕화면에 있는 크롬이 프로그램이고, 실제로 동작하고 있는 각각의 크롬 탭과 창이 프로세스이다.
특징
프로세스의 가장 큰 특징은 각각의 프로세스가 OS로부터 독립적인 메모리 공간을 할당받는다는 것이다. 각자의 사용공간이 있다고 보면 되며 기본적으로 프로세스간 자원을 공유하지 않는다. 위의 예시 처럼, '크롬' 프로세스가 여러 개인 경우에도 마찬가지이다.
프로세스(Process)
정의 - 프로그램의 실행중인 인스턴스
특징 - 각 프로세스가 독립적인 메모리 공간을 할당받아 사용
2. 스레드(Thread) 개념 & 특징
이제 프로세스와 많이 비교되는 스레드에 관해 살펴보자
개념
스레드(Thread)란 프로세스 내에서 실행되는 작업 흐름을 가르킨다.
프로세스는 사용자의 요청을 입력받아 관련 작업을 수행하게 되는데 이 때 실질적으로 작업을 처리하는 것이 스레드이다. 스레드는 한 프로세스 내에서 1개 또는 2개 이상이 실행되며, 이때 한 프로세스에서 2개 이상의 스레드가 실행되는 것을 멀티 스레드(Multi-Thread)라고 한다. 멀티 스레드에 관해서는 '2. 멀티 프로세스 & 멀티 스레드' 에서 설명하겠다.
특징
스레드의 가장 큰 특징으로는 스레드 간 메모리 공간을 공유한다는 것이다.
이때, 모든 메모리 공간을 공유하지는 않고 Stack 공간을 제외한 모든 메모리 공간을 공유한다. 여기서 Stack 공간을 공유하지 않는 특별한 이유가 있다. Stack 공간에는 함수 호출 정보가 담기게 되는데, 개별적으로 실행되는 스레드들이 하나의 Stack으로 함수 호출 정보를 관리하면 FILO 기능을 제대로 할 수가 없다. 이러한 이유로 Stack은 각 스레드마다 할당된다.
스레드(Thread)
정의 - 프로세스 내 실행되는 작업 흐름
특징 - Stack 공간을 제외한 메모리 영역 공유
프로세스 vs 스레드 정리
Process(프로세스) | Thread(스레드) | |
정의 | 메모리 상에서 실행중인 프로그램의 인스턴스 | 프로세스 내에서 실행되는 작업 흐름 |
특징 | - 독립적인 메모리 공간을 할당 | - Stack 공간만 따로 할당받고 나머지 메모리 공간을 서로 공유 |
3. 멀티 프로세스 & 멀티 스레드
프로세스와 스레드의 개념 및 특징에 대해 살펴 보았다. 프로세스, 스레드와 함께 등장하는 멀티 프로세스 및 멀티 스레드에 대해 정리해보자.
멀티 프로세스(Multi-Process)
Process에 Multi(여러 개)라는 접두사가 붙은 단어로, 여러 개의 프로세스가 동시에 실행되는 것을 의미한다.
우리가 노트북을 사용할 때, 크롬을 사용하면서 카톡, 노션 등을 동시에 사용하는데 이게 멀티 프로세스이다. 위에서 언급했듯이 여러 개의 프로세스를 동시에 실행시키며 이때 각 프로세스는 독립적인 메모리 공간을 갖는다.
여러 프로세스를 동시에 실행시키는 멀티프로세스는 아래와 같은 장단점을 가진다.
장점
- 시스템 안정성이 높다
1. 특정 프로세스 에러 발생 시 다른 프로세스에 영향을 미치지 않는다.
2. 독립된 메모리 공간을 사용하기 때문에 메모리 침범이 발생하지 않는다
단점
- 프로세스간 자원 공유를 직접적으로 하지 못하기 때문에 IPC라는 기술을 이용하여 통신해야한다.
- Context Switching을 통한 오버헤드가 발생한다.
멀티 프로세스(Multi-Process)
정의 - 여러 프로세스가 동시에 실행되는 것
장점 - 시스템 안정성이 높다(각 프로세스가 서로에 영향을 미치지 않음, 메모리 침범 x)
단점 - 자원을 공유하기 위해서는 별도의 IPC 통신 진행해야함
- Context Switching 시에 오버헤드 발생
멀티 스레드(Multi-Thread)
멀티 스레드란 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는 것을 의미한다. 즉, 프로세스 내에서 작업의 흐름이 여러 개라고 생각하면 된다. 카톡을 예로 들어보자. 카톡을 통해 우리는 실시간으로 채팅을 하며, 채팅 도중 이미지 전송, 알림 및 푸쉬 등을 할 수도 있다. 이 때, 카톡 프로세스에서는 실시간 채팅, 이미지 전송, 알림 및 푸쉬에 관한 각각의 작업 흐름(스레드)을 만들어서 처리를 한다. 이렇게 한 프로세스에서 여러 개의 스레드가 동시에 실행되는 것을 멀티 스레드라고 한다
멀티 스레드의 장단점은 아래와 같다.
장점
- 스레드 간 메모리를 공유하기 때문에 통신이 쉽고 효율적인 자원 사용이 가능하다
단점
- 하나의 스레드에서 발생한 오류가 전체 프로세스에 영향을 미칠 수 있다.
- 여러 스레드가 하나의 자원을 사용할 때 동기화 문제가 발생할 수 있다.
멀티 스레드(Multi-Thread)
정의 - 한 프로세스 내에서 여러 스레드가 동시에 실행되는 것
장점 - 스레드 간 자원 공유가 쉽다.
단점 - 특정 스레드의 에러가 전체 프로세스에 영향을 미친다
- 여러개의 스레드가 특정 자원에 접근 시 동기화 문제 발생한다
멀티 프로세스 vs 멀티 스레드 정리
멀티 프로세스(Multi-Process) | 멀티 스레드(Multi-Thread) | |
정의 | 여러 프로세스가 동시에 실행되는 것 | 한 프로세스 내에서 여러 스레드가 동시에 실행되는 것 |
장점 | 시스템 안정성이 높다(개별적인 에러 처리, 메모리 침범 x) | 스레드 간 자원 공유가 쉽다 |
단점 | - 프로세스 간 자원 공유를 위해서는 IPC 통신을 해야한다 - Context Switching 으로 인한 오버헤드가 발생 |
- 특정 스레드의 에러가 전체 프로세스에 영향을 미친다 - 특정 자원에 대해 동기화 문제가 발생한다 |
[참고 링크]
https://dev-coco.tistory.com/162
https://blog.naver.com/PostView.naver?blogId=jooyonas&logNo=222264906780
'CS > 운영체제' 카테고리의 다른 글
데드락(Dead Lock) 정리 (0) | 2024.01.26 |
---|---|
락(Lock), 컨디션 변수, 세마포어 정리 (1) | 2024.01.26 |
세그멘테이션 & 페이징 정리 (0) | 2024.01.23 |
메모리(Memory) & 가상화 (1) | 2024.01.19 |
Context Switching & PCB 개념 정리 (1) | 2024.01.16 |