cs

프로세스?

25G 2023. 2. 12. 22:25

프로세스란?

컴퓨터에 기본적인 필수 장치중 CPU(연산장치)와 RAM(저장장치)이 있습니다. 하지만 이 둘만 있어서는 컴퓨터는 제대로 작동할 수 없습니다. 이 두가지 장치만 있다고 하고 ram이 1gb라고 할때 문자를 10억개정도밖에 저장할 수 없기때문에 프로그램을 돌리기엔 턱없이 부족한 양이며 ram은 휘발성이기때문에 전력공급이 중단되면 저장내용이 다 날라갈 것입니다. 그럼 ram에 있는 내용을 영구히 저장하기위해 HDD와 SSD라는 저장장치가 등장했습니다.

그렇다면 예를 들어 HDD에 tomcat8을 설치한다고 가정을 해봅니다.
그럼 HDD에 tomcat8이라는 프로그램이 설치가 됐습니다. 그럼 이 HDD에저장된 프로그램을 RAM에 끌어 올리는 행위를 load 라고 합니다.
이렇게 tomcat을 load할때 실행에 필요한 핵심적인 부분만 load를 해서 RAM에 띄우면 load를 통해서 RAM에 프로그램이 올려져 있는 상테를 프로세스라고 합니다. 이렇게 프로그램이 프로세스상태가 되면 CPU에서 ram에 데이터를가지고 연산할 수 있게 됩니다.

 

 

이때 CPU가 1개라고 가정한다면 일하는 노동자가 1명인 것과 같고 즉 프로세스가 1개만 실행가능 한데 tomcat은 기본적으로 서버기때문에 데몬으로 돌고 있습니다. 데몬이라는 것은 계속적으로 실행중이여야하는 프로세스를 뜻합니다. 그렇다면 CPU가 1개인데 tomcat과 동시에 다른 프로그램을 사용하려고하면 당연히 사용할수 없게 됩니다.

이를 해결하기위해 스레드라는 녀석이 튀어나옵니다.

 

Thread(스레드)? 

스레드는 한글로 실, 수명 을 뜻하는 말입니다. 그럼 위상황에서 스레드가 어떻게 일을하는지 가정해 보겠습니다.

tomcat이 데몬으로 돌고 있는데 데몬으로 돌고있기때문에 이미 사용가능한 CPU를 다 쓰고 있는 상황이였습니다. 이때 예를들어 카카오톡을 실행하려고 하는 것이죠

그러면  CPU는 tomcat의 실(스레드)와 카카오톡의 실(스레드)를 만들어놓고 이 두개의 실(스레드)를 번갈아가면서 왔다갔다하며 조금씩 실행해 나갑니다. 그럼 CPU는 1개인데 시간을 아주 잘개잘개 쪼개서 타임슬라이싱을 하는데 이행위를 context-switching이라고 합니다.

그럼 너무나 빠른 연산 속도 덕분에 사용자입장에선 여러프로그램이 동시에 실행되는 처럼 보여지는 것이죠.

context는 문맥을 뜻하는데 위 상황을 예로 들자면 tomcat을 실행하고 카카오톡으로 넘어가기 직전에 tomcat을 얼마나 실행했는지를 기록해서 카카오톡의 일을 끝내고 오더라도 다시 해당 지점부터 실행할수 있도록 해야하기 때문이죠

카카오톡에서 tomcat으로 올때도 마찬가지로 카카오톡에서 얼마나 어디까지 일하고 왔는지 기억한후 tomcat에게 가겠죠

그럼 CPU가 context-switching을 할때 두가지 일을 동시에 해야하기 때문에 각각의 일에 CPU의 자원을 100% 활용하는 것이 아니라 

A라는 일을 하다가 B로 갈때는 thread를 잠깐이라도 sleep을 시켜 틈을 만든 사이에 B로가서 B스레드를 깨워서 일을 시키게 됩니다.

만약에 A라는 일을 할때 CPU를 100%활용하게 되면 context의 전환이 이뤄지지 않게 됩니다.

context-switching을 하기 위해서는 스레드끼리의 틈이 필요하다는 것이죠