컴퓨터에서 프로세스란 실행 중인 프로그램을 의미한다. 프로그램은 어떤 목적을 수행하기 위해 만든 코드의 집합이다. 프로그램은 단순히 디스크에 저장된 코드의 집합이고 이 코드들을 실행하여 명령들을 수행하고 처리하는 과정들이 진행되는 상태를 프로세스라고 부르게 된다. 동적인 상태를 의미하는 것이다.
하나의 컴퓨터에서는 여러개의 프로그램이 실행될 수 있으며 각 프로세스는 독립적인 메모리 공간을 갖는다.
프로세스는 작업을 수행하기 위해 CPU, 메모리등의 자원이 필요하다. 필요한 자원을 운영체제로부터 할당 받는다.
프로세스는 실행중에 다양한 상태(실행, 대기, 종료)를 가질 수 있다.
현대 운영체제는 여러 프로세스를 동시에 실행할 수 있도록 멀티 태스킹을 지원한다.
포그라운드 프로세스는 사용자가 볼 수 있는 공간에서 실행되는 프로그램을 말한다. 카카오톡이라던지 시각화되어 사용자가 직접 만질 수 있는 프로그램이다.
백그라운드 프로세스는 사용자가 볼 수 없는 공간에서 실행되는 프로그램이다. 보이지는 않지만 실행되고 있는 프로그램을 의미한다. 백그라운드 프로세스도 사용자와 상호작용할 수 있으며 상호작용하지 않고 정해진 일만 수행되는 프로세스를 Demon(데몬) 또는 서비스라고 한다.
PCB는 운영체제가 프로세스를 관리할 때 사용하는 정보이다.
프로세스는 작업을 수행하기 위한 자원을 운영체제로부터 할당받는다고 했다. CPU 자원이 한정적이기 때문에 여러개의 프로세스는 돌아가면서 한정된 시간만큼만 CPU를 사용하게 된다. 프로세스가 돌아가면서 수행될 때 운영체제는 프로세스에 대한 정보가 필요하게 되는데, 이 정보를 PCB 라고 한다.
타이머 인터럽트
CPU 이용 시간이 끝나면 알림 같은걸 준다고 하는데 타이머 인터럽트라고 한다. 타이머 인터럽트가 발생하면 다음 프로세스에 CPU 자원을 넘겨주게 된다.
PCB는 아래와 같은 구성요소로 이뤄져 있다.
프로세스를 식별하기 위한 식별값을 의미한다.
프로세스는 다른 프로세스와 CPU를 돌아가면서 사용하는데 레지스터 값을 알고 있어야 CPU 사용 순서가 되었을 때 사용하던 메모리 주소 값을 알 수 있다고 한다.
프로세스는 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU를 이용중인 상태 등이 있고 이 상태 값이 PCB에 들어있다.
언제 어떤 순서로 CPU를 할당 받을지에 대한 정보가 들어있다.
프로세스가 저장된 메모리 주소에 대한 정보가 있다.
할당된 입출력 장치, 사용 중 인 파일 정보 등이 들어 있다.
컴퓨터에서 한번에 하나의 프로그램만 실행되는 것은 아니다. 여러 프로그램이 동시에 수행되기도 한다. 이런 경우 Context Switch가 발생하게 되는데, Context Switch는 한 프로세스에서 다른 프로세스로 실행 순서가 변경되는 것을 의미한다. 작업 전환 이라고 생각하면 된다.
Context란 프로세스가 자신이 수행될 차례가 왔을 때 하던 작업을 계속 수행하기 위한 정보를 의미한다. Context Switch가 발생하기 전에 프로세스는 지금까지 수행하던 작업의 중간 정보를 백업한다. 각종 레지스터값, 메모리 정보, 열었던 파일, 사용한 입출력 장치 등의 정보이다. 이런 정보를 Context라고 한다.
Context Switch 시 아래와 같은 과정이 발생한다.

프로세스 메모리 영역은 코드, 데이터, 힙, 스택 영역으로 나뉜다.
코드 영역은 텍스트 영역이라고도 한다. 실행할 코드가 담긴 영역이다. 기계어로 작성된 명령어가 저장된다.
쓰기가 금지된 영역이다.
잠깐 썼다가 사라지는 데이터가 아니라 프로그램이 실행되는 동안 유지할 데이터가 저장되는 영역이다. 예를 들어, 전역 변수가 저장되는 공간이다.
프로그램을 만드는 사용자(개발자)가 직접 할당할 수 있는 저장공간이다.
데이터가 일시적으로 저장되는 공간이다. 매개변수, 지역변수 등이 있다.
1, 2 번 공간은 크기가 고정된 영역이다. 정적 할당영역이라 하고 3, 4 번 공간은 크기가 변하는 동적할당 영역이다. Stack과 Heap은 메모리 크기가 변하기 때문에 서로 겹치지 않도록 Stack은 높은 주소에서 낮은 주소로 Heap은 낮은 주소에서 높은 주소로 메모리를 사용한다.
