
레지스터 : CPU 내부의 작은 임시 저장 장치. 프로그램 속 명령어, 데이터는 실행 전후로 레지스터에 저장.
반드시 알아야 할 레지스터




- 프로그램 카운터 : 메모리에서 가져올 명령어의 주소 (메모리에서 읽어들일 명령어의 주소)
- 명령어 레지스터 : 해석할 명령어 (방금 메모리에서 읽어들인 명령어)
- 메모리 주소 레지스터 : 메모리의 주소, cpu가 읽어들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터
- 메모리 버퍼 레지스터 : 메모리와 주고받을 값 (데이터와 명령어), cpu가 정보를 데이터 버스로 주고받을 때 거치는 레지스터
- 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보
- 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용
- 스택 포인터 : 주소 지정에 사용 (스택의 꼭대기 가리킴)
- 베이스 레지스터 : 주소 지정에 사용 (기준 주소 저장)
- 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
- 변위 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 특정 레지스터(프로그램 카운터 / 베이스 레지스터)의 값을 더하여 유효 주소 얻기
- 상대 주소 지정 방식 : 오퍼랜드 필드 값(변위)과 프로그램 카운터의 값을 더하여 유효 주소 얻기

- 베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효주소 얻기

명령어 사이클과 인터럽트
명령어 사이클 : 프로그램 속 명령어들은 일정한 주기가 반복되며 실행
- 인출 사이클 : 메모리에 있는 값을 CPU로 갖고와야 함
- 실행 사이클 : 갖고 왔으면 실행해야 함
인출, 실행이 반복.
- 간접 사이클 : 메모리 접근이 더 필요한 경우 간접 사이클도 거침. (인출 -> 간접 -> 실행 사이클)
인터럽트 : CPU의 정해진 사이클 흐름을 방해하는 것. CPU가 꼭 주목해야할 때, 얼른 처리해야 할 다른 작업이 생겼을 때 발생.
- 동기 인터렙트 (예외) : CPU가 예기치 못한 상황을 접했을 때 발생. (폴트, 트랩, 중단, 소프트웨어 인터럽트)
- 비동기 인터럽트 (하드웨어 인터럽트) : 주로 입출력 장치에 의해 발생. (알림과 같은 역할)
CPU는 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용.
- 입출력 장치는 CPU에 비해 느림 -> 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 함
- 인터럽트가 있다면, 입출력 작업 동안 CPU는 다른 일을 할 수 있음

인터럽트의 처리 순서
- 입출력 장치는 CPU에 인터럽트 요청 신호를 송신
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
- CPU는 인터럽트 요청을 확인 후 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 서비스 루틴 실행이 끝나면 4번에서 백업해둔 작업을 복구하여 실행 재개
CPU의 성능 향상 기법
클럭 속도
- 헤르츠(Hz) 단위로 측정
- 헤르츠(Hz) : 1초에 클럭이 반복되는 횟수. 클럭이 1초에 한번 반복되면 1Hz, 1초에 100번 반복되면 100Hz.
But 필요 이상으로 클럭을 높이면 발열이 심해짐.
클럭 속도를 늘리는 방법 이외에는? 코어 수를 늘리는 방법, 스레드 수를 늘리는 방법 등이 존재.
코어와 멀티 코어
- 코어(Core): 명령어를 실행하는 부품. (CPU 안에 여럿 존재)

- 멀티 코어 프로세서 : 여러 개의 코어를 포함하고 있는 CPU를 말함.
스레드
- 하드웨어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위. 논리 프로세서라고도 부름

- 소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위

-> 하드웨어적 소프트(1코어 1스레드 CPU)는 하나일지라도 여러 소프트웨어적 스레드를 만들 수 있음
명령어 병렬 처리 기법
명령어 파이프라인
1. 명령어 인출
2. 명령어 해석
3. 명령어 실행
4. 결과 저장
명령어 파이프라이닝 : 각 단계가 겹치지만 않는다면 CPU는 각 단계를 동시 실행할 수 있음.

파이프라인 위험
명령어 파이프라인이 성능 향상에 실패하는 경우.
1. 데이터 위험 : 명령어 간의 의존성에 의해 야기. (모든 명령어를 동시에 처리할 수 없는 상황)
2. 제어 위험 : 프로그램 카운터의 갑작스러운 변화
3. 구조적 위험 : 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때
슈퍼스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 이론적으로는 파이프라인 개수에 비례하여 처리속도 증가
- BUT 파이프라인 위험도 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음
비순차적 명령어 처리 기법
- 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법 (합법적 새치기)
- 의존성이 없는 명령어의 순서를 바꾸어서 실행


명령어 집합 구조, CISC와 RISC
명령어 집합(구조) : CPU가 이해할 수 있는 명령어들의 모음. (CPU의 언어인 셈)
-> 명령어가 달라지면 명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등 많은 것이 달라짐.
ISA : CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
CISC (Complex Instruction Set Computer)
- 복잡한 명령어 집합을 활용하는 컴퓨터(CPU). x86, x86-64는 CISC 기반 명령어 집합 구조.
- 여러 클럭에 걸쳐 명령어 수행
- 가변길이 명령어로, 명령어의 형태와 크기가 다양하나 명령어 파이프라이닝이 불리하다는 단점
- 적은 명령어로도 복잡한 기능 수행 가능
RISC (Reduced Instruction Set Computer)
- 명령어의 종류가 적고, 짧고 규격화된 명령어 사용.
- 1클럭 내외로 명령어 수행
- 고정 길이 명령어 집합을 사용 -> 명령어 파이프라이닝에 유리
- 메모리 접근 최소화(load, store), 레지스터를 십분 활용
- 더 많은 명령어로 작동 (종류 자체가 적음)
출처 : 혼공컴운
'CS' 카테고리의 다른 글
| [운영체제] 프로세스와 스레드 (0) | 2026.07.04 |
|---|---|
| [운영체제] 커널, 시스템 콜, 이중 모드 (0) | 2026.07.03 |
| [컴퓨터 구조] 입출력장치 (0) | 2026.07.03 |
| [컴퓨터 구조] 메모리 (0) | 2026.06.29 |
| [자료구조] Heap (0) | 2026.06.29 |