실행 프로그램의 인스턴스(메모리 공간에 할당된 실체). 실행 중인 프로그램.
<aside> 💡 프로그램은 디스크 등 보조기억장치 등에 저장된 코드와 데이터들의 묶음이다. 이런 프로그램들의 코드와 데이터가 메모리에 적재(load)되면 프로세스가 된다.
</aside>
- 지금 프로세스가 프로세서를 혼자 독점 2) 메모리 시스템을 혼자서만 독점
<aside> 💡 커널은 이 두 추상화를 위해 각각 문맥 교환 context switching과 가상 메모리 virtual memory 매커니즘을 제공한다.
</aside>
지금 실행하고 있는 프로그램이 프로세서(CPU)를 혼자서 독점하고 있다는 착각.
실제로 한 프로그램을 실행할 때 다른 프로그램이 내가 쓸 CPU를 뺏어서 차지해 버리는 걸 걱정하지 않는다.
지금의 프로그램이 혼자서 메인 메모리를 다 독점하고 있다는 착각.
각 프로그램들이 각각의 스택, 힙, 코드 등의 메모리들을 가진다. 그리고 그걸 다른 프로세스와 나누어 쓰지 않는다(고 생각한다).
하나의 프로세서가 여러 개의 프로세스를 동시에 실행할 수 있다.
실제로 유튜브로 음악을 들으며 크롬으로 웹 검색을 하고 동시에 카카오톡으로 메세지를 받는다.
각각의 프로세스들은 독립적인 CPU와 메모리가 할당되었다고 착각한다.
멀티 코어에서의 멀티 프로세싱
여러 프로세스들을 각 CPU들에서 실행하다가, CPU가 부족해지면 그때서야 Context Switching을 한다.
각각의 프로세스는 논리적 제어흐름이다. 프로세스, 쓰레드, 핸들러 모두 제어흐름이다.
프로세스의 동시성Concurrency과 순차성Sequential
만약 각각의 논리적 제어흐름이 시간적으로 중첩되면 이 두 논리적 제어흐름은 동시적Concurrent이라 한다. 그게 아니라면 순차적Sequentially으로 실행된다고 할 수 있다.