CPU, 메모리, OS 레츠고
컴퓨터 살때 '좋은 컴퓨터'라고 하면 CPU 헤르츠가 높거나 메모리가 크면 고성능의 컴퓨터라고들 한다. 왜 그럴까? 메모리, 디스크, CPU 각각이 어떤 역할을 하고 있는걸까? 여태껏 살면서 한번쯤은 들어본, CPU와 메모리, 디스크, OS 그리고 커널 개념까지. 쭉 한번 훑고 지나가보자.
제일 쉬운 디스크부터 살펴보자. 우리가 흔히 '파일을 저장했다'고 할때 저장이 되는 곳이다. 컴퓨터에 저장하는 파일들이 어디에 저장되냐면 디스크에 저장된다. 디스크에 저장된 데이터는 컴퓨터가 꺼져도 그대로 남아있고, 다시 켜도 파일을 다시 열어볼 수 있다. 말 그대로 '저장소'이다.
- 모든 정보를 영구적으로 저장
디스크와는 달리, 컴퓨터를 끄면 '없어지는' 데이터이다. 컴퓨터를 끄면 메모리는 '빈 방'이 된다. 아무것도 없어진다. 그러면 이런 빈 방은 왜 필요할까? 임시 저장되는 데이터는 뭐가 있을까? 왜 그런걸 저장해야 하는게 필요할까?
상상을 해보자. 사람들이 요청하는 책을, 창문을 통해 보여주는 도서관이 있다고 상상해보자. 이 도서관에는 1000권의 책이 있다. 그리고 어떤 방에 뻥 뚫린 큰 창문이 있고 그 창문을 통해서 '10개'의 책만 보여줄 수 있는 도서관이라고 생각해보자. 사용자가 와서 책을 요청하면 창문을 통해 책을 보여주는 것이다.
디스크(저장소)가 도서관이라면, 메모리는 이 '10개의 책'만을 저장할 수 있는 임시 공간을 뜻한다. 도서관 영업시간이 끝나면 펼쳐놓은 책들은 전부 다 정리를 한다. 도서관에 있는 1000권의 책은 그대로이지만, 펼쳐놨던 10개의 책들은 방에서 사라진다. 이 방의 크기가 클 수록 한번에 펼칠 수 있는 책이 많아질 것이다. 메모리의 크기가 크다면, 20개, 아니 30개의 책을 펼칠 수 있는 성능의 도서관일 것이다. 그러면 사용자는 한 번에 여러권의 책을 볼 수 있을 것이다.
- 현재 사용 중인 정보를 임시로 저장
창문을 통해서 책을 보여주려면 실제 그것을 '처리'하는 작업자가 있어야 된다. 사용자가 "A책 20페이지를 펼쳐주세요", "이 책이 끝나면 다음 책을 가져오세요" 라는 명령을 내릴텐데, 이런 일련의 작업을 실행하는 사람 이 있을 것이다. 책은 스스로 움직이는게 아니니까 말이다. 뒷방(?)에 모셔져있는 책을 가져오는 사람도 필요하고, 그 책을 펼치는 사람도 필요하다. 그래서 이런 일련의 작업을 하는 것이 바로 CPU이다.
CPU는 속도의 개념으로 성능을 측정한다. 헤르츠라는 단위를 쓴다. 헤르츠가 높을 수록 높은 성능을 가진다. 헤르츠는 초당 진동 횟수를 나타내는 단위로, CPU의 경우 초당 수행할 수 있는 기본 연산의 횟수를 의미한다. 피아노칠때 메트로놈을 떠올려보면, 빠른 비트의 음악을 연주하려면 빠르게 손가락을 움직여야 하는 것과 같다. 높은 진동수는 높은 움직임을 가진거라고 보면 된다. 위에서 비유한 도서관을 예로 들면, 사용자가 요청한 책을 엄청 빨리 가져와서 펼치는 사람이 있는것과 같다.
- 모든 계산과 결정을 담당
모든 조직에는 관리자가 있어야 효율적으로 돌아가듯이 컴퓨터도 마찬가지다. 커널은 일종의 관리자이다. 무엇을 관리하냐면, 위에서 이야기한 메모리, CPU 그리고 디스크의 입출력(I/O, 즉 Input과 Output)을 관리한다.
왜 필요할까? 만약 위에서 이야기한 도서관에서 CPU 역할을 하는 사람이 책을 갖고와서 보여주는데, 사용자 입력을 그대로 받아서 보여준다고 하면 시스템이 정상적으로 돌아가지 않을 가능성이 높다. 사용자가 100명이 와서 갑자기 요청을 하면 어떻게 될까? 중재해주는 사람이 없으면 혼란에 빠지거나 그냥 뻗어버리게 될 것이다.
- CPU와 메모리, 입출력 요청을 관리한다.
사실, OS가 제일 유저와 맞닿아있는 레이어이다. 흔히들 알고 있는 Window 운영체제나, MacOS를 생각하면 된다. 층으로 분리해서 생각해보면, 제일 밑에는 메모리, 및 CPU의 하드웨어이고, 그 위층에는 그것들을 관리하는 커널이 있고, 그 모든 것을 감싼 것이 OS이다. OS에서는 컴퓨터 전체 시스템을 관리하고 사용자가 조작할 수 있는 인터페이스를 제공한다. 도서관으로 비유하자면 'A책 20페이지를 펴주세요' 라고 최초의 사용자의 요청을 받는 것이 OS이다.
커널은 OS의 엔진과 같은 부분이다. 커널의 역할은 하드웨어와 소프트웨어의 리소스를 관리하는 것이다.
지금 이 글을 보기 위해서 웹 브라우저를 실행했다면, 그때의 컴퓨터 동작을 살펴보자.
1. 프로그램 실행:
- 사용자: 바탕화면의 웹 브라우저 아이콘을 더블클릭
- OS: 클릭 이벤트를 감지하고 웹 브라우저 실행 명령을 커널에 전달
- 커널: 디스크에서 브라우저 프로그램을 읽어서 메모리에 로드하도록 지시
- CPU: 메모리에 로드된 브라우저 프로그램의 명령어를 실행
2. 웹 페이지 요청
- 사용자: 주소창에 URL 입력 후 엔터
- OS: 입력 이벤트를 브라우저에 전달
- 브라우저: 네트워크 요청을 OS에 전달
- OS: 네트워크 스택을 통해 요청을 처리하고 커널에 전달
- 커널: 네트워크 장치 드라이버를 통해 요청을 인터넷으로 전송
3. 데이터 수신 및 처리
- 커널: 네트워크로부터 데이터 수신, 메모리에 저장
- OS: 수신된 데이터를 브라우저에 전달
- CPU: 브라우저의 렌더링 엔진 코드를 실행하여 웹 페이지 처리
- GPU: (있다면) 그래픽 처리를 지원
이렇게 OS 는 전체적인 조율을 담당하고, 커널은 하드웨어의 자원 관리 및 저수준의 작업을 진행한다. CPU는 실제 연산을 처리하고, 메모리는 실행중인 프로그램과 데이터를 저장하며, 디스크는 영구적인 데이터를 저장한다.
끝!