프로세스(process) 는 “실행 중인 프로그램”을 표현하는
운영체제의 추상화(abstraction) 이다.
하나의 시스템에서는 여러 개의 프로세스가 동시에(concurrently) 실행될 수 있다.
각 프로세스는 마치 자신이 하드웨어를 독점적으로 사용하는 것처럼 보인다.
여기서 concurrently 라는 말은,
한 프로세스의 명령어들이 다른 프로세스의 명령어들과 섞여(interleaved) 실행된다는 뜻이다.
대부분의 시스템에서는 실행할 프로세스의 수가
실제 CPU의 개수보다 많기 때문에,
운영체제는 이들 사이에서 CPU를 번갈아 가며 사용하게 한다.
전통적인 시스템은 한 번에 하나의 프로그램만 실행할 수 있었지만,
현대의 멀티코어 프로세서(multicore processor) 는
여러 프로그램을 동시에 실행할 수 있다.
하지만 단일 CPU에서도 여러 프로세스가 동시에 실행되는 것처럼 보일 수 있다.
운영체제가 프로세스 간 전환(context switching) 을 수행하기 때문이다.
운영체제는 프로세서가 어떤 프로세스에서 다른 프로세스로 전환할 때
그 상태(state)를 저장하고 복원해야 한다.
이 상태를 컨텍스트(context) 라고 부른다.
컨텍스트에는 다음과 같은 정보가 포함된다:
단일 CPU 시스템(단일 프로세서 시스템, uniprocessor system)에서는
한 시점에 오직 하나의 프로세스만 실제로 실행된다.
운영체제가 현재 실행 중인 프로세스를 다른 프로세스로 전환하기로 결정하면,
다음 순서로 컨텍스트 스위치(context switch) 를 수행한다:
이 과정을 통해 새 프로세스는 중단되었던 지점부터 정확히 다시 실행을 이어간다.