프로그램은 컴퓨터에서 실행 가능한 명령어와 데이터의 모음을 의미한다. 프로그램은 하드 디스크와 같은 영구 저장장치에 저장되어 있다.
개발자가 작성한 소스 코드를 컴파일러라는 프로그램을 사용하여 실행 가능한 형태의 바이너리 코드로 변환하고, 실행 파일로 저장되어 컴퓨터에서 직접 실행 할 수 있는 프로그램으로서의 역할을 수행한다.
Windows 운영체제에서 실행 파일을 나타내는 확장자는 일반적으로 .exe 파일으로 저장되고, Linux나 macOS(유닉스)운영체제에서는 일반적으로 바이너리 형식으로 작성되어 있으며 확장자가 없는 파일로 저장이 되게 된다.
프로세스는 실행 중인 프로그램의 인스턴스(instance)로, 운영체제 의해 관리되는 작업 단위이다.
프로그램이 프로세스로써 돌아가게 되면 프로그램의 코드와 데이터는 운영체제에 의해 독립적인 메모리 공간을 할당 받아 프로세스 메모리로 불러들여 지며, 이때 프로세스는 stack, heap, data section, code section와 같은 구조로 메모리 레이아웃을 가진다.
프로세스는 다양한 용도로 사용되는데, 간단한 예시로 웹 브라우저라는 프로그램을 실행 해서 두개의 탭을 띄우는 상황의 경우 같은 프로그램을 서로 다른 두개의 프로세스를 사용하여 독립적으로 실행하는 상태인 것이다. 이렇게 하기 때문에 하나의 탭에서 문제가 발생해도 전체 브라우저가 다운되지 않는 것이다.
하나의 CPU코어는 한 번에 하나의 프로세스만 실행 할 수 있다. 하지만 현대의 멀티코어(CPU코어가 여러개개인)시스템에서는 각각의 코어가 각자의 프로세스를 담당하여 한 번에 여러 개의 프로세스가 실행 될 수있다. 또한, 운영체제가 프로세스 스케줄링을 통해 CPU의 시간을 분할하여 여러 개의 프로세스가 동시에 실행 될 수 있도록 하는 시분할 방식등의 기법을 통해 프로세스가 동시에 실행 될 수 있도록 처리 하기도 한다.
프로그램은 실행 파일 형태로 저장되어 있는 정적인 코드와 데이터의 집합체이고, 프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에 의해 관리되는 동적인 상태이다. 실행되는 프로세스는 RAM(주기억장치)에 올라가며, 프로그램은 하드 디스크(보조기억장치)에 저장되어 있다.