프로그램

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태

프로그램이라는 단어는 아직 실행되지 않은 파일 그 자체를 가리키는 말이다. 사용자가 눌러서 실행하기 전의 파일 쉽게 말해 코드 덩어리를 의미한다.

프로세스

운영체제로부터 자원을 할당받은 작업의 단위 (운영체제 관점에서는 프로세스가 최소 작업 단위)

프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적(動的)인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다.

위키피디아에서는 프로세스에 대해 정의를 내릴 때 그냥 실행되고 있는 컴퓨터 프로그램이라고 정의를 내리고 있으며, 스케줄링 단계에서의 "작업"과 같은 단어라고 봐도 무방하다고 하고 있다.

실제로 프로세스라는 단어가 작업 중인 프로그램을 의미하는 단어이기 때문이다.

기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

스레드

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 (CPU 입장에서의 최소 작업 단위)

프로세스의 특정한 수행 경로

프로세스가 할당받은 자원을 이용하는 실행의 단위

프로세스와 스레드의 차이

프로세스는 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

스레드는 메모리를 서로 공유할 수 있다고 언급했었다. 이에 대해 더 자세히 설명하자면, 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

멀티테스킹, 멀티스레드

멀티태스킹이 하나의 운영 체제 안에서 여러 프로세스가 실행되는 것이라면, 멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것을 의미한다.

Reference