중앙처리장치(CPU)·명령어·레지스터·클록
total = price + tax라는 한 줄도 중앙처리장치에서는 값을 가져오고, 더하고, 결과를 기록하는 여러 명령으로 풀린다. 명령이 어디 있는지, 다음 명령은 무엇인지, 계산 중인 값은 어디에 둘지 기억할 작은 저장공간도 필요하다. 이 과정을 모르면 클록 숫자만 보고 컴퓨터 성능을 단정하거나, 메모리를 기다리는…
프로그램의 한 줄은 중앙처리장치의 여러 단계가 된다
total = price + tax라는 한 줄도 중앙처리장치에서는 값을 가져오고, 더하고, 결과를 기록하는 여러 명령으로 풀린다. 명령이 어디 있는지, 다음 명령은 무엇인지, 계산 중인 값은 어디에 둘지 기억할 작은 저장공간도 필요하다. 이 과정을 모르면 클록 숫자만 보고 컴퓨터 성능을 단정하거나, 메모리를 기다리는 시간을 계산 시간으로 오해하기 쉽다.
중앙처리장치는 명령을 수행하는 장치이고 명령어 사이클은 그 반복 동작이다. 레지스터는 중앙처리장치 가까이에서 현재 명령·주소·계산값을 보관하며, 클록은 내부 동작의 타이밍을 맞춘다.
먼저 되짚기: 명령과 데이터는 모두 비트로 표현된다
비트열은 해석 규칙에 따라 값이 되었고, 프로그램은 컴퓨터가 수행할 명령과 규칙의 표현이었다. 중앙처리장치는 어떤 비트열은 명령으로, 어떤 비트열은 데이터로 해석한다. 프로그램의 규칙이 실행 가능한 기계 명령으로 번역되어 있다는 전제에서 이번 사이클을 읽는다.
비트로 표현된 프로그램이 CPU의 실행순환으로 들어간다
기계 명령의 비트열은 인출·해석·실행·기록의 순환으로 들어간다. 기록 뒤 다음 명령 주소를 갱신해 같은 사이클을 반복한다.
비트열이 명령이라는 사실과 그 명령을 실제로 반복 수행하는 CPU의 역할을 분리한다.
CPU
중앙처리장치(Central Processing Unit, CPU)는 명령을 인출·해석·실행하고 연산과 제어를 수행하는 장치다. 연산장치는 산술·논리 계산을, 제어장치는 다음 동작과 데이터 이동을 지시한다. 레지스터는 CPU 내부 또는 매우 가까이에 있는 작은 고속 저장공간으로 현재 명령, 다음 명령 위치, 계산 중인 값을 둔다.
명령어 사이클 전에 CPU의 책임을 다시 잇는다
CPU는 명령을 인출·해석·실행하고 연산과 제어를 수행한다. 명령어 사이클은 이 책임이 한 명령마다 어떤 순서로 반복되는지 설명한다.
CPU의 한 번의 실행을 단계로 펼친다
다음 명령 위치와 피연산자가 준비되어야 인출·해석·실행·기록이 이어진다. 메모리나 분기 결과를 기다리는 시간도 실제 완료시간에 포함된다.
명령어 사이클
명령어 사이클은 명령어를 가져와 해석하고 피연산자를 처리해 결과를 기록하는 순환이다. 인출(fetch)은 다음 명령을 메모리 계층에서 가져오고, 해석(decode)은 명령 종류와 필요한 값을 판별하며, 실행(execute)은 연산·이동·분기·입출력을 수행하고 결과를 레지스터나 메모리에 기록한다.
클록은 회로의 상태 변경 시점을 맞추는 주기 신호다. 초당 클록 수가 높으면 더 촘촘한 단계 진행 가능성을 뜻하지만, 명령 하나에 필요한 단계 수와 한 주기에 처리하는 일, 메모리 대기와 병렬 처리 정도가 함께 성능을 정한다.
두 값을 더하는 명령의 흐름
ADD 명령의 결과를 기록한 뒤 다음 명령으로 돌아간다 · 상태 따라가기
ADD는 R1=1200과 R2=100을 입력으로 사용한다. 모든 단계에서 레지스터·명령·결과의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
다음 명령 주소가 가리키는 ADD R1,R2를 인출하고 두 레지스터를 해석한다. 이 교육용 명령은 R1=1200과 R2=100을 더해 기록 뒤 R1=1300·R2=100이 된다. 다음 명령 주소를 갱신해 인출로 돌아간다. 값이나 분기 결과를 기다리면 단계가 멈출 수 있으며 실제 CPU의 단계 겹침은 이 개념 순환과 구별한다.
이 예의 조건
- 다음 명령 주소가 가리키는 ADD R1,R2를 인출하고 두 레지스터를 해석한다. 이 교육용 명령은 R1=1200과 R2=100을 더해 기록 뒤 R1=1300·R2=100이 된다. 다음 명령 주소를 갱신해 인출로 돌아간다. 값이나 분기 결과를 기다리면 단계가 멈출 수 있으며 실제 CPU의 단계 겹침은 이 개념 순환과 구별한다.
- 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
관계도의 보충 설명
| 대상 | 원 설명 |
|---|---|
| 다음 명령 주소 | 주소 레지스터 |
| 인출 | ADD R1,R2 가져오기 |
| 해석 | R1·R2 읽고 R1에 쓰기 |
| 실행 | 1200 + 100 = 1300 |
| 기록·주소 갱신 | R1=1300 · R2=100 |
| 연결 | 원 라벨·방향 |
|---|---|
| 다음 명령 주소 → 인출 | 라벨 없는 연결 / 정방향 / 실선 |
| 인출 → 해석 | 라벨 없는 연결 / 정방향 / 실선 |
| 해석 → 실행 | 라벨 없는 연결 / 정방향 / 실선 |
| 실행 → 기록·주소 갱신 | 라벨 없는 연결 / 정방향 / 실선 |
| 기록·주소 갱신 → 다음 명령 주소 | 다음 명령 / 정방향 / 점선 |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| ADD 입력 ADD는 R1=1200과 R2=100을 입력으로 사용한다. |
|
|
| 합 계산 현재 두 입력을 더하면 1300이다. |
|
|
| 대상 기록 1300을 R1에 기록하며 R2는 100을 유지한다. |
|
|
| 다음 명령 새 R1을 보전하고 다음 PC의 명령으로 진행한다. |
|
|
ADD 명령의 결과를 기록한 뒤 다음 명령으로 돌아간다 · 상태 따라가기
ADD는 R1=1200과 R2=100을 입력으로 사용한다. 모든 단계에서 레지스터·명령·결과의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
다음 명령 주소가 가리키는 ADD R1,R2를 인출하고 두 레지스터를 해석한다. 이 교육용 명령은 R1=1200과 R2=100을 더해 기록 뒤 R1=1300·R2=100이 된다. 다음 명령 주소를 갱신해 인출로 돌아간다. 값이나 분기 결과를 기다리면 단계가 멈출 수 있으며 실제 CPU의 단계 겹침은 이 개념 순환과 구별한다.
이 예의 조건
- 다음 명령 주소가 가리키는 ADD R1,R2를 인출하고 두 레지스터를 해석한다. 이 교육용 명령은 R1=1200과 R2=100을 더해 기록 뒤 R1=1300·R2=100이 된다. 다음 명령 주소를 갱신해 인출로 돌아간다. 값이나 분기 결과를 기다리면 단계가 멈출 수 있으며 실제 CPU의 단계 겹침은 이 개념 순환과 구별한다.
- 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
관계도의 보충 설명
| 대상 | 원 설명 |
|---|---|
| 다음 명령 주소 | 주소 레지스터 |
| 인출 | ADD R1,R2 가져오기 |
| 해석 | R1·R2 읽고 R1에 쓰기 |
| 실행 | 1200 + 100 = 1300 |
| 기록·주소 갱신 | R1=1300 · R2=100 |
| 연결 | 원 라벨·방향 |
|---|---|
| 다음 명령 주소 → 인출 | 라벨 없는 연결 / 정방향 / 실선 |
| 인출 → 해석 | 라벨 없는 연결 / 정방향 / 실선 |
| 해석 → 실행 | 라벨 없는 연결 / 정방향 / 실선 |
| 실행 → 기록·주소 갱신 | 라벨 없는 연결 / 정방향 / 실선 |
| 기록·주소 갱신 → 다음 명령 주소 | 다음 명령 / 정방향 / 점선 |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| ADD 입력 ADD는 R1=1200과 R2=100을 입력으로 사용한다. |
|
|
| 합 계산 현재 두 입력을 더하면 1300이다. |
|
|
| 대상 기록 1300을 R1에 기록하며 R2는 100을 유지한다. |
|
|
| 다음 명령 새 R1을 보전하고 다음 PC의 명령으로 진행한다. |
|
|
현대 CPU는 여러 명령의 서로 다른 단계를 겹쳐 처리할 수 있다. 그래도 개념적으로 각 명령은 필요한 값이 준비되고 규칙에 맞는 결과가 기록되어야 완료된다. 분기 결과를 미리 알 수 없거나 데이터가 메모리에서 아직 오지 않았다면 일부 단계가 기다릴 수 있다. 이 대기가 클록 숫자만으로 실제 처리시간을 알 수 없는 핵심 이유다.
가상 명령 ADD R1, R2에서 ADD는 더하기, R1·R2는 두 레지스터의 이름이며 이 예의 계약은 “R1의 값과 R2의 값을 더해 R1에 쓴다”이다. 시작값 R1=1200, R2=100이라면 인출 후에는 명령이 준비되고 두 값은 그대로다. 해석 후에는 읽을 두 레지스터와 쓸 R1이 정해지고, 실행에서 1300을 만들며, 기록 뒤 R1=1300·R2=100이 된다. 다른 CPU의 같은 이름 명령이 반드시 이 형식이라는 뜻은 아니다. 주기가 빠르더라도 R2의 값이 준비되지 않았다면 실행으로 넘어갈 수 없다.
CP-1: 클록만 보지 않고 CPU 시간을 계산한다
같은 작업을 두 CPU가 수행한다고 하자. CPI(Cycles Per Instruction)는 명령 한 개를 완료하는 데 든 평균 클록 주기 수다. 여기서는 같은 실행 구간에서 센 전체 클록 주기 수를 완료한 명령 수로 나눈다. 단위는 주기/명령이며, 여러 명령의 단계를 겹치면 평균 CPI가 1보다 작을 수도 있다. 클록 주파수는 주기/초이고 1 GHz = 10^9주기/초다.
한 실행흐름이 일정한 클록으로 동작하는 교육용 모형에서 CPU 시간 = 명령 수 × 평균 CPI / 클록 주파수다. 단위도 명령 × 주기/명령 ÷ 주기/초 = 초로 맞는다. 이때 센 주기에 메모리 응답이나 분기 결과를 기다린 주기가 포함되어 있으면 그 대기는 이미 CPI와 CPU 시간에 들어 있다. 이 식을 유용한 산술 계산만의 시간이라고 읽지 않는다.
| CPU | 명령 수 | 평균 CPI | 클록 | 계산 CPU 시간 |
|---|---|---|---|---|
| A | 10억 | 1.2 | 3.0 GHz | 0.40 s |
| B | 10억 | 0.8 | 2.5 GHz | 0.32 s |
A의 클록이 더 높지만 이 예에서는 B가 더 짧다. 10^9×1.2/(3×10^9)=0.40, 10^9×0.8/(2.5×10^9)=0.32이기 때문이다. A는 12억 주기를 초당 30억 주기로, B는 8억 주기를 초당 25억 주기로 나눈 결과다.
이어서 두 실행 모두 CPU를 사용하지 않고 외부 입출력 완료를 기다리는 시간이 0.15초 있다고 가정한다. 이 대기는 위에서 센 CPU 주기에 없고 CPU 실행과도 겹치지 않으므로, 순차적인 전체 완료시간은 A 0.40+0.15=0.55초, B 0.32+0.15=0.47초다. 반대로 메모리 정지시간 0.15초가 앞 CPI에 이미 포함됐다면 다시 더하지 않는다. CPU 실행과 외부 대기가 겹치는 처리에서도 두 구간을 무조건 합산하지 않는다.
이 예의 명령 수·CPI·대기시간은 자체 교육용 조건이다. 실제 측정에서는 어떤 주기와 명령을 셌는지, 클록이 일정했는지, 여러 실행흐름의 시간을 합했는지를 먼저 확인해야 같은 식으로 비교할 수 있다.
성능을 판단하는 세 질문
| 질문 | 보는 것 | 단독 사용의 한계 |
|---|---|---|
| 클록이 얼마나 빠른가 | 초당 타이밍 주기 | 주기당 수행량과 대기를 모름 |
| 명령당 일이 얼마나 드는가 | 필요한 명령 수와 명령별 단계 | 실제 명령 조합과 병렬성을 모름 |
| 기다림이 얼마나 많은가 | 메모리·입출력·분기 대기 | 계산 자체의 효율을 모름 |
비교할 때는 같은 작업과 입력, 같은 소프트웨어 조건에서 끝나는 시간과 처리량을 먼저 본다. CPU 사용률이 높아도 유용한 계산이 아니라 반복 재시도나 기다림을 확인하는 작업일 수 있다. 반대로 사용률이 낮아도 외부 저장장치나 네트워크가 병목일 수 있다.
흔한 실패
클록 속도만 비교하면 서로 다른 구조와 작업을 하나의 수치로 판단하게 된다. 실제 작업시간·처리량·전력과 메모리 대기를 함께 측정한다.
명령 수만 최소화하려는 판단은 적은 수의 복잡한 명령이 항상 빠르다고 가정한다. 명령별 비용과 병렬 실행, 컴파일 결과를 확인한다.
CPU와 메모리 혼동은 데이터 대기 시간을 계산 능력 부족으로 판단해 CPU만 늘리는 경우다. 실행 시간에서 계산·캐시 실패·메모리·입출력 대기를 분해한다.
평균만 사용하면 특정 입력에서 분기와 대기가 급증하는 일을 놓칠 수 있다. 대표 입력과 느린 구간의 분포를 함께 본다.
자체 10점 문제
CPU의 명령어 사이클과 성능 영향요인을 설명하시오.
요구어는 설명이다. 인출·해석·실행·기록과 클록·CPI·대기를 실제 완료시간으로 연결한다.
10점 풀이 방향과 모범답안 보기
10점 답안 목차
- CPU와 레지스터
- 인출·해석·실행·기록
- 클록·명령수·CPI
- 메모리·분기 대기
- 실제 완료시간·처리량 비교
10점 답안 도식
명령 수 × 평균 CPI ÷ 클록 주파수 = CPU 시간
(센 주기에 포함된 메모리·분기 대기도 포함)
+
CPU 시간에 없고 실행과도 겹치지 않는 외부 대기
↓
전체 완료시간CP-1의 단일 실행흐름·고정 클록·순차 실행 가정에서 읽는다. 이미 CPI에 포함된 대기를 다시 더하지 않는다.
모범답안 축약본: 클록이 아닌 완료시간을 설명한다
문제: CPU의 명령어 사이클과 성능 영향요인을 설명하시오. 중앙처리장치(CPU)는 기계 명령을 인출·해석·실행하여 연산과 제어를 수행한다. 레지스터는 현재 명령 주소와 계산 중인 값을 가까이 보관하고, 클록은 회로의 상태 변경 시점을 맞춘다. 개념적 명령어 사이클은 명령 인출 → 연산·피연산자 해석 → 실행 → 결과 기록과 다음 위치 갱신이다. 실제 CPU는 여러 명령 단계를 겹치지만 데이터가 준비되지 않거나 분기 결과를 기다리면 멈춘다. 따라서 실제 완료시간은 클록 주파수만이 아니라 작업에 필요한 명령 수, 명령당 주기, 한 주기에 처리하는 일, 캐시·메모리·입출력 대기와 병렬성으로 결정된다. 같은 작업·입력·소프트웨어 조건에서 완료시간과 처리량을 측정하고 계산, 캐시 실패, 외부 대기를 분해해야 CPU 증설이 맞는 해결인지 판단할 수 있다.
자체 25점 문제
CPU 병목 여부를 판정하기 위한 측정·분해·개선 절차를 설계하시오.
요구어는 설계, 판정이다. 클록 숫자가 아니라 작업 완료시간을 계산·메모리·입출력 대기로 분해하고 개선 후 같은 작업으로 검증한다.
25점 풀이 방향과 모범답안 보기
25점 답안 목차
- 동일 작업·입력 고정
- 완료시간·처리량 기준선
- 명령수·CPI·클록
- 캐시·메모리 대기
- 입출력·분기 대기
- CPU 증설/코드개선 가설
- 변경 후 동일조건 재측정
- 평균·느린구간 함께 확인
25점 답안 도식
| CP-1 완료시간 구간 | 산식·집계 조건 |
|---|---|
| CPU 시간 | 명령 수 × 평균 CPI ÷ 클록; 센 주기에 포함된 메모리·분기 대기도 포함 |
| 별도 외부 대기 | CPU 시간에 없고 실행과도 겹치지 않는 입출력 대기만 합산 |
중복 집계를 점검한 뒤 병목 가설을 세우고, 변경 후 같은 작업을 재측정한다.
여러 작업이 겹치면 구간의 실제 시작·끝을 보아야 하며, 여러 CPU의 사용시간 합계를 곧바로 한 작업의 경과시간으로 쓰지 않는다.
25점 모범답안
먼저 같은 입력·소프트웨어·환경에서 완료시간과 처리량을 측정한다. CPU 시간은 같은 구간의 명령 수·평균 CPI·클록으로 계산하고, CPI가 메모리·분기 정지 주기를 포함하는지 확인한다. 포함된 대기를 다시 더하지 않고 CPU 실행 밖의 대기도 중첩 여부를 확인해 분리한다.
CP-1 조건에서 A는 CPU 0.40초와 별도 입출력 대기 0.15초로 0.55초, B는 0.32초와 0.15초로 0.47초다. 다른 비용·제약이 같다면 높은 클록의 A가 아니라 완료시간이 짧은 B를 선택한다. 다만 B의 별도 대기가 0.30초라면 0.62초가 되므로 같은 선택을 유지할 수 없다. 계산의 조건과 결과를 함께 제시한다.
CPU 구간이 길면 유용한 명령 실행이 오래 걸리는지, 메모리·분기를 기다리는 주기가 많은지 나눈다. 전자는 알고리즘·컴파일·CPU 자원을, 후자는 접근패턴과 캐시·메모리 계층을 검토한다. CPU 밖 입출력이 지배하면 CPU 증설만으로 해결한다고 보지 않는다.
개선 후 동일 작업으로 완료시간과 처리량을 다시 측정하고 평균뿐 아니라 느린 입력구간도 확인한다. CPU 사용률 하나만으로 증설을 결정하지 않는다.
출처와 적용 경계
본문은 안정된 CPU 실행모형과 자체 계산 예를 사용한다. CP-1의 CPI·대기 수치는 교육용이며 실제 프로세서 성능·전력·마이크로아키텍처를 대표하지 않는다.
30초 정리
- CPU는 기계 명령을 인출·해석·실행하고 레지스터에 현재 명령과 계산값을 둔다.
- 명령어 사이클은 인출–해석–실행–기록의 순환이며 실제 CPU는 여러 단계를 겹칠 수 있다.
- 성능은 클록뿐 아니라 명령량·주기당 일·메모리와 입출력 대기·병렬성으로 결정된다.
자기교정과 조건 변경
| 잘못 쓴 답 | 수정 | 복습 |
|---|---|---|
| 3GHz CPU는 2.5GHz보다 항상 빠르다 | 클록만으로 명령량과 주기당 일을 알 수 없으므로 같은 작업의 CPI·완료시간을 본다 | CP-1 |
| 클록 한 번에 명령 하나가 끝난다 | 여러 단계·명령이 겹칠 수 있어 명령당 평균 주기와 한 주기의 처리량을 구분한다 | 사이클 |
| CPU 사용률이 높으면 유용한 계산이 많다 | 재시도·대기 확인 작업도 CPU를 쓰므로 실제 수행 내용을 본다 | 판단 |
| CPI에 포함된 메모리 대기도 CPU 시간에 다시 더한다 | 이미 센 주기이므로 중복이다. 별도 합산은 포함되지 않고 겹치지도 않는 시간에만 한다 | CP-1 |
| 평균만 좋아지면 모든 입력이 빨라졌다 | 평균은 느린 일부 입력을 숨길 수 있으므로 구간별 분포도 확인한다 | 실패 |
A의 CPI가 0.9라면? 같은 주기 집계와 고정 클록에서 CPU 시간은 10^9×0.9/(3×10^9)=0.30초다. 별도 비중첩 대기 0.15초가 그대로면 전체는 0.45초다.
B의 별도 입출력 대기가 0.30초라면? CPU 시간에 포함되지 않고 실행과 겹치지 않는다는 같은 가정에서 완료시간은 0.32+0.30=0.62초로 A의 0.55초보다 길다. 이미 CPI에 포함된 메모리 대기라면 이 덧셈을 적용하지 않는다.
명령 수가 절반으로 줄면? CPI와 클록이 같을 때 CPU 시간만 절반이 된다. 별도 대기가 그대로면 전체 완료시간까지 절반이 되는 것은 아니며 실제 CPI·대기·중첩을 다시 측정한다.