프로세스 (Process)
- CPU (연산장치)
- RAM (저장장치)
연산장치와 저장장치만 있다고 프로그램이 제대로 돌 수 없습니다.
EC2 서버의 램 용량은 1GByte입니다. 문자("A")를 10억 개 저장할 수 있는 용량밖에 안 됩니다.
램은 비싸기도 하고 용량이 너무 적습니다. 또한 램은 휘발성이기 때문에 컴퓨터가 종료되면 데이터는 모두 날아갑니다.
그래서 항상 HDD, SSD가 필요합니다.
우리는 EC2 서버에서 하드디스크의 용량을 30GB 사용하고 있고, 여기에 tomcat10 프로그램을 설치했습니다.
하드 디스크에 저장된 프로그램을 메모리로 끌어올리는 행위를 로드(Load)라고 합니다.
톰캣의 용량이 만약 100MB(문자를 100만 개 저장할 수 있는 용량)라고 한다면 톰캣의 전체가 아닌 실행에 필요한, 핵심적인 부분만 로드해서 메모리에 띄웁니다.
메모리에 띄워진 톰캣을 프로세스라고 하며, 실행 중인 프로그램이라는 뜻입니다.
프로세스 상태가 되면 cpu와 커뮤니케이션할 수 있으며 데이터를 끌어올려 cpu에서 연산할 수 있습니다.
스레드 (Thread)
cpu는 1개입니다. 일꾼이 한 명이라는 것입니다. 일꾼이 1명이면 프로세스를 하나밖에 구동하지 못합니다.
tomcat10은 서버이기 때문에 데몬으로 돌아야 합니다.
데몬 서버: while을 돌며 끝이 없는 반복을 하며 돌아야 하는 서버
일꾼 한 명이 이 프로세스를 관리하게 되면 톰캣을 구동하는 동안 카카오톡을 메모리에 띄워도 일꾼이 관리하지 못하게 됩니다.
CPU는 1개이고, CPU는 2개의 실(스레드)를 만들어서 왔다 갔다를 반복합니다. 즉 일정한 시간을 정하고 톰켓과 카카오톡을 왔다갔다 하면서 일을 합니다.
시간을 잘게 쪼개서(Time Slicing) 왔다갔다 하는 행위를 문맥교환(Context Switching)이라고 합니다.
context-switching
여기서 context, 문맥이라는 것은 흐름을 안다는 의미입니다.
100쪽짜리 책이 하나 있고 오늘은 책을 20쪽까지 읽고 잠들었습니다. 그럼 내일은 21쪽부터 읽어야 합니다.
21쪽부터 읽어야 함을 알기 위해서는 context를 알아야 합니다. "책은 100쪽인데 어제 20쪽까지 읽었다." 라는 fact가 context입니다.
20쪽까지 읽었다는 문맥 흐름이 없다면 21쪽부터 읽어야 하는지 알 수 없습니다.
즉, 컨텍스트라는 것은 전후 사정을 말합니다. 전후 사정을 알아야 이야기에 끼어들 수 있습니다.
cpu가 컨텍스트 스위칭을 한다는 것은 톰켓이 어디까지 일을 했는지를 기억해두고, 카카오톡으로 넘어가서 일을 하다가 다시 톰켓으로 넘어가기 직전에 어디까지 일을 했는지를 기억해두는 것을 컨텍스트라고 합니다.
그리고 한 명의 일꾼이 이를 기억하며 왔다 갔다 하는 것을 컨텍스트 스위칭이라고 합니다.
sleep
길동이가 돈가스 생각을 한창 하고 있습니다. 옆에서 친구가 "영화 보러 갈래?"라고 물어봤습니다.
길동이는 돈가스에 뇌 100%를 사용해 집중하고 있습니다. 영화 보러 가자는 말을 듣지 못하고 멍을 때리는 것입니다.
이 집중력을 약간은 놓아주어야 합니다. 뇌를 80% 정도 사용해야 20%의 사용량이 남아서 친구의 이야기를 캐치할 수 있습니다.
일꾼 한 명이 컨텍스트 스위칭하며 프로세스를 왔다 갔다 할 때 2가지 일을 동시에 하기 위해서는 하나의 프로세스에 100%를 사용하지 않고 각각 50% 정도씩 사용해야 합니다.
왔다 갔다 하려면 cpu의 자원을 100% 활용하면 안 되고, A 실행하고 0.1초 자고, B 실행하고 0.1초 자면서 틈이 필요합니다.
틈 없이 A프로세스를 100%의 퍼포먼스로 일꾼이 일하고 있으면 끼어들 틈이 없기 때문에 종료시키지 못하게 됩니다.
이 틈을 sleep 이라고 합니다. cpu가 잠깐이라도 자고 있어야 끼어들어서 종료시킬 수 있습니다.
cpu는 A와 B의 일을 동시에 할 수 있고, 동시에 하기 위해서는 스레드가 필요합니다.
동시에 일하면 시간을 쪼개(타임 슬라이싱) 왔다 갔다 하면서 일을 하는데 이를 컨텍스트 스위칭이라고 합니다.
cpu 자원의 100%를 활용하면 끼어들 틈이 없어서 왔다 갔다 하지 못합니다.
컨텍스트 스위칭을 하기 위해서는 cpu에게 잠깐의 sleep이 필요합니다.
이 sleep이 없으면 강제 종료하고 싶을 때 끼어들지 못해서 강제 종료도 하지 못하게 됩니다.
그래서 sleep이 중요한 개념입니다.
'AWS' 카테고리의 다른 글
리눅스 명령어 step 6 (0) | 2024.11.07 |
---|---|
리눅스 명령어 step 5 (9) | 2024.11.06 |
리눅스 명령어 step 4 (3) | 2024.10.31 |
리눅스 명령어 step 3 (0) | 2024.10.31 |
리눅스 명렁어 step 2 (0) | 2024.10.31 |