정의
<aside>
📌 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위
스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
</aside>
프로그램
<aside>
📌 파일이 저장 장치에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적인 상태
</aside>
- 메모리에는 올라가 있지 않은 : 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 주지 않았다.
- 정적인 상태 : 아직 실행되지 않고 가만히 있다.
프로세스
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(동적인 상태)
- 시분할 시스템에서 볼 때, 분할 시간마다 그 처리 대상이 되는 작업 단위
특징
-
운영체제는 프로세스마다 각각 독립된 메모리 영역을 할당해준다.
- Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data : 전역변수, 정적변수, 배열 등 (초기화된 데이터)
- Heap : 동적 할당 시 사용 (new(), malloc() 등)
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
(스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유)
<aside>
👉 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 직접 접근할 수 없다.
</aside>

- 프로세스의 메모리 구조
- 프로세스 제어 블록 (PCB)
-
운영체제로부터 시스템 자원을 할당 받는다.
- cpu시간, 메모리, 입출력 장치 등
- 프로세스 종료 시, 운영체제는 재사용 가능 자원을 회수하게 된다.
-
다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다.
-
프로세스는 기본적으로 1개 이상의 스레드를 갖는다.
스레드