혼공컴운 2주차 기본미션
p.125 확인 문제 2번
설명에 맞는 레지스터를 보기에서 찾아 빈칸을 채워 보세요.
- 플래그 레지스터: 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
- 프로그램 카운터: 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
- 범용 레지스터: 데이터와 주소를 모두 저장할 수 있는 레지스터
- 명령어 레지스터: 해석할 명령어를 저장하는 레지스터
p.155 확인 문제 4번
다음 그림은 멀티코어 CPU를 간략하게 도식화한 그림입니다. 빈칸에 알맞은 용어를 써넣으세요.
혼공컴운 2주차 선택 미션
코어, 스레드, 멀티코어, 멀티스레드 개념 정리
- 코어: 명령어를 실행하는 부품
- 멀티코어: (코어를 여러 개 포함)
- 스레드: (실행 흐름의 단위)
- 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
- 소프트웨어적 스레드: 하나의 프로그램이 독립적으로 실행되는 단위
- 멀티스레드
- 하드웨어 멀티스레드: 하나의 코어로 여러 개의 명령어를 동시에 처리
- 소프트웨어 멀티스레드: 여러 스레드로 프로세스를 동시에 실행(자원 공유)
04장 CPU의 작동 원리
04-1 ALU와 제어장치
CPU 내부에는 ALU, 제어장치, 레지스터로 구성되어 있다.
ALU(Arithmetic Logic Unit; 연산 논리 장치)는 계산을 담당하는데, 레지스터로부터는 피연산자(오퍼랜드; Operand), 제어장치로부터 제어 신호(연산)를 받아들여 연산을 수행한다.
ALU 연산의 결과는 레지스터를 거쳐 메모리에 저장된다. 이는 CPU의 잦은 메모리 접근으로 인한 속도 저하를 방지하기 위함이다.
ALU는 연산 결과뿐만 아니라 플래그(Flag)를 내보낸다. 플래그는 CPU가 프로그램을 실행하기 위해 꼭 필요한 '참고 정보'다.
연산 결과에 따라 그 상태를 나타내기 위해 다양한 플래그가 존재한다. (부호/제로/캐리/오버플로우/인터럽트/슈퍼바이저 플래그 등)
제어장치는 제어 신호(장치를 작동하기 위한 전기 신호)를 내보내고, 명령어를 해석하는 부품이다.
제어장치는 클럭 신호, 해석할 명령어, 플래그 값, 제어 버스로 전달된 제어 신호를 받아들인다.
이 중 클럭(clock)은 컴퓨터 장치가 일정한 속도로 움직이게 할 수 있도록 하는 시간 단위다. 클럭 신호는 실행 박자를 맞추는 '메트로놈'이다.
04-2 레지스터
레지스터는 명령어, 데이터, 연산 결과를 일시적으로 저장하는 소규모의 고속 전용 구역이다. 레지스터를 통해 CPU는 비교적 낮은 효율의 메모리 대신 레지스터에 접근하여 연산을 빠르게 처리할 수 있다.
주요 레지스터
- 프로그램 카운터: 실행할 명령어 주소 저장
- 카운터(Counter)?: 현재 명령어 실행이 끝나면, 다음 명령어 주소로 '증가'시킨다.
- 명령어 레지스터: 메모리에서 읽어 들인 명령어를 저장
- 메모리 주소 레지스터: 메모리 주소 저장
- 메모리 버퍼 레지스터: 메모리에 전달하거나/전달받을 값 저장
- 플래그 레지스터: 연산 결과 또는 플래그 저장
- 범용 레지스터: (다양한 상황에서 사용, 데이터와 주소 모두 저장 가능)
- 스택 포인터: 스택의 꼭대기(=마지막 저장값 위치)를 '가리킴'(Pointing)
- 베이스 레지스터: 기준 주소 저장. 실행 환경에 따라 동적으로 결정되며, 실행되는 동안 일정함
프로그램을 실행할 때, 프로그램 카운터 → 메모리 주소 레지스터 → 주소 버스 → 메모리로 접근하게 되는데, 프로그램 카운터 → 주소 버스 → 메모리로 접근할 수는 없는가?
프로그램 카운터는 메모리 주소를 가리키지만, 실제 메모리 주소에 접근할 수는 없다. 메모리 주소 레지스터를 통해서만 주소 버스를 통해 주소를 전달하여 데이터에 접근할 수 있다.
만약, 프로그램 카운터에서 직접 메모리에 접근하게 된다면, 명령어 실행 문제/흐름 제어 오류 발생/명령어-데이터 구분 혼란/복잡한 인터럽트 처리 등의 문제를 야기할 수 있다.
출처: 혼공컴운 유튜브 강의, ChatGPT
특정 레지스터를 이용한 메모리 주소 지정 방식
- 스택 주소 지정 방식: 스택과 스택 포인터를 이용한 주소 지정 방식
- 변위 주소 지정 방식: 오퍼랜드 필드 값(연산 수행에 필요한 값/주소, 기준으로부터 떨어진 거리 → 변위)과 특정 레지스터를 더하여 유효 주소를 얻어내는 방식
- 상대 주소 지정 방식: 오퍼랜드와 프로그램 카운터값을 더하여 유효주소를 얻는 방식
- 베이스 레지스터 주소 지정 방식: 오퍼랜드와 베이스 레지스터값을 더하여 유효주소를 얻는 방식
04-3 명령어 사이클과 인터럽트
명령어 사이클: 하나의 명령어를 처리하는 정형화된 흐름
인출 사이클(메모리 속 명령어 → CPU) → 실행 사이클(명령어 실행)의 반복
단, 주소 지정 방식에 따라 바로 실행하지 못하고 메모리에 추가적인 접근이 필요한 경우가 있다. 이때를 간접 사이클이라고 한다.
인터럽트: CPU의 작업을 '방해'하는 신호
- 동기 인터럽트(synchronous interrupts): CPU에 의해 발생하는 인터럽트 = 예외
- CPU 작업 중 발생하는(= 동일 속도로 발생하는) 오류, 예외
- 예외의 종류: fault(실행 재개), trap(디버깅), abort(오류), software interrupt(시스템 호출; 운영체제 서비스 요청)
- 비동기 인터럽트(asynchronous interrupts): 입출력장치에 의해 발생하는 인터럽트 = 하드웨어 인터럽트(알림 신호)
- 입출력장치는 CPU보다 속도가 느리기 때문에, 입출력장치 상태를 주기적으로 확인하는 CPU의 자원 낭비를 막기 위해서 입출력장치 작업 완료 '알림' 전까지 다른 작업을 처리할 수 있다.
- 처리 순서:
1. CPU에 인터럽트 요청 신호를 보낸다.
2. CPU는 요청 신호를 확인하고 인터럽트 플래그를 확인하여 수용 여부를 판단한다.
3. 가능하다면 현재 작업을 백업한다.
4. 인터럽트 벡터에서 해당 인터럽트를 처리할 수 있는 인터럽트 서비스 루틴(인터럽트 핸들러)의 주소를 참조하여 인터럽트를 실행한다.
5. 인터럽트가 끝나면 백업한 작업을 복구하여 다시 실행한다.
- 하드웨어 인터럽트 플래그에는 막을 수 있는(maskable)/막을 수 없는(non-maskable) 인터럽트가 있다.
05장 CPU 성능 향상 기법
05-1 빠른 CPU를 위한 설계 기법
- 클럭을 높이면 CPU 명령어 사이클이 빨라진다. → 빠르게 동작한다
- 단, 클럭을 높이기만 한다면 발열 문제가 발생할 수 있다.
- 코어와 스레드 수를 늘린다.
- 코어 수를 늘린다(= 명령어 처리 도구를 늘린다) → 멀티코어 프로세서
- 하드웨어적 스레드를 들린다(= 하나의 코어에서 여러 개의 명령어를 처리한다) → 멀티스레드 프로세스(예시: 인텔의 하이퍼 스레딩)
- 즉, 코어마다 명령어를 적절하게 분배하는 것이 중요하다.
05-2 명령어 병렬 처리 기법
명령어를 동시에 처리하여 CPU를 지속하여 작동시키는 기법
명령어 파이프라인
명령어의 인출/해석/실행/결과 저장의 단계가 겹치지 않는다면 다른 명령어를 함께 실행할 수 있다.
파이프라인 위험
파이프라이닝이 성능 향상에 실패하는 상황
- 데이터 위험: 명령어의 종속적인 관계로 인한 위험(데이터 의존성)
- 제어 위험: 프로그램 실행 흐름의 갑작스러운 변화(분기)
- 구조적 위험(자원 위험): 같은 CPU 부품 사용
슈퍼스칼라
CPU 내부에 여러 개의 파이프라인을 포함한 구조
파이프라인 위험을 방지하기 위해 고도로 설계되어야 한다.
비순차적 명령어 처리
명령어를 순서대로 처리하지 않고, 순서를 바꿔 실행해도 파이프라인이 멈추는 것을 방지하는 기법
CISC와 RISC
명령어 집합 구조(Instruction Set Architecture; ISA)
CPU가 이해할 수 있는 명령어 모음이자, 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
다른 CPU → 다른 ISA → 같은 소스 코드(사람 관점)지만, 다른 어셈블리어(컴퓨터 관점)
CISC(Complex Instruction Set Computer) | | RISC(Reduced Instruction Set Computer) |
---|
복잡 & 다양 | 명령어 형태 | 단순 & 적음 |
가변 | 명령어 길이 | 고정 |
다양 | 주소 지정 방식 종류 | 적음 |
적음 | 프로그램 구성 명령어 수 | 많음 |
여러 클럭 | 명령어의 클럭 사용 | 1클럭 내외 |
어려움 | 파이프라이닝 난이도 | 쉬움 |
x86, x86-64 | ISA | ARM |