CPU, 레지스터, 명령어 사이클, 기억장치
컴퓨터구조 학습 절입니다.
4장 1절에서는 컴퓨터의 기본 구조를 배웠습니다.
CPU
기억장치
입출력장치
시스템 버스
명령어
주소 지정 방식이번 절에서는 그중에서도 CPU가 실제로 명령어를 어떻게 실행하는지를 배웁니다.
이번 절의 핵심은 다음과 같습니다.
CPU = 명령어를 실행하는 장치
레지스터 = CPU 내부의 초고속 임시 저장소
명령어 사이클 = 명령어를 가져오고 실행하는 반복 과정
기억장치 계층 = 빠른 저장장치와 큰 저장장치를 층으로 구성한 구조이 내용은 컴퓨터구조 출제범위의 중앙처리장치 구성요소, 명령어 사이클, 마이크로 연산, 명령어 인출 사이클, 실행 사이클, 명령어 파이프라이닝, RISC와 CISC, 기억장치 계층구조, RAM, ROM, 캐시, 가상기억장치와 직접 연결됩니다. 운영체제에서도 컴퓨터 시스템 개요, 명령어 수행, 인터럽트, 기억장치 계층구조, 캐시 기억장치, 주기억장치 관리, 가상기억장치를 다룹니다.
이번 절의 큰 그림
이번 절에서 배울 흐름은 다음과 같습니다.
CPU 구성요소
→ ALU, 제어장치, 레지스터, 내부버스
→ 주요 레지스터
→ 마이크로 연산
→ 명령어 사이클
→ 인출 사이클
→ 실행 사이클
→ 인터럽트 사이클
→ 파이프라이닝
→ RISC와 CISC
→ 기억장치 계층구조
→ RAM, ROM, 캐시, 가상기억장치4장 1절이 “명령어가 어떻게 생겼는가”였다면, 4장 2절은 “CPU가 그 명령어를 실제로 어떻게 처리하는가”입니다.
CPU 구성
CPU란?
CPU는 Central Processing Unit, 중앙처리장치입니다.
한 문장으로 말하면: CPU는 메모리에서 명령어를 가져와 해석하고 실행하는 장치입니다.
CPU가 하는 일은 크게 세 가지입니다.
1. 명령어를 가져옵니다.
2. 명령어를 해석합니다.
3. 명령어를 실행합니다.예를 들어 메모리에 이런 명령어가 있다고 가정하겠습니다.
LOAD A
ADD B
STORE CCPU는 이것을 순서대로 처리합니다.
A 값을 가져옵니다.
B 값을 더합니다.
결과를 C에 저장합니다.즉 CPU는 컴퓨터의 “두뇌”라고 부르지만, 더 정확히는 명령어 처리 장치입니다.
CPU의 구성요소
CPU는 크게 네 부분으로 볼 수 있습니다.
| 구성요소 | 역할 |
|---|---|
| ALU, 산술논리장치 | 계산과 논리 연산 수행 |
| 제어장치, CU | 명령어 해석과 제어신호 발생 |
| 레지스터 | CPU 내부의 빠른 임시 저장소 |
| 내부버스 | CPU 내부에서 데이터 이동 |
컴퓨터구조 범위에서도 중앙처리장치 구성요소로 산술논리장치, 레지스터, 제어장치, 내부버스가 제시되어 있습니다.
ALU = 계산
제어장치 = 지휘
레지스터 = 임시 저장
내부버스 = CPU 안의 길ALU, 산술논리장치
ALU는 Arithmetic Logic Unit입니다.
이름 그대로 두 가지 일을 합니다.
산술 연산
논리 연산산술 연산
숫자 계산입니다.
덧셈
뺄셈
곱셈
나눗셈
증가
감소A + B
A - B
A * B논리 연산
참/거짓 또는 비트 단위 연산입니다.
AND
OR
NOT
XOR
비교
시프트1010 AND 1100 = 10001장 3절에서 배운 논리게이트가 CPU 내부의 ALU와 연결됩니다.
논리게이트 → 논리회로 → ALU제어장치, CU
제어장치는 Control Unit입니다.
제어장치는 CPU 안에서 지휘자 역할을 합니다.
명령어를 해석합니다.
어떤 장치가 언제 동작할지 지시합니다.
제어신호를 발생시킵니다.
데이터 이동 순서를 조정합니다.예를 들어 명령어가 다음과 같다고 가정하겠습니다.
ADD B제어장치는 이 명령어를 해석합니다.
“B 값을 가져와서 ALU로 보내라.”
“ALU에게 덧셈을 하라고 지시하라.”
“결과를 레지스터에 저장하라.”즉 제어장치는 직접 계산하지 않습니다. 계산은 ALU가 합니다.
제어장치는 “누가 언제 무엇을 해야 하는지” 지시합니다.
레지스터
레지스터는 CPU 내부에 있는 아주 빠른 임시 저장소입니다.
메모리보다 훨씬 빠르지만 용량은 매우 작습니다.
레지스터 = CPU 안의 초고속 메모장CPU가 연산하려면 데이터를 잠깐 저장할 곳이 필요합니다.
A + B를 계산하려면 CPU는 A와 B 값을 가져와서 잠깐 저장하고, ALU가 더한 결과도 잠깐 저장해야 합니다.
이때 쓰는 것이 레지스터입니다.
내부버스
내부버스는 CPU 내부에서 데이터가 이동하는 통로입니다.
CPU 안에도 여러 부품이 있습니다.
레지스터
ALU
제어장치이 부품들 사이에서 데이터가 이동해야 합니다.
레지스터 → ALU
ALU → 레지스터
제어장치 → 각 장치이 통로가 내부버스입니다.
4장 1절에서 시스템 버스를 배웠습니다.
시스템 버스 = CPU와 메모리, 입출력장치 사이의 길
내부버스 = CPU 내부의 길주요 레지스터
주요 레지스터 종류
CPU에는 여러 종류의 레지스터가 있습니다.
시험에서 중요한 레지스터는 다음과 같습니다.
| 레지스터 | 이름 | 역할 |
|---|---|---|
| PC | 프로그램 카운터 | 다음에 실행할 명령어 주소 저장 |
| IR | 명령어 레지스터 | 현재 실행 중인 명령어 저장 |
| MAR | 메모리 주소 레지스터 | 접근할 메모리 주소 저장 |
| MBR/MDR | 메모리 버퍼/데이터 레지스터 | 메모리에서 읽거나 쓸 데이터 저장 |
| AC | 누산기 | 연산 결과 임시 저장 |
| SP | 스택 포인터 | 스택의 top 위치 저장 |
| PSW/Flag | 상태 레지스터 | 연산 결과 상태 저장 |
| GPR | 범용 레지스터 | 일반 데이터 임시 저장 |
하나씩 살펴보겠습니다.
PC, 프로그램 카운터
PC는 Program Counter다.
역할: 다음에 실행할 명령어의 주소를 저장합니다.
예를 들어 메모리에 명령어가 이렇게 있다고 가정하겠습니다.
100번지: LOAD A
101번지: ADD B
102번지: STORE C현재 100번지 명령어를 실행하고 있다면, 다음 명령어는 101번지입니다.
그래서 PC는 보통 다음 주소를 가집니다.
PC = 101명령어를 하나 가져오면 PC는 다음 명령어 주소로 증가합니다.
PC ← PC + 1단, 분기 명령어가 나오면 PC는 순서대로 증가하지 않고 다른 주소로 바뀔 수 있습니다.
JUMP 200PC = 200이 됩니다.
IR, 명령어 레지스터
IR은 Instruction Register다.
역할: 현재 실행 중인 명령어를 저장합니다.
명령어 인출 과정에서 메모리에서 가져온 명령어가 IR에 들어갑니다.
IR = LOAD A제어장치는 IR에 들어 있는 명령어를 보고 해석합니다.
“아, LOAD 명령어구나.”
“피연산자는 A구나.”PC = 다음 명령어 주소
IR = 현재 명령어라고 구분하면 됩니다.
MAR, 메모리 주소 레지스터
MAR은 Memory Address Register다.
역할: 메모리에 접근할 주소를 저장합니다.
MAR = 1000이 됩니다.
그리고 이 주소가 주소버스를 통해 메모리로 전달됩니다.
4장 1절에서 배운 주소버스와 연결됩니다.
MAR의 값 → 주소버스 → 메모리즉 MAR은 “어디에 접근할 것인가”를 담는 레지스터입니다.
MBR 또는 MDR
MBR은 Memory Buffer Register, MDR은 Memory Data Register라고도 합니다.
역할: 메모리에서 읽어온 데이터 또는 메모리에 쓸 데이터를 임시 저장합니다.
예를 들어 CPU가 메모리 1000번지에서 값을 읽는다고 가정하겠습니다.
MAR = 1000
메모리 읽기
MBR = M[1000]MAR = 2000
MBR = 50
메모리 쓰기
M[2000] = 50MAR = 주소
MBR/MDR = 데이터AC, 누산기
AC는 Accumulator, 누산기입니다.
역할: 연산 결과를 임시로 저장합니다.
4장 1절에서 이런 명령어를 봤습니다.
LOAD A
ADD B
MUL C이때 AC 값은 이렇게 변합니다.
LOAD A → AC = A
ADD B → AC = A + B
MUL C → AC = (A + B) * C1주소 명령어 방식에서는 AC를 중심으로 계산이 이루어집니다.
ADD B = AC ← AC + M[B]시험에서 AC 추적 문제는 자주 나옵니다.
SP, 스택 포인터
SP는 Stack Pointer다.
역할: 스택의 top 위치를 저장합니다.
3장 2절에서 스택을 배웠습니다.
push = 넣기
pop = 꺼내기
top = 맨 위CPU에서도 함수 호출, 복귀 주소 저장, 임시 데이터 저장에 스택을 사용합니다.
SP는 현재 스택의 맨 위가 어디인지 알려줍니다.
CALL 함수를 하면 복귀 주소가 스택에 저장될 수 있고, SP가 변합니다.
RET를 하면 스택에서 복귀 주소를 꺼내고 SP가 변합니다.
즉 스택 포인터는 함수 호출과 재귀 실행에서 중요합니다.
상태 레지스터, Flag, PSW
상태 레지스터는 연산 결과의 상태를 저장합니다.
예를 들어 ALU가 계산을 했습니다.
A - B결과가 0이면 Zero Flag가 1이 될 수 있습니다.
대표 플래그는 다음과 같습니다.
| 플래그 | 의미 |
|---|---|
| Zero Flag, Z | 결과가 0인지 표시 |
| Sign Flag, S | 결과가 음수인지 표시 |
| Carry Flag, C | 자리올림 또는 빌림 발생 여부 |
| Overflow Flag, V | 오버플로 발생 여부 |
| Interrupt Flag | 인터럽트 허용 여부 |
이 플래그들은 분기 명령어와 연결됩니다.
BEQ 200같으면 200번지로 이동이때 “같습니다”는 보통 비교 결과가 0인지, 즉 Zero Flag를 보고 판단합니다.
범용 레지스터
범용 레지스터는 일반 데이터를 저장하는 레지스터입니다.
R0, R1, R2, R3같은 이름으로 많이 표현합니다.
범용 레지스터는 특정 기능이 고정되어 있지 않고, 여러 용도로 사용될 수 있습니다.
R1 = A 값
R2 = B 값
R3 = A+B 결과레지스터가 많으면 메모리에 자주 가지 않아도 되므로 빠릅니다.
레지스터 정리표
| 레지스터 | 핵심 역할 |
|---|---|
| PC | 다음 명령어 주소 |
| IR | 현재 명령어 |
| MAR | 메모리 주소 |
| MBR/MDR | 메모리 데이터 |
| AC | 연산 결과 |
| SP | 스택 top 위치 |
| Flag/PSW | 연산 상태 |
| GPR | 일반 데이터 |
PC = 다음 주소
IR = 현재 명령어
MAR = 메모리 주소
MBR = 메모리 데이터
AC = 계산 결과
SP = 스택 위치
Flag = 상태 표시마이크로 연산과 명령어 사이클
마이크로 연산
마이크로 연산은 CPU 내부에서 일어나는 아주 작은 기본 연산입니다.
컴퓨터구조 예시문제에서도 마이크로 연산을 “CPU 내부에서 제어장치에 의해 실행되는 연산이며, 하나의 클록 주기에 여러 개가 동시에 수행될 수도 있고, 원자 연산이라고도 하는 기본 단위 연산”으로 설명합니다. 정답은 마이크로 연산입니다.
MAR ← PC
PC ← PC + 1
IR ← MBR
AC ← AC + MBR이런 것들이 마이크로 연산입니다.
여기서 ←는 오른쪽 값을 왼쪽에 저장한다는 뜻입니다.
MAR ← PCPC 값을 MAR에 복사합니다.라는 뜻입니다.
마이크로 연산의 종류
마이크로 연산은 크게 이런 종류가 있습니다.
| 종류 | 예 |
|---|---|
| 레지스터 전송 | R1 ← R2 |
| 산술 연산 | R1 ← R1 + R2 |
| 논리 연산 | R1 ← R1 AND R2 |
| 시프트 연산 | R1 ← R1 << 1 |
| 메모리 읽기 | MBR ← M[MAR] |
| 메모리 쓰기 | M[MAR] ← MBR |
명령어 하나는 여러 마이크로 연산으로 이루어집니다.
LOAD A주소 계산
메모리 읽기
레지스터 저장같은 여러 마이크로 연산으로 나뉩니다.
명령어 사이클이란?
명령어 사이클은 CPU가 명령어 하나를 처리하는 전체 과정입니다.
가장 기본적인 구조는 다음과 같습니다.
인출 사이클 → 실행 사이클인출 Fetch
→ 해독 Decode
→ 실행 Execute
→ 필요하면 인터럽트 처리정의: 명령어 사이클은 CPU가 명령어를 인출하고 해석하고 실행하는 반복 과정입니다.
컴퓨터는 이 과정을 계속 반복합니다.
명령어 1개 처리
명령어 1개 처리
명령어 1개 처리
...이것이 프로그램 실행입니다.
명령어 사이클 전체 흐름
기본 흐름은 다음과 같습니다.
1. PC가 가리키는 주소에서 명령어를 가져옵니다.
2. 가져온 명령어를 IR에 저장합니다.
3. PC를 다음 명령어 주소로 증가시킵니다.
4. 제어장치가 IR의 명령어를 해석합니다.
5. 필요한 피연산자를 가져옵니다.
6. ALU 또는 관련 장치가 명령어를 실행합니다.
7. 결과를 레지스터나 메모리에 저장합니다.
8. 인터럽트가 있으면 처리합니다.이 흐름이 핵심입니다.
인출 사이클
인출 사이클은 Fetch Cycle입니다.
역할: 메모리에서 다음 명령어를 가져오는 과정
인출 사이클의 대표 마이크로 연산은 다음과 같이 표현할 수 있습니다.
MAR ← PC
MBR ← M[MAR]
PC ← PC + 1
IR ← MBR하나씩 해석하자.
1단계
MAR ← PCPC에는 다음 명령어의 주소가 들어 있습니다.
그 주소를 MAR로 보냅니다.
MAR = 명령어가 있는 메모리 주소2단계
MBR ← M[MAR]MAR이 가리키는 메모리 주소에서 명령어를 읽어옵니다.
읽어온 명령어는 MBR에 들어갑니다.
MBR = 메모리에서 읽은 명령어3단계
PC ← PC + 1다음 명령어를 가리키도록 PC를 증가시킵니다.
PC = 다음 명령어 주소명령어 길이에 따라 +1이 아니라 더 큰 값이 될 수도 있지만, 기본 개념은 “다음 명령어로 이동”입니다.
4단계
IR ← MBR읽어온 명령어를 IR에 저장합니다.
이제 제어장치는 IR의 명령어를 해석할 수 있습니다.
인출 사이클 한 줄 요약
인출 사이클은 다음과 같이 암기합니다.
PC의 주소를 MAR로 보냅니다.
메모리에서 명령어를 읽어 MBR에 넣습니다.
PC를 증가시킵니다.
MBR의 명령어를 IR에 넣습니다.PC → MAR → 메모리 → MBR → IR이 흐름을 이해해야 합니다.
실행 사이클
실행 사이클은 Execute Cycle입니다.
역할: IR에 들어 있는 명령어를 실제로 수행하는 과정
실행 사이클은 명령어 종류에 따라 다릅니다.
LOAD A
ADD B
STORE C
JUMP 100은 서로 실행 방식이 다릅니다.
그래서 실행 사이클은 명령어마다 다르게 구성됩니다.
LOAD 명령어 실행 예
LOAD AAC ← M[A]1. A의 주소를 MAR에 넣습니다.
2. 메모리에서 A 값을 읽어 MBR에 넣습니다.
3. MBR 값을 AC에 넣습니다.MAR ← A
MBR ← M[MAR]
AC ← MBRADD 명령어 실행 예
ADD BAC ← AC + M[B]1. B의 주소를 MAR에 넣습니다.
2. 메모리에서 B 값을 읽어 MBR에 넣습니다.
3. ALU가 AC와 MBR을 더합니다.
4. 결과를 AC에 저장합니다.MAR ← B
MBR ← M[MAR]
AC ← AC + MBRSTORE 명령어 실행 예
STORE CM[C] ← AC1. C의 주소를 MAR에 넣습니다.
2. AC 값을 MBR에 넣습니다.
3. MBR 값을 메모리 C 위치에 씁니다.MAR ← C
MBR ← AC
M[MAR] ← MBRJUMP 명령어 실행 예
JUMP 200PC ← 200보통 명령어는 실행 후 PC가 다음 주소로 가지만, JUMP는 PC를 강제로 바꿉니다.
PC ← 200이제 다음 인출 사이클에서는 200번지의 명령어를 가져옵니다.
조건문, 반복문, 함수 호출은 내부적으로 이런 분기 명령어와 연결됩니다.
간접 사이클
간접 주소지정방식을 사용할 때는 실제 데이터 주소를 한 번 더 찾아야 합니다.
4장 1절에서 간접 주소지정방식을 배웠습니다.
ADD @10001000번지에 실제 데이터가 있는 것이 아니라,
1000번지에 실제 데이터의 주소가 들어 있습니다.그러면 실행 전에 실제 주소를 구하는 과정이 필요합니다.
이 과정을 간접 사이클이라고 설명하기도 합니다.
MAR ← 주소 필드
MBR ← M[MAR]
유효주소 ← MBR주소를 한 번 더 따라갑니다.인터럽트 사이클
인터럽트는 CPU가 하던 일을 잠시 멈추고 급한 일을 처리하는 기능입니다.
키보드 입력 발생
프린터 작업 완료
입출력 오류 발생
타이머 신호 발생이런 사건이 생기면 CPU에게 알릴 필요가 있습니다.
이때 인터럽트가 발생합니다.
운영체제 범위에서도 컴퓨터 시스템 개요에서 인터럽트를 다룹니다.
인터럽트 처리 흐름
인터럽트가 발생하면 CPU는 대략 이렇게 처리합니다.
1. 현재 실행 중인 명령어를 끝냅니다.
2. 현재 상태를 저장합니다.
3. 인터럽트 서비스 루틴의 주소로 이동합니다.
4. 인터럽트 처리 코드를 실행합니다.
5. 저장했던 상태를 복원합니다.
6. 원래 프로그램으로 돌아갑니다.인터럽트 서비스 루틴은 인터럽트를 처리하기 위한 프로그램입니다.
키보드 입력 처리 루틴
디스크 입출력 완료 처리 루틴
타이머 처리 루틴인터럽트 = CPU에게 급한 일이 생겼다고 알리는 신호명령어 사이클 전체 정리
명령어 사이클은 상황에 따라 다음 단계들을 포함합니다.
인출 사이클
간접 사이클
실행 사이클
인터럽트 사이클| 사이클 | 역할 |
|---|---|
| 인출 사이클 | 명령어를 메모리에서 가져옴 |
| 간접 사이클 | 간접 주소 방식에서 실제 주소를 구함 |
| 실행 사이클 | 명령어를 수행함 |
| 인터럽트 사이클 | 인터럽트 발생 시 처리함 |
인출 → 실행인출 → 간접 여부 확인 → 실행 → 인터럽트 확인CPU 성능
클록과 CPU 속도
CPU는 클록 신호에 맞춰 동작합니다.
클록은 일정한 박자입니다.
똑, 똑, 똑, 똑CPU 내부의 마이크로 연산은 이 클록에 맞춰 수행됩니다.
클록 속도는 보통 Hz 단위로 표현합니다.
3GHz는 1초에 약 30억 번의 클록 주기가 있다는 뜻입니다.
하지만 CPU 성능은 클록만으로 결정되지 않습니다.
명령어당 필요한 클록 수
캐시 성능
파이프라이닝
코어 수
메모리 속도등도 중요합니다.
명령어 파이프라이닝
파이프라이닝은 여러 명령어를 단계별로 겹쳐서 처리하는 기법입니다.
비유하면 세탁 공정입니다.
세탁 → 헹굼 → 탈수빨래 1개를 끝까지 처리한 뒤 다음 빨래를 시작하면 느립니다.
대신 이렇게 합니다.
1번 빨래가 헹굼 중일 때
2번 빨래는 세탁 시작CPU도 비슷합니다.
명령어 처리를 단계로 나눕니다.
인출
해독
실행
메모리 접근
결과 저장한 명령어가 실행 단계에 있을 때, 다음 명령어는 해독 단계, 그다음 명령어는 인출 단계에 있을 수 있습니다.
컴퓨터구조 범위에도 중앙처리장치 단원에 명령어 파이프라이닝이 포함됩니다.
파이프라이닝의 장점과 문제
장점
여러 명령어를 겹쳐 처리하므로 전체 처리량이 증가합니다.즉 한 명령어의 실행 시간이 줄어든다기보입니다, 단위 시간당 처리하는 명령어 수가 늘어납니다.
문제
파이프라이닝에는 위험 요소가 있습니다.
| 문제 | 설명 |
|---|---|
| 구조적 해저드 | 같은 하드웨어 자원을 동시에 쓰려는 충돌 |
| 데이터 해저드 | 이전 명령어 결과가 아직 준비되지 않음 |
| 제어 해저드 | 분기 명령어 때문에 다음 명령어를 예측하기 어려움 |
지금은 깊게 외우기보다 이렇게만 알면 됩니다.
파이프라이닝 = 명령어 처리 단계를 겹쳐서 성능 향상
하지만 충돌 문제가 생길 수 있음RISC와 CISC
컴퓨터 명령어 설계 방식에는 대표적으로 RISC와 CISC가 있습니다.
컴퓨터구조 범위에도 RISC와 CISC 개념, 특징 및 비교가 포함됩니다.
CISC
CISC는 Complex Instruction Set Computer다.
복잡한 명령어 집합 컴퓨터명령어 종류가 많습니다.
명령어 하나가 복잡한 일을 할 수 있습니다.
명령어 길이가 다양할 수 있습니다.
하드웨어 제어가 복잡합니다.RISC
RISC는 Reduced Instruction Set Computer다.
축소 명령어 집합 컴퓨터명령어 종류가 적고 단순합니다.
대부분 명령어를 빠르게 실행하도록 설계합니다.
명령어 길이가 비교적 일정합니다.
파이프라이닝에 유리합니다.
레지스터 사용이 많습니다.RISC와 CISC 비교표
| 구분 | RISC | CISC |
|---|---|---|
| 명령어 수 | 적음 | 많음 |
| 명령어 복잡도 | 단순 | 복잡 |
| 명령어 길이 | 비교적 고정 | 다양할 수 있음 |
| 실행 속도 | 단순 명령어 빠르게 | 명령어마다 차이 |
| 제어 방식 | 하드와이어드 제어에 유리 | 마이크로프로그램 제어와 연결 |
| 파이프라이닝 | 유리 | 상대적으로 어려움 |
| 메모리 접근 | LOAD/STORE 중심 | 다양한 명령어에서 가능 |
RISC = 단순 명령어, 빠른 반복
CISC = 복잡 명령어, 다양한 기능기억장치 계층
기억장치 계층구조
이제 기억장치로 넘어갑니다.
컴퓨터에는 여러 종류의 기억장치가 있습니다.
레지스터
캐시
주기억장치
보조기억장치
가상기억장치기억장치 계층구조는 CPU에 가까운 빠른 기억장치부터, 멀리 있는 큰 기억장치까지 계층적으로 배치한 구조입니다.
레지스터 → 캐시 → 주기억장치 → 보조기억장치컴퓨터구조 예시문제에서도 CPU에 가까운 기억장치 계층 순서를 묻고, 정답 흐름은 캐시 기억장치 → 주 기억장치 → 보조 기억장치입니다.
기억장치 계층의 핵심 원리
기억장치는 다음 원리를 가집니다.
CPU에 가까울수록 빠릅니다.
CPU에 가까울수록 용량이 작습니다.
CPU에 가까울수록 비쌉니다.
CPU에서 멀수록 느립니다.
CPU에서 멀수록 용량이 큽니다.
CPU에서 멀수록 쌉니다.표로 보면 다음과 같습니다.
| 계층 | 속도 | 용량 | 가격 |
|---|---|---|---|
| 레지스터 | 가장 빠름 | 가장 작음 | 가장 비쌈 |
| 캐시 | 매우 빠름 | 작음 | 비쌈 |
| RAM | 중간 | 중간 | 중간 |
| SSD/HDD | 느림 | 큼 | 저렴 |
빠르면 작고 비쌉니다.
크면 느리고 쌉니다.주기억장치
주기억장치는 CPU가 직접 접근해서 프로그램과 데이터를 읽고 쓰는 기억장치입니다.
대표는 RAM입니다.
주기억장치 = 실행 중인 프로그램과 데이터를 저장하는 곳예를 들어 게임을 실행하면 게임 파일이 SSD에서 RAM으로 올라옵니다.
SSD에 저장된 게임
→ 실행 시 RAM에 올라옴
→ CPU가 RAM의 명령어와 데이터를 사용CPU는 보조기억장치보다 RAM에 훨씬 빠르게 접근할 수 있습니다.
RAM
RAM은 Random Access Memory다.
읽기와 쓰기가 가능합니다.
전원이 꺼지면 내용이 사라집니다.
실행 중인 프로그램과 데이터가 저장됩니다.RAM은 휘발성 기억장치입니다.
휘발성 = 전원이 꺼지면 내용이 사라짐대표 종류는 다음과 같습니다.
| RAM 종류 | 특징 |
|---|---|
| SRAM | 빠르지만 비싸고 집적도가 낮음 |
| DRAM | 상대적으로 느리지만 싸고 집적도가 높음 |
SRAM
캐시에 많이 사용
빠름
비쌈DRAM
주기억장치에 많이 사용
주기적 재충전 필요
비교적 저렴ROM
ROM은 Read Only Memory다.
기본적으로 읽기 전용 기억장치입니다.
전원이 꺼져도 내용이 보존됩니다.
시스템 초기화 프로그램 저장에 사용됩니다.PROM
EPROM
EEPROM
Flash Memory플래시 메모리는 전기적으로 데이터를 지우고 다시 기록할 수 있으며, 전력이 없어도 정보가 보존됩니다. 컴퓨터구조 예시문제에서도 플래시 메모리는 휘발성이 아니며 전력이 없어도 정보가 보존된다는 점이 나옵니다.
RAM = 휘발성, 읽기/쓰기
ROM = 비휘발성, 주로 읽기캐시 기억장치
캐시는 CPU와 주기억장치 사이에 있는 빠른 기억장치입니다.
왜 필요할까요?
CPU는 매우 빠릅니다. 그런데 RAM은 CPU보다 느립니다.
CPU가 매번 RAM을 기다리면 성능이 떨어집니다.
그래서 자주 쓰는 데이터를 CPU 가까이에 저장합니다.
CPU ↔ 캐시 ↔ RAM캐시의 목적: 자주 사용하는 데이터와 명령어를 빠른 저장장치에 보관해 CPU 대기 시간을 줄이는 것
컴퓨터구조 범위에는 캐시 기억장치의 동작 원리, 사상 방법, 쓰기 정책, 성능 개선효과가 포함됩니다.
캐시가 잘 되는 이유: 지역성
캐시가 효과적인 이유는 프로그램이 지역성을 가지기 때문입니다.
지역성은 두 가지가 중요합니다.
| 지역성 | 의미 | 예 |
|---|---|---|
| 시간 지역성 | 최근 사용한 것을 또 사용할 가능성이 높음 | 반복문 변수 |
| 공간 지역성 | 사용한 주소 근처를 사용할 가능성이 높음 | 배열 순회 |
시간 지역성
for (i = 0; i < 100; i++) {
sum += i;
}sum, i 같은 변수는 반복적으로 사용됩니다.
방금 쓴 데이터를 또 쓸 가능성이 큽니다.
공간 지역성
arr[0], arr[1], arr[2], arr[3]배열은 연속된 메모리에 저장되므로, 하나를 사용하면 그 근처도 사용할 가능성이 큽니다.
캐시 히트와 캐시 미스
CPU가 원하는 데이터가 캐시에 있으면 캐시 히트입니다.
Cache Hit = 캐시에 있음CPU가 원하는 데이터가 캐시에 없으면 캐시 미스입니다.
Cache Miss = 캐시에 없음캐시 미스가 발생하면 RAM에서 데이터를 가져와야 합니다.
캐시 히트 → 빠름
캐시 미스 → 느림캐시 성능은 히트율이 높을수록 좋습니다.
히트율 = 캐시에서 찾은 비율캐시 사상 방식
캐시 사상은 메모리 블록을 캐시의 어느 위치에 저장할지 정하는 방법입니다.
직접 사상
완전 연관 사상
집합 연관 사상직접 사상
메모리 블록이 들어갈 캐시 위치가 정해져 있습니다.
구현이 단순합니다.같은 위치로 몰리면 충돌이 자주 납니다.완전 연관 사상
메모리 블록이 캐시 어디든 들어갈 수 있습니다.
충돌이 적습니다.찾는 회로가 복잡합니다.집합 연관 사상
직접 사상과 완전 연관 사상의 중간 방식입니다.
캐시를 여러 집합으로 나누고,
각 블록은 정해진 집합 안의 어느 위치에든 들어갈 수 있습니다.직접 = 정해진 한 자리
완전 연관 = 아무 자리
집합 연관 = 정해진 그룹 안의 아무 자리캐시 쓰기 정책
CPU가 데이터를 수정했을 때 캐시와 메모리를 어떻게 맞출지가 문제입니다.
Write-through
Write-backWrite-through
캐시에 쓰면 동시에 주기억장치에도 씁니다.
캐시와 메모리 내용이 항상 일치합니다.쓰기 속도가 느릴 수 있습니다.Write-back
일단 캐시에만 쓰고, 나중에 필요할 때 메모리에 반영합니다.
쓰기 속도가 빠를 수 있습니다.캐시와 메모리 내용이 일시적으로 다를 수 있습니다.보조기억장치
보조기억장치는 데이터를 오래 저장하는 장치입니다.
HDD
SSD
USB 메모리
광디스크전원이 꺼져도 데이터가 남습니다.
용량이 큽니다.
RAM보다 느립니다.보조기억장치는 파일, 프로그램, 운영체제 등을 저장합니다.
파일 저장 = 보조기억장치
프로그램 실행 = RAM으로 올라옴
CPU 실행 = 명령어를 가져와 처리컴퓨터구조 범위에는 보조기억장치로 자기디스크, 광기억장치, SSD, RAID가 포함됩니다.
가상기억장치
가상기억장치는 실제 RAM보다 더 큰 메모리를 사용하는 것처럼 보이것이 하는 기술입니다.
왜 필요할까요?
RAM 용량은 제한되어 있습니다.
그런데 프로그램은 RAM보다 더 많은 메모리를 요구할 수 있습니다.
운영체제는 보조기억장치의 일부를 이용해, 마치 큰 메모리가 있는 것처럼 프로그램에게 보여줍니다.
실제 RAM + 보조기억장치 일부
→ 큰 메모리처럼 사용컴퓨터구조 범위에는 가상 기억장치의 필요성과 페이지 테이블이 포함되고, 운영체제 범위에도 가상기억장치의 개념, 페이징, 페이지 교체 기법이 포함됩니다.
페이지와 페이지 테이블 맛보기
가상기억장치는 보통 메모리를 일정한 크기의 조각으로 나누어 관리합니다.
가상 메모리의 조각 = 페이지
물리 메모리의 조각 = 프레임프로그램은 가상 주소를 사용합니다.
운영체제와 하드웨어는 이것을 실제 물리 주소로 바꿉니다.
이때 사용하는 표가 페이지 테이블입니다.
가상 페이지 번호 → 물리 프레임 번호자세한 내용은 5장 2절 운영체제 메모리 관리에서 다시 다룹니다.
지금은 이렇게만 기억하자.
가상기억장치 = 실제 RAM보다 큰 메모리처럼 보이것이 하는 기술
페이지 테이블 = 가상 주소를 실제 주소로 바꾸는 표기억장치 전체 비교
| 구분 | 위치 | 속도 | 용량 | 전원 꺼지면? |
|---|---|---|---|---|
| 레지스터 | CPU 내부 | 가장 빠름 | 매우 작음 | 사라짐 |
| 캐시 | CPU 가까이 | 매우 빠름 | 작음 | 사라짐 |
| RAM | 주기억장치 | 빠름 | 중간 | 사라짐 |
| ROM | 주기억장치 계열 | 읽기 중심 | 작음~중간 | 보존 |
| SSD/HDD | 보조기억장치 | 느림 | 큼 | 보존 |
| 가상기억장치 | RAM+보조기억장치 활용 | RAM보다 느릴 수 있음 | 크게 보임 | 보조장치 의존 |
자주 혼동되는 출제 포인트
혼동 포인트 1. PC와 IR 구분
PC = 다음 명령어 주소
IR = 현재 실행 중인 명령어PC를 현재 명령어 자체라고 생각하면 틀립니다.
혼동 포인트 2. MAR와 MBR 구분
MAR = 메모리 주소
MBR/MDR = 메모리 데이터주소와 데이터를 반드시 구분해야 합니다.
혼동 포인트 3. AC는 연산 결과를 저장합니다
LOAD A
ADD BAC = A + BAC 값을 계속 추적해야 합니다.
혼동 포인트 4. 마이크로 연산은 CPU 내부 기본 연산입니다
컴퓨터구조 예시문제에서도 마이크로 연산은 CPU 내부에서 제어장치에 의해 실행되는 원자적 기본 연산으로 제시됩니다.
혼동 포인트 5. 인출 사이클 흐름
PC → MAR → 메모리 → MBR → IR이 흐름을 기억하자.
혼동 포인트 6. JUMP는 PC를 바꿉니다
분기 명령어는 다음 명령어 주소를 순서대로 증가시키지 않고, PC를 다른 값으로 바꿉니다.
혼동 포인트 7. 인터럽트는 현재 상태 저장 후 처리합니다
인터럽트가 오면 CPU는 현재 상태를 저장하고, 인터럽트 서비스 루틴을 실행한 뒤 원래 작업으로 돌아옵니다.
혼동 포인트 8. RISC와 CISC 비교
RISC = 단순한 명령어, 파이프라이닝 유리
CISC = 복잡한 명령어, 다양한 기능혼동 포인트 9. RAM과 ROM 차이
RAM = 휘발성, 읽기/쓰기
ROM = 비휘발성, 주로 읽기플래시 메모리는 전력이 없어도 정보가 보존되므로 휘발성이 아닙니다.
혼동 포인트 10. 캐시 히트와 미스
히트 = 캐시에 있음
미스 = 캐시에 없음캐시 미스가 많으면 CPU가 RAM을 기다려야 해서 느려집니다.
이번 절의 핵심 정리
CPU 구성요소
ALU = 산술·논리 연산
제어장치 = 명령어 해석과 제어신호
레지스터 = CPU 내부 임시 저장소
내부버스 = CPU 내부 데이터 통로주요 레지스터
PC = 다음 명령어 주소
IR = 현재 명령어
MAR = 메모리 주소
MBR/MDR = 메모리 데이터
AC = 연산 결과
SP = 스택 위치
Flag = 상태 정보마이크로 연산
CPU 내부에서 수행되는 가장 기본적인 연산
예: MAR ← PC, IR ← MBR, AC ← AC + MBR명령어 사이클
인출 → 해독 → 실행 → 인터럽트 확인인출 사이클
MAR ← PC
MBR ← M[MAR]
PC ← PC + 1
IR ← MBR파이프라이닝
명령어 처리 단계를 겹쳐 실행하여 처리량 향상RISC와 CISC
RISC = 단순 명령어
CISC = 복잡 명령어기억장치 계층
레지스터 → 캐시 → 주기억장치 → 보조기억장치RAM과 ROM
RAM = 휘발성
ROM = 비휘발성캐시
CPU와 RAM 사이의 빠른 기억장치
지역성을 이용해 성능 향상가상기억장치
실제 RAM보다 큰 메모리를 쓰는 것처럼 보이것이 하는 기술핵심 한 문장
이번 절의 핵심을 한 문장으로 정리하면 다음과 같습니다.
CPU는 ALU, 제어장치, 레지스터, 내부버스로 구성되며, PC가 가리키는 명령어를 메모리에서 가져와 IR에 저장하고, 제어장치가 해석한 뒤 ALU와 레지스터를 이용해 실행하며, 기억장치는 속도와 용량에 따라 레지스터·캐시·RAM·보조기억장치 계층으로 구성됩니다.
CPU = 명령어 실행
레지스터 = CPU 안의 빠른 저장소
명령어 사이클 = 인출하고 실행하는 반복
기억장치 계층 = 빠른 것부터 큰 것까지 층으로 배치확인 문제
문제 1
CPU의 구성요소로 보기 어려운 것은?
① ALU ② 제어장치 ③ 레지스터 ④ HTML 태그
문제 2
산술 연산과 논리 연산을 수행하는 장치는?
① ALU ② MAR ③ ROM ④ 주소버스
문제 3
명령어를 해석하고 제어신호를 발생시키는 장치는?
① 제어장치 ② 보조기억장치 ③ 키보드 ④ 모니터
문제 4
다음에 실행할 명령어의 주소를 저장하는 레지스터는?
① IR ② PC ③ AC ④ MBR
문제 5
현재 실행 중인 명령어를 저장하는 레지스터는?
① PC ② IR ③ MAR ④ SP
문제 6
메모리에 접근할 주소를 저장하는 레지스터는?
① MAR ② MBR ③ AC ④ Flag
문제 7
메모리에서 읽어온 데이터나 메모리에 쓸 데이터를 저장하는 레지스터는?
① PC ② IR ③ MBR 또는 MDR ④ SP
문제 8
누산기 AC의 역할로 알맞은 것은?
① 다음 명령어 주소 저장 ② 연산 결과 임시 저장 ③ 파일 이름 저장 ④ 웹페이지 구조 저장
문제 9
CPU 내부에서 수행되는 가장 기본 단위의 연산은?
① 마이크로 연산 ② 후위표기식 ③ CSS 선택자 ④ 해시 충돌
문제 10
명령어 인출 사이클의 흐름으로 가장 알맞은 것은?
① PC의 주소를 이용해 메모리에서 명령어를 가져와 IR에 저장합니다 ② 모니터에서 명령어를 출력합니다 ③ 키보드에서 명령어를 직접 입력받습니다 ④ 보조기억장치를 삭제합니다
문제 11
MAR ← PC의 의미로 알맞은 것은?
① PC 값을 MAR에 저장합니다 ② MAR 값을 PC에 저장합니다 ③ PC와 MAR을 삭제합니다 ④ 메모리 전체를 초기화합니다
문제 12
분기 명령어 JUMP 200의 핵심 동작은?
① AC를 200으로 나눕니다 ② PC를 200으로 변경합니다 ③ RAM을 200개 만듭니다 ④ 캐시를 비웁니다
문제 13
인터럽트의 의미로 알맞은 것은?
① CPU가 하던 일을 잠시 멈추고 급한 일을 처리하게 하는 신호 ② 배열을 정렬하는 방법 ③ 문자열을 출력하는 HTML 태그 ④ 포인터를 삭제하는 명령
문제 14
RISC의 특징으로 알맞은 것은?
① 명령어가 단순하고 파이프라이닝에 유리합니다 ② 명령어가 항상 매우 복잡합니다 ③ 캐시를 절대 사용하지 않습니다 ④ 메모리를 사용할 수 없습니다
문제 15
기억장치 계층을 CPU에 가까운 쪽부터 나열한 것으로 알맞은 것은?
① 보조기억장치 → 주기억장치 → 캐시 ② 주기억장치 → 보조기억장치 → 캐시 ③ 캐시 → 주기억장치 → 보조기억장치 ④ 보조기억장치 → 캐시 → 주기억장치
문제 16
RAM의 특징으로 알맞은 것은?
① 전원이 꺼져도 항상 내용이 유지됩니다 ② 주로 읽기만 가능합니다 ③ 휘발성 기억장치입니다 ④ CPU 명령어를 해석합니다
문제 17
ROM의 특징으로 알맞은 것은?
① 전원이 꺼지면 무조건 내용이 사라집니다 ② 비휘발성 기억장치입니다 ③ 항상 CPU보다 빠릅니다 ④ 스택 포인터의 다른 이름입니다
문제 18
CPU와 주기억장치 사이에 위치하여 자주 쓰는 데이터를 빠르게 제공하는 기억장치는?
① 캐시 ② 프린터 ③ 키보드 ④ 광디스크
문제 19
CPU가 원하는 데이터가 캐시에 있는 경우를 무엇이라고 하는가?
① 캐시 히트 ② 캐시 미스 ③ 페이지 폴트 ④ 오버플로
문제 20
실제 RAM보다 더 큰 메모리를 쓰는 것처럼 보이것이 하는 기술은?
① 가상기억장치 ② 직접 주소지정 ③ 버블 정렬 ④ 전위순회
정답과 해설은 절별 확인문제 정답해설에서 확인합니다.
다음 5장 1절은 운영체제, 프로세스, 스레드, 스케줄링입니다. 4장 2절이 “CPU가 명령어를 실행하는 방식”이었다면, 5장 1절은 “운영체제가 여러 프로그램에게 CPU를 어떻게 나누어 주는가”를 배웁니다.