04. CPU의 작동원리
ALU와 제어장치
CPU에서 ALU는 연산을 담당. 제어장치로부터 제어신호를 받고 레지스터의 피연산자들을 연산해 그 결과값을 레지스터에 저장한다. 산술연산과 논리연산 등 다양한 연산을 수행하며, 연산 결과는 특정 숫자, 문자가 될 수도 있고 메모리 주소가 될 수도 있다. 필요한 경우 연산결과에 대한 추가정보인 '플래그'를 내보내고 이는 '플래그 레지스터'에 저장된다.
제어장치는 CPU에서 가장 정교하게 설계된 부품으로, 명령어를 해석하고 컴퓨터 부품을 관리/작동시키기 위한 제어신호를 내보낸다.
-제어장치로 입력: 클럭, 명령어(명령어레지스터), 플래그 값(플래그레지스터), 제어신호(제어버스)
-제어장체에서 출력: CPU내부/ 외부(메모리, 입출력장치)에 제어신호
레지스터
프로그램의 명령어와 데이터는 실행 전후로 레지스터에 저장되며, 레지스터의 작동 흐름을 읽으면 프로그램 실행 흐름을 파악할 수 있다.
- 주요 레지스터
-프로그램 카운터
-명령어 레지스터
-메모리 주소 레지스터
-메모리 버퍼(데이터) 레지스터
-플래그 레지스터
-범용 레지스터
-스택 포인터
-베이스 레지스터
- 프로그램 카운터, 스택 포인터, 베이스 레지스터는 명령어에서 주소지정방식에 관여됨
명령어 사이클과 인터럽트
- 명령어 사이클: 명령어를 처리하는 정형화된 흐름
-인출사이클: CPU <- 메모리 로 명령어 인출
-실행사이클: CPU에서 명령어 실행
-간접사이클: CPU에서 명령어 실행시 메모리에 한 번 더 접근
-인터럽트: CPU의 작업을 방해하는 신호
- 인터럽트
-비동기인터럽트: CPU에 의해 발생. 프로그래밍상 오류 등. '예외(exception)'라고도 함.
-동기 인터럽트: 입출력장치에 의해 발생. '하드웨어 인터럽트'.
(1) 입출력장치에서 CPU에 '인터럽트 요청 신호' 보냄
(2) CPU에서 인터럽트 요청 확인하고 '인터럽트 플래그' 통해 인터럽트 받아들일 수 있는지 여부 확인
(3) 인터럽트 받아들일 수 있다면 CPU는 지금까지의 작업 백업
(4) 인터럽트 벡터 참조해 인터럽트 서비스 루틴 실행
인터럽트 서비스 루틴: 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동할지에 대한 정보로 이루어진 프로그램
인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보(시작 주소 등)
(5) 인터럽트 서비스 루틴 실행 끝나면 백업해둔 작업 복구해서 실행 재개
05. CPU 성능 향상 기법
빠른 CPU를 위한 설계기법
- 클럭: 컴퓨터 부품들은 클럭 신호에 맞춰 움직인다. 클럭 신호가 빠르면 CPU의 명령어 사이클도 빨라지고 다른 부품도 빠르게 작동한다는 것. 클럭 속도는 CPU속도 단위로 간주되기도 한다. 클럭 속도는 일정하지 않으며(기본속도Base와 최대속도Max가 있음), 고성능이 필요한 때 순간적으로 속도가 높아졌다가 그렇지 않은 때 낮아진다. 클럭속도를 높인다고 무조건 CPU가 빨라지는 것은 아니며 그런 작업을 장시간 하는 경우 발열이 심해진다.
- 코어, 멀티코어: '코어'는 명령어를 실행하는 부품. CPU는 이 코어를 여러 개 포함한 부품이다. 하나의 CPU에 코어가 여러 개 포함된 것을 멀티코어 프로세서(=멀티코어CPU)라고 한다. CPU의 연산속도가 코어의 개수에 비례해 빨라지지는 않는다. 코어마다 처리할 명령어들이 얼마나 적절히 분배되느냐가 CPU의 효율에 중요하다.
- 스레드, 멀티스레드: '실행흐름의 단위'. 하나의 코어가 여러 개 명령어를 동시에 처리하는 것을 멀티스레드 프로세서(=멀티스레드 CPU)라 한다.
명령어 병렬처리기법(ILP: Instruction-Level Parallelism)
명령어 병렬처리기법은 CPU를 쉬지 않고 작동시키는 기법 😇
-
명령어 파이프라이닝
명령어 처리시, 같은 단계가 겹치지 않는다면 각 단계를 동시에 실행할 수 있다. 명령어들을 공장생산라인처럼 명령어파이프라인에 넣고 동시에 처리하는 것이 명령어 파이프라이닝(Instruction Pipelining)
-파이프라인 위험(Pipeline hazard): 데이터위험(명령어간 데이터 의존성), 제어위험(프로그램 카운터), 구조적(=자원)위험(ALU, 레지스터의 동시사용)
-
슈퍼스칼라(Superscalar)
CPU 내부에 파이프라인을 여러 개 구현한 구조
이론적으로는 파이프라인 개수에 비례해 처리속도가 빨라진다고 볼 수 있으나, 실제로는 꼭 비례해 빨라지지 않는다. 파이프라인 위험 방지를 위해 고도로 설계될 필요 있다.
-
비순차적 명령어 처리(OoOE: Out-of-Order Execution)
명령어들을 순차적으로 처리하지 않는 기법. 순서를 바꿔 실행해도 무방한 명령어들을 비순차적으로 처리해 효율성 높임
CISC와 RISC
CPU 제조사마다 CPU규격과 기능이 다를 수 있고, 명령어의 기본적 구조나 원리는 비슷하지만 디테일에 차이가 있을 수 있다.
- 기본 숙제
p125 문제 2
(1) 플래그 레지스터
(2) 프로그램 카운터
(3) 범용 레지스터
(4) 명령어 레지스터
p155 문제 4
정답: 코어
- 추가 숙제
- 코어, 멀티코어: '코어'는 명령어를 실행하는 부품. CPU는 이 코어를 여러 개 포함한 부품이다. 하나의 CPU에 코어가 여러 개 포함된 것을 멀티코어 프로세서(=멀티코어 CPU)라고 한다. CPU의 연산속도가 코어의 개수에 비례해 빨라지지는 않는다. 코어마다 처리할 명령어들이 얼마나 적절히 분배되느냐가 CPU의 효율에 중요하다.
- 스레드, 멀티스레드: '실행흐름의 단위'. 하나의 코어가 여러 개 명령어를 동시에 처리하는 것을 멀티스레드 프로세서(=멀티스레드 CPU)라 한다.