프로세스가 무엇이라고 물어보면, 어떻게 답해야 할까
The definition of a process, informally, is quite simple: it is a running program - OSTEP
OSTEP에서는 프로세스를 간단하게 실행중인 프로그램
이라고 말한다.
그렇다면.. 프로그램은 어떻게 프로세스가 될까? (프로그램은 어떻게 실행될까)
프로그램은 디스크에 저장되어 있다. 누군가가 더블 클릭 같은 행동으로 프로그램을 실행시키면, 컴퓨터는 폰노이만 구조를 따르기 때문에 해당 프로그램은 메모리로 이동한다. 실행을 위해 메모리로 올라온 프로그램을 프로세스라고 생각하면 된다. 구체적으로 어떻게 프로그램이 실행되는지 알아보자.
프로그램을 왜 굳이 프로세스로 만들어서 사용할까?
=> (뇌피셜) 크롬 실행 파일이 있다고 했을 때, 실행을 하면 하나의 크롬 브라우저가 열린다.
만약에 프로세스란 개념이 없이, 프로그램이 직접 디스크에서 메모리로 이동한다면,
같은 프로그램을 여러 번 실행 시킬 수가 없다.
프로세스가 프로그램의 인스턴스라는 말이 위의 맥락과 비슷한 느낌인 것 같다.
스레드
: 프로세스 내의 실행 흐름
이렇게 말하면 너무 추상적이다.
스레드라는 개념이 왜 나왔는지 알아보면서 사전적 개념을 구체화해보자.
스레드는 Stack과 PC만을 고유한 자원으로 할당받고 나머지 자원들은 프로세스 내 하나를 공유한다.
<Stack이 독립적으로 할당되는 이유>
Stack에는 지역 변수나 함수 매개변수와 같이 함수를 실행하기 위해서 필요한 자원들이 저장되어 있다.
독립적인 Stack -> 독립적인 함수 호출 -> 독립적인 실행 흐름
<PC를 독립적으로 할당하는 이유>
PC 레지스터 : 다음 실행해야할 명령어의 위치를 가리키는 레지스터
스레드 별로 실행 흐름을 가지고 있기 때문에 다음 실행해야할 명령어도 스레드별로 관리해야한다.
스레드를 사용하여 장점을 얻기 위해서는 프로세스 내에서 여러 개의 스레드를 사용해야함 (멀티 스레드)
이 장점을 멀티 프로세스와 멀티 스레드를 비교해보며 알아보자.