프로세스 ( Process )
프로그램을 메모리 상에서 실행중인 작업
운영체제에 의해 관리되며, 각각의 별도의 주소 공간할당, 독립적인 실행 환경을 제공
< 프로세스의 특징 >
독립적: 프로세스는 다른 프로세스와 독립적으로 실행되며, 서로의 메모리에 직접 접근할 수 없음
고유의 주소 공간: 프로세스마다 고유한 메모리 공간이 할당되는데, 이를 주소 공간이라 함.
자원 소모가 큼: 프로세스를 생성하고 관리하는 데 많은 자원이 필요함
< 메모리 공간 >
프로세스는 독립적인 실행 단위로, 고유한 메모리 공간을 갖습니다.

- 코드 ( 텍스트 ) 영역 : 실행할 명령어들이 저장되는 공간 ( 프로그램 명령 )
- 프로세스의 실행 코드가 위치.
- 데이터 영역: 전역 변수와 정적 변수들이 저장되는 공간
- 프로세스가 종료될 때까지 데이터는 유지
- 힙 ( Heap ) 영역 : 동적 메모리 할당이 이루어지는 공간 ( new(), malloc() )
- 런타임 시에 메모리가 할당되고 해제됨
- 스택 ( Stack ) 영역 : 함수 호출 시 생성되는 지역 변수와 함수의 매개변수들이 저장되는 공간 ( 임시 메모리 영역 )
- 함수가 호출될 때마다 스택에 쌓였다가, 함수가 종료되면 스택에서 제거
< 자원 할당 >
프로세스가 정상적으로 실행될 수 있도록 필요한 자원을 할당
CPU 시간 : 프로세스가 실행되기 위해 CPU를 사용해야함.
운영체제는 각 프로세스에게 일정한 시간 동안 CPU를 할당
메모리 : 프로세스가 실행되려면 명령어와 데이터를 저장할 메모리가 필요함.
운영체제는 프로세스에게 고유한 메모리 공간을 할당
파일, 입출력 장치 : 프로세스는 파일 시스템에 접근하거나 입출력 장치를 사용해야 할 수 있음.
운영체제는 이러한 자원도 관리하여 프로세스가 사용할 수 있도록 함.
< 상태 >
프로세스는 실행 중에 여러 상태를 거침.
생성(New): 프로세스가 생성되고, 운영체제에 의해 관리되기 시작하는 상태
준비(Ready): 프로세스가 실행될 준비가 되었지만, CPU를 기다리고 있는 상태
실행(Running): 프로세스가 CPU를 할당받아 실행 중인 상태
대기(Waiting): 프로세스가 어떤 이벤트(예: I/O 작업 완료)를 기다리는 상태
종료(Terminated): 프로세스가 실행을 마치고 종료된 상태, 이때 운영체제는 프로세스가 사용하던 자원을 회수

< 멀티 프로세스 >
하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
장점
안정성 : 메모리 침범 문제를 운영체제 차원에서 해결
단점
각각 독립된 메모리 영역을 갖고 있어서 작업량이 많을 수록 오버헤드 발생하여
Context Switching으로 인한 성능이 저하됨
오버헤드 : 프로세스, 스레드를 생성하고 관리하는 데 드는 추가적인 비용
Context Switching : 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
스레드 ( Thread )
프로세스 내에서 실행되는 작은 단위의 작업
하나의 프로세스는 여러 개의 스레드를 가질수 있으며, 스레드들은 같은 메모리 공간을 공유하면서 병렬로 작업 수행
-> 작업의 효율성 높이기 위해

스레드는 Stack만 따라 할당 받고 나머지 영역은 서로 공유
< 스레드 특징 >
- 가벼움 : 스레드는 프로세스보다 적은 자원으로 생성할 수 있음.
- 공유 메모리 : 같은 프로세스 내의 스레드들은 동일한 메모리 공간을 공유하므로, 서로 간의 데이터 교환이 빠름.
- 빠른 작업 전환 : 스레드 간의 작업 전환은 프로세스 간의 작업 전환보다 빠름.
< 스레드의 메모리 공간 >
공유메모리
스레드들은 프로세스의 코드, 데이터, 힙 영역을 공유하고 이를 통해 스레드 간의 데이터를 빠르게 교환가능
고유 스택 ( Stack ) 영역
스레드마다 독립된 스택 공간이 존재함. 스택은 스레드의 함수 호출, 매개변수, 지역 변수를 저장
< 스레드의 자원 할당 >
CPU 시간
스레드는 프로세스와 마찬가지로 CPU를 사용함.
스레드 간의 작업 전환은 매우 빠르고 이를 통해 멀티태스킹이 효율적임
스택 메모리
각 스레드는 독립적인 스택을 가지며, 여기에서 함수 호출과 변수 처리를 수행
< 멀티 스레드 >
하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
장점
독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원손실이 감소, 전역변수와 정적 변수에 대한 자료 공유 가능
단점
안정성 문제 : 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태를 가짐
-> 공유 메모리를 갖기 때문에 스레드 전체가 망가짐.
안정성 문제를 Critical Section 기법으로 대비함.
Critical Section : 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정 ( 상호 배제, 진행, 한정된 대기를 충족해야함 )
프로세스와 스레드의 차이점 요약

'CS지식' 카테고리의 다른 글
| [SQL] 저장 프로시저 ( Stored Procedure ) (2) | 2024.08.22 |
|---|---|
| 스프링 핵심 개념 (4) | 2024.08.17 |
| [Java] 데드락 ( DeadLock ) (2) | 2024.08.06 |
| [Java] 가비지 컬렉션 ( Garbage Collection ) 개념 및 동작 (1) | 2024.08.05 |
| [Java] 디자인패턴 (2) | 2024.08.04 |