리눅스의 ps -ef
이라는 명령어는 현재 실행중인 프로세스의 목록과 상태를 보여준다. 이 명령어를 통해서 지금 컴퓨터가 CPU자원을 어디에 쓰고 있는지 확인할 수 있다. 그렇다면 이 프로세스라는 것은 무엇일까? 프로그램, 쓰레드, 운영체제, 커널 등의 개념에 대해서 알아보자.
먼저 프로그램에 대해서 정의하자.
Computer Program은 소스코드의 인간이 이해할 수 있는 형태이다.
wikipedia
Program은 특정 함수를 수행하기위해 컴퓨터가 사용하는 명령들의 집합이다.
webopedia
여러 글들을 읽어보면 결국 프로그램이란 "컴퓨터가 특정 동작을 수행하기위해 인간이 작성한 코드의 집합"을 의미한다는 것을 알 수 있다.
Process란 하나 혹은 그 이상의 Thread로 실행되는 컴퓨터 프로그램의 instance이다. Process는 Program code와 그 activity를 포함한다.
wikipedia
부연하자면 프로세스는 프로그램을 실행하기 위해 필요한 가장 작은 단위의 쓰레드, 메모리, 소스코드들의 집합이다.
쓰레드란 스케줄러(OS의 일부)가 독립적으로 관리할 수 있는 가장 작은 단위의 프로그램 instruction sequence이다.
wikipedia
쓰레드는 다른 코드와 독립되어 실행할 수 있는 instruction 집합의 최소 단위이다. (A thread is a sequence of such instructions within a program that can be executed independently of other code.)
프로세스 vs 쓰레드
하이퍼 쓰레딩
과거의 CPU는 한번에 하나의 Thread를 실행할 수 있었지만 하나의 CPU코어가 여러개의 Thread를 동시에 실행하는 하이퍼 쓰레딩이라는 기술이 등장하였다. 이 기술을 통해서 물리적으로 하나의 CPU 코어는 여러개의 쓰레드를 동시에 실행시킬 수 있다.
from www.intel.com
지금까지 나온 사실을 정리하면 다음과 같다.
프로그램은 동작을 수행하는 명령 코드의 집합이다.
이 프로그램은 최소 하나 이상의 프로세스로 동작한다.
프로세스는 프로그램을 실행하기 위해 필요한 최소단위의 코드, 메모리, 쓰레드들의 집합이다.
쓰레드는 CPU가 어떤 동작을 수행하기 위해 사용되는 명령 집합의 최소 단위이다.
코어는 쓰레드를 통해서 동작을 수행한다.