001 Process Thread

강의 메모 - Process & Thread #

Process #

File down -> .exe 파일 실행 -> 설치된 상태 : 프로그램 (!= 프로세스) 프로세스는 프로그램의 실제 실행. => 프로그램 데이터들이 메모리에 올라와 CPU를 할당받고 명령을 수행하고있는 상태

각각의 프로세스는 RAM(메모리)의 각각의 영역을 할당받음

4GB 정도 할당 받는다고 해보자.

  • 1GB 정도는 운영체제를 위한 커널(Kernel) 서비스를 위해 차지한다.
  • 나머지 3GB가 Stack, heap, data, code 등 영역을 차지한다.
  1. 프로세스는 자식 프로세스를 가질 수 있다.
  2. 운영체제는 프로세스 마다 각각 독립된 메모리 영역을 할당해준다. (Code/Data/Stack/Heap 영역)
  3. 각 프로세스 간에는 데이터 접근 안된다.

프로세스 1개에 오류가 나도 다른 프로세스에 영향을 주지 않는다.

Thread #

하나의 프로세스는 하나 이상의 스레드를 갖는다.

프로세스 : 운영체제로부터 메모리 자원을 할당받는 것
스레드 : CPU를 할당받아서 우리의 프로그램 코드를 실행하는 것 

CPU를 할당받는 주체는 즉, 프로세스가 아닌 쓰레드이다.

Java의 main() 메서드

  • main()를 가진 클래스를 수행 -> JVM이 실행된다. (JVM이 하나의 프로세스)
  • JVM이 실행될때 main thread가 반드시 생성된다.
  1. 각 쓰레드마다 할당받는 영역 : Stack
  2. 각 스레드가 공유하는 영역 : Heap, Code, Data

Thread & CPU #

쓰레드가 CPU에 할당되어 우리가 짜놓은 코드를 실행한다. 쓰레드는 CPU의 최소 실행 단위가 된다. CPU는 동시에 2개의 스레드를 수행시킬 수 없고, 1개의 스레드를 스케줄러로 선점하여 수행한다. 많은 여러개의 쓰레드가 있다면, 어떤 쓰레드를 먼저 CPU가 할당할 것인지를 운영체제 스케줄러 알고리즘에 의해 결정된다. 선점이 일어날때 CPU의 실행 흐름(문백)이 전환되는 컨텍스트 스위칭이 발생한다.