[동생에게 들려주는 개발지식 Pt.1] CPU, 프로세스, 스레드, etc..
목차
- 시작하며
- CPU
- 무어의 법칙
- 프로세스와 스레드: 정의
- 프로세스와 스레드, 멀티프로세스와 멀티스레드
- 마치며
- 참고
시작하며
안녕 히로, 오늘 내가 프로세스와 멀티프로세스, 스레드와 멀티스레드, 컨텍스트 스위칭, 무어의 법칙, 암달의 법칙 등의 내용들을 설명하려고 함. 각 개념들을 정말 자세하고 깊게 설명해놓 블로그들은 많지만 너무 자세해서 연관짓기가 좀 복잡할 수도 있거든. 그래서 내가 이 개념들을 한데 묶어서 설명해줄게. 나중에 원하면 이 개념들을 더 디테일하게 찾아보시길.
CPU
CPU부터 시작하자. CPU가 뭘까? CPU를 컴퓨터의 대뇌라고도 하거든? 그리고 개발자가 만드는 프로그램, 시스템들은 모두 컴퓨터에서 동작하니까 이 CPU 를 알아야되는거지.
CPU (Central Processing Unit, 중앙 처리 장치)는 중앙 프로세서, 주 프로세서 또는 단순히 프로세서라고도 하며 컴퓨터 프로그램을 구성하는 명령을 실행하는 전자 회로입니다. CPU는 프로그램의 명령어에 지정된 기본 산술, 논리, 제어 및 입출력(I/O) 작업을 수행합니다. - Wikipedia
참고로 산술, 논리 제어, 입출력 등을 포함하는 프로세스 레벨의 명령을 인스트럭션이라고도 하지.
여기서 우리가 관심을 가져야 하는 부분은 CPU의 성능의 단위와 빠른 CPU의 기준임. CPU의 속도는 Clock Speed(클럭 스피드)로 나타내지. Clock Speed는 1초당 내부에서 몇 단계의 작업이 처리되는 지를 측정해 이를 주파수 단위인 Hz(헤르츠)로 나타내는 거임. 클럭스피드 수치가 높을수록 CPU가 빠르다고 이야기 할 수 있지.
세계 첫 CPU는 얼마나 빨랐을까? 세계 첫 상용 CPU는 인텔이 1971년도에 출시한 "Intel 4004" 라는 모델임. 인텔이 정말 대단한게 50년, 약 반세기 동안 프로세서를 애플에서 사용할 정도로 높은 품질의 프로세서를 만들어 왔기 때문임. CPU 맛집 인텔.
"Intel 4004" 의 성능은 얼마나 됬을까? 최대 740kHz(킬로헤르츠)로 초당 92600번의 연산을 수행했다고 하는군. 이전에 사람이 해오던 연산에 비교하면 정말 신세계였을꺼야. 요즘 CPU 성능는 억 단위로 실행된다고 하니... 휴먼은 참 대단하다는 것을 알 수 있음.
아무튼! 이렇게 나온 프로세서란 녀석은 컴퓨터, 전자 계산기, ATM 등에서 쓰이기 시작했는데 너어어어무 좋은거임? 좋으니까 더 사용하고, 더 사용하다보니 너무 좋아서 더 좋은 성능의 프로세서를 원하게 되고 생산자도 신나서 계속해서 더 높은 성능의 프로세서를 출시했지.
그렇게 증가하는 CPU 성능에서 패턴같은게 보였나봐. 그 규칙적인 패턴을 가지고 인텔의 Co-Founder 인 고든 무어가 무어라고 발표를 했고 그때 발표한것은 얼마 지나지 않아 무어의 법칙이 되었음.
무어의 법칙 (Moore's Law)
무어의 법칙은 컴퓨터의 속도와 기능이 2년마다 2배 증가할 것으로 예상할 수 있으며 그에 대해 더 적은 비용을 지불할 것이라고 말합니다. - Investopia
무어의 법칙처럼 프로세서의 성능들은 정말로 2년마다 2배씩 J-커브를 그리면서 향상되었지. 초당 9만2600번의 인스트럭션을 실행하던 프로세서가 요즘은 억(Billion) 단위로 실행되는 수준이니까.
무어의 법칙의 실제 발표자료는 인터넷에 돌아다니고 있으니까 궁금하면 찾아보도록. (굳이?)
그런데 말이야.... 무어의 법칙대로 컴퓨터 성능이 그렇게 빨라지는데 왜 멀티프로세싱과 멀티스레딩이 것이 필요했을까? 성능이 부족하니까. 성능이 충분하지 않은데 필요한 성능은 그 이상이고. 그래서 여러 프로세스, 여러 스레드를를 동시에 사용하자는 접근이지. 컴퓨터 한 대 가지고 2년씩 기다릴 바에는 CPU를 여러 대 동시에 돌리자 이거임.
그럼 이제 프로세스와 스레드에 대해 알아보자.
프로세스와 스레드 : 정의
프로세스는 운영체제로부터 자원을 할당받아 동작하는 독립적인 프로그램이다.
스레드는 프로세스 내부에서 실행되는 작업의 단위로 가벼운(Lightweight) 프로세스라고도 한다. - MIT, Fall 2014
프로세스는 동작하는 프로그램, 스레드는 프로세스 내부에서 실행되는 작업의 단위인데... 그러면 CPU는 무엇을 실행할까?
CPU는 작업을 실행하니까 Thread를 실행하고 시각화하자면 아래 그림과 같음.
핵심은..
- 프로세스 자원을 할당받고 독립적으로 분리되어 실행되는 프로그램
- 스레드는 프로세스 안에서 실행되는 작업의 단위
- CPU는 스레드를 실행함
이 3가지로 보면 됨.
프로세스는 독립적인 프로그램, 스레드는 프로그램 작업의 단위, CPU가 스레드를 실행한다.
프로세스와 스레드, 멀티프로세스와 멀티스레드
프로세스와 스레드의 차이를 이해하고 나면 멀티프로세싱과 멀티스레드의 개념은 상당히 쉽게 이해할 수 있다고 생각해도돼. 하지만 중요한 개념들이니 책이나 문서들을 찾아보는게 제일 좋으니까 여기서는 가볍게만 이야기해주고 나중에 책이랑 문서 몇가지 추천해줄게.
우선 멀티프로세스는 각 프로세스가 자원을 할당받고 독립적이기 때문에 (생성, 삭제, **컨텍스트 스위치와 같은) 관리 비용이 크지. 대신 프로세스끼리 격리되어있으니 에러의 전파로 부터 안전하다고 볼 수 있음.
멀티프로세스 관련 키워드는 다음 3가지 정도로 시작하면 될듯.
- 프로세스의 실행정보를 저장하는 PCB(Process Control Block)
- PCB를 메인메모리에 읽고 쓰면서 여러 프로세스를 오고가는 Context Switching(컨텍스트 스위칭)
- 그리고 프로세스 간의 통신 IPC (Inter-Process Communication)
멀티스레드는 스레드들이 프로세스 자원을 공유할 수 있기 때문에 관리비용이 적지. 대신 공유하면서 데이터 유실이 일어날 수 있으니 적절한 동기화 기법을 활용해야됨
멀티스레드 관련 키워드는 다음 2가지로 시작해도 좋을듯.
- 스레드간 공유되는 프로세스의 공유자원 (메모리, 코드, 데이터)
- Criticial Section, 동기화 문제
멀티프로세스와 멀티스레드는 우리가 개발을 할때 고려하는 부분이니까 특히 스레드와 멀티스레드 관련 개념을 한번 잘 가지고 있으면 도음이 될꺼야.
마치며
여기까지 스레드, CPU, 멀티 프로세스, 프로세스 등... 여러가지를 다뤄봤다. 군복무하느라 고생이 많고 얼마남지 않았으니 힘내자! 충성충성.