프로세스

실행 프로그램의 인스턴스(메모리 공간에 할당된 실체). 실행 중인 프로그램.

<aside> 💡 프로그램은 디스크 등 보조기억장치 등에 저장된 코드와 데이터들의 묶음이다. 이런 프로그램들의 코드와 데이터가 메모리에 적재(load)되면 프로세스가 된다.

</aside>

프로세스가 제공하는 추상화

  1. 지금 프로세스가 프로세서를 혼자 독점 2) 메모리 시스템을 혼자서만 독점

<aside> 💡 커널은 이 두 추상화를 위해 각각 문맥 교환 context switching가상 메모리 virtual memory 매커니즘을 제공한다.

</aside>

프로세서 독점

지금 실행하고 있는 프로그램이 프로세서(CPU)를 혼자서 독점하고 있다는 착각.

실제로 한 프로그램을 실행할 때 다른 프로그램이 내가 쓸 CPU를 뺏어서 차지해 버리는 걸 걱정하지 않는다.

사적인 주소공간

지금의 프로그램이 혼자서 메인 메모리를 다 독점하고 있다는 착각.

각 프로그램들이 각각의 스택, 힙, 코드 등의 메모리들을 가진다. 그리고 그걸 다른 프로세스와 나누어 쓰지 않는다(고 생각한다).

Multiprocessing

하나의 프로세서가 여러 개의 프로세스를 동시에 실행할 수 있다.

실제로 유튜브로 음악을 들으며 크롬으로 웹 검색을 하고 동시에 카카오톡으로 메세지를 받는다.

각각의 프로세스들은 독립적인 CPU와 메모리가 할당되었다고 착각한다.

각각의 프로세스들은 독립적인 CPU와 메모리가 할당되었다고 착각한다.

Untitled

  1. 현재 첫번째 프로세스 A를 프로세서가 작업 중이다.
  2. 다음 프로세스 B로 옮겨가기 위해 현재 작업 중인 A의 레지스터 값을 메모리에 저장한다.
  3. 다음 CPU 스케줄 B를 확인한다(CPU가 다음 작업으로 B를 작업한다).
  4. 이미 메모리에 저장되어 있었던 B의 레지스터 값을 레지스터로 적재하고, 메모리 주소를 B의 주소로 바꾼다. 레지스터 값과 메모리 주소는 문맥이다. 즉, Context Switch!

논리적 제어흐름, Logical Control Flow

각각의 프로세스는 논리적 제어흐름이다. 프로세스, 쓰레드, 핸들러 모두 제어흐름이다.

Untitled