메모리에 올라와 실행되고 있는 프로그램의 인스턴스
= 운영체제로부터 시스템 자원을 할당받는 작업의 단위
즉, 동적인 개념으로는 실행된 프로그램을 의미한다.
프로세스는 각각 별도의 독립적인 주소공간 할당
-
Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
-
Data : 전역변수, 정적변수, 배열 등
- 초기화 된 데이터는 data 영역에 저장
- 초기화 되지 않은 데이터는 bss 영역에 저장
-
Heap : 동적 할당 시 사용 (new(), malloc() 등)
-
Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
프로세스 내부에서 실행되는 작은 작업 단위
스케쥴러가 독립적으로 관리할 수 있는 프로그래밍 된 명령의 소규모 시퀀스이다.
스레드는 프로세스의 실행 흐름을 구성하는 단위로, 하나의 프로세스 내부에 여러개의 스레드 포함 가능
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유 (그러나 다른 프로세스의 메모리에 직접 접근 불가)
- 한 스레드가 프로세스 자원을 변경 -> 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 조회 가능