serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
목차/1단원1 / 16

컴퓨터는 무엇으로 되어 있나

내 프로그램이 파일을 기다리며 멈춰 있는 동안, CPU도 같이 노는 걸까요? 직원이 한 명뿐인 사무실을 떠올려 보세요 — 한 손님이 서류를 가지러 간 사이에도 직원은 다음 손님을 부릅니다.

본론에 들어가기 전에 큰 그림부터 그립니다. 컴퓨터가 프로그램을 돌린다는 것은 정확히 무슨 일이 벌어지는 것인지, 부품들이 각각 무슨 역할을 하는지를 먼저 알아야 뒤의 이야기가 전부 이어집니다. 특히 이 단원에서 꼭 가져가야 할 문장이 하나 있습니다 — CPU는 언제나 누군가의 코드를 실행하고 있습니다. 아래 다이어그램을 한 단계씩 넘겨보세요.

① 부품은 크게 셋 — CPU, 메모리, 장치

CPU는 계산과 명령 실행을 담당합니다. 메모리(RAM)는 지금 돌아가는 프로그램의 코드와 데이터를 담아둡니다. 디스크·네트워크·키보드 같은 것들은 장치라고 부릅니다. 중요한 건 CPU가 혼자서는 아무것도 모른다는 점입니다. 무엇을 할지는 메모리에 적힌 명령을 하나씩 읽어 와야 압니다.

② 프로그램을 실행한다는 것

디스크에 저장된 프로그램 파일은 그냥 죽어 있는 데이터입니다. 실행하면 운영체제가 그 내용을 메모리로 옮기고, 이 프로그램이 쓸 메모리 공간을 마련하고, CPU에게 "여기서부터 시작하라"고 알려줍니다. 그 순간부터 CPU는 그 프로그램의 명령을 한 줄씩 실행합니다.

③ 운영체제는 심판이자 중개인

프로그램이 디스크를 직접 조작하거나 다른 프로그램의 메모리를 읽을 수 있다면 컴퓨터는 순식간에 엉망이 됩니다. 그래서 그런 위험한 일은 운영체제만 할 수 있게 막아두고, 프로그램은 운영체제에게 부탁합니다. 또 운영체제는 CPU를 누구에게 얼마나 줄지도 정합니다. 즉 운영체제는 자원의 심판이자 중개인입니다.

④ 이 시리즈에서 가장 중요한 오해 하나

"내 프로그램이 디스크를 기다리며 멈췄다"와 "CPU가 논다"는 완전히 다른 말입니다. 내 프로그램이 멈춘 순간, 운영체제는 곧바로 다른 프로그램을 CPU에 올립니다. CPU 입장에서는 쉴 틈이 없습니다. 실제로 CPU가 쉬는 것은 실행할 수 있는 프로그램이 하나도 없을 때뿐입니다. 앞으로 나올 모든 이야기가 이 구분 위에 서 있습니다.

⑤ 다이어그램에서 확인할 것

아래 그림에서 CPU 상자 안의 라벨을 계속 보세요. 프로그램 A를 실행하다가, 시스템 콜이 일어나면 운영체제로 바뀌고, A가 기다리는 동안에는 프로그램 B로 바뀝니다. 장치가 일을 마치면 인터럽트로 CPU를 부르고, 아무도 실행할 게 없을 때만 idle이 됩니다. 이 라벨이 비어 있는 순간은 없습니다.

단계 1/11속도
CPU
계산 · 명령 실행
지금 실행 중
프로그램 A
PC A · 1번 줄
메모리 — 올라와 있는 프로그램들
프로그램 A · 웹 서버실행 중
1id = parse(req)◀ 실행 중
2user = db.query(id)
3return toJson(user)
프로그램 B · 이미지 변환차례 대기
1img = decode(raw)
2resize(img)
3save(img)
커널 (운영체제)대기
1handleSyscall()
2schedule()
3handleInterrupt()
장치 · 디스크대기

컴퓨터의 부품은 크게 셋입니다. 계산을 하는 CPU, 프로그램들이 올라와 있는 메모리, 그리고 디스크 같은 장치입니다. 메모리 안을 보세요 — 프로그램이 여러 개 동시에 올라와 있습니다. 하지만 CPU는 하나뿐이라, 지금 이 순간 실행되는 것은 그중 하나입니다.

시뮬레이터에서 해보기

  1. 1.'3-tier 기본' 프리셋을 열면 client 노드의 RPS가 기본 1,000으로 잡혀 있습니다 — Spring(Tomcat) 카드를 클릭해 CPU 게이지가 63%인 것을, MySQL 카드에서 11%인 것을 확인하세요.
  2. 2.RPS 슬라이더를 좌우로 움직여 보세요 — 이 노브가 '컴퓨터에게 얼마나 시킬지'를 정하고, 카드의 CPU 게이지가 그 결과를 실시간으로 보여줍니다.
시뮬레이터에서 실험해보기 →

이 단원의 용어

CPU
명령을 하나씩 인출·해석·실행하는 부품. 컴퓨터에서 실제로 "계산"을 하는 유일한 곳.
메모리(RAM)
실행 중인 프로그램의 코드와 데이터를 담는 곳. 전원이 꺼지면 사라진다.
장치(I/O device)
디스크·네트워크 등 CPU 바깥의 부품. CPU보다 훨씬 느리고, 스스로 일한다.
운영체제(OS)
자원을 나눠 주고 위험한 일을 대신 해주는 관리자 프로그램. 커널이 그 핵심.
시스템 콜
프로그램이 운영체제에게 일을 부탁하는 통로.
인터럽트
장치가 "일이 끝났다"고 CPU에게 거는 신호.

CPU는 언제나 누군가의 코드를 실행 중이다 — 내 프로그램이 멈춘 것과 CPU가 노는 것은 다르다.

남은 문제

그럼 CPU는 코드 한 줄을 정확히 어떻게 실행할까요? 다음 단원에서 명령 하나 수준까지 내려가 봅니다 →

다음 단원 →

2단원. 코드 한 줄은 어떻게 실행되나