2.1 ~ 2.3 CPU의 구조와 기능

cpu의 기능

  • 프로그램 수행
  • 명령어 인출(Instruction Fetch) - 메모리에서 IR로
  • 명령어 해독(Instruction Decode)
    • 명령어 인출/해독은 모든 명령어에 대하여 공통적으로 수행
  • 데이터 인출(Data Fetch)
  • 데이터 처리(Data Process)
  • 데이터 쓰기(Data Store)
    • 데이터 인출/처리/쓰기는 명령어에 따라 필요한 경우에만 수행

CPU의 기본 구조

ALU (산술논리연산창치)

  • 각종 산술/논리 연산들을 수행하는 회로들로 이루어진 하드웨어

레지스터 세트

  • CPU 내부 레지스터들의 집합
  • 컴퓨터 기억장치들 중에서 액세스 속도가 가장 빠름 (액세스 : 읽고 쓰는 행위 - 접근)

제어 유니트 (control unit)

  • 명령어를 해석하고 실행하기 위한 제어 신호들을 순차적으로 발생하는 하드웨어 모듈
  • 명령어 실행에 필요한 정보들의 전송 통로와 방향 지정
  • cpu 내부 요소 ↔ 시스템 구성 요소들의 동작 시간 결정

CPU 내부 버스

  • alu - 레지스터 사이의 데이터 선, 제어 유니트로 발생되는 제어 신호 선
  • 외부의 시스템 버스와 직접 연결 X, 반드시 버퍼 레지스터/시스템 버스 인터페이스 회로를 통하여 시스템 버스와 접속

명령어 실행

명령어 사이클

cpu가 한 개의 명령어를 실행하는데 필요한 전체 처리과정

  • 프로그램 실행을 시작한 순간부터 전원을 끄거나, 회복 불가능 오류 발생하여 중단될 때까지 반복

기본 명령어 사이클

  • 인출 사이클 : cpu가 기억장치로부터 명령어를 읽어오는 단계
  • 실행 사이클 : 명령어를 실행하는 단계 (명령어 해독, 연산 수행)
  • 간접 사이클, 인터럽트 사이클 필요 시 있음
  • 인출 → 간접 → 실행 → 인터럽트

명령어 실행에 필요한 CPU 내부 레지스터들

프로그램 카운터 (Program Counter : PC)

  • 다음에 인출할 명령어의 주소를 가진 레지스터
  • 명령어 인출 후, 자동으로 일정 크기만큼 증가(다음 명령어로)
  • 순차적이 아닌, 분기(branch) 명령어가 실행 시 목적지 주소로 갱신

누산기 (Acumulator : AC)

  • 데이터를 임시적으로 저장
  • 레지스터 크기 : cpu가 한번에 처리할 수 있는 데이터 비트 수

명령어 레지스터 (Instruction Register : IR)

  • 가장 최근에 인출된 명령어가 저장된 레지스터

메모리 주소 레지스터 (MAR)

  • PC의 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터

메모리 버퍼 레지스터 (MBR)

  • 기억장치에 저장할 데이터, 기억장치에서 읽은 데이터를 일시적으로 저장하는 버퍼 레지스터

인출 사이클

메모리에 저장된 명령어를 인출

  1. PC → MAR : PC의 내용을 CPU내부 버스를 통하여 MAR로 전송
  2. M[MAR] → MBR, PC = PC +1 : 주소, 데이터 버스를 이용해서 주소가 지정하는 기억장치 위치로부터 읽혀진 데이터가 MBR로 적재, 동시에 PC값 증가(다음 명령어로)
  3. MBR → IR : MBR에 있는 명령어 코드가 IR로 이동

실행 사이클

명령어 코드를 해독하고, 필요한 연산들을 수행

연산의 종류

  • 데이터 이동 : cpu ↔ 기억장치, cpu ↔ io 장치
  • 데이터 처리 : 데이터에 대한 산술/논리 연산 수행
  • 데이터 저장 : 연산 결과 및 입력장치에서 읽은 데이터를 기억장치에 저장
  • 제어 : 프로그램 실행 순서 결정

가상 cpu 명령어 형식 정의

연산코드 : cpu가 수행할 연산 지정

오퍼랜드 : 명령어 실행에 필요한 데이터/데이터의 주소가 저장된 주소


LOAD addr 명령어 (데이터 이동)

기억장치에 저장된 데이터를 AC로 이동하는 명령어

  1. IR(addr) → MAR : IR에 있는 명령어 주소 부분을 MAR로 전송
  2. M[MAR] → MBR : 그 주소가 지정한 기억장소에서 데이터를 인출하여 MBR로 전송
  3. MBR → AC : 데이터를 AC에 적재

STA addr 명령어 (데이터 저장)

AC 레지스터의 내용을 기억장치에 저장하는 명령어

  1. IR(addr) → MAR : IR에 있는 데이터를 저장할 주소를 MAR로 전송
  2. AC → MBR : 저장할 ****데이터를 MBR로 이동
  3. MBR → M[MAR] : MBR의 내용을 MAR이 지정하는 기억장소에 저장

ADD addr 명령어 (데이터 처리)

기억장치에 저장된 데이터를 AC의 내용과 더하고, 다시 AC에 저장하는 명령어

  1. IR(addr) → MAR : 주소를 MAR로 전송
  2. M[MAR] → MBR : 데이터를 인출하여 MBR에 적재
  3. AC ← AC + MBR : 그 데이터와 AC의 내용을 더하고(ALU가 해줌) 결과를 다시 AC에 저장

JUMP addr 명령어

addr이 가리키는 위치의 명령어로 실행순서를 변경하는 분기(branch) 명령어

  • IR(addr) → PC : 명령어의 오퍼랜드(분기 목적지 주소)가 PC에 저장

인터럽트 사이클

인터럽트 : 다른 모듈들이 프로세서의 정상적 처리를 중단할 수 있는 메커니즘 → 처리 효율 향상

종류 : Program, Timer, I/O, Hardward failure

인터럽트 종류

인터럽트 사이클

  • 프로그램 실행 중, CPU의 현재 처리 순서를 중단, 다른 동작 수행
  • 외부로부터 인터럽트 요구가 들어오면
    • cpu는 원래 프로그램 수행 중단, 요구된 인터럽트를 위한 서비스 프로그램 수행
  • 인터럽트 서비스 루틴(ISR) : 인터럽트를 처리하기 위해 수행하는 프로그램 루틴

인터럽트 처리

인터럽트가 들어왔을 때 CPU는

  • 어떤 장치가 요구했는지 확인 후, 해당 ISR 호출
  • ISR 종료 후, 중단되었던 원래 프로그램 수행

CPU의 인터럽트 처리 동작

  1. 현재 명령어 실행 중단
  2. 실행 context저장 : 실행할 명령어의 주소(PC값), 프로세서의 현재 동작과 관련된 데이터(레지스터 값)을 스택에 저장
  3. ISR 호출 및 실행
  4. ISR 종료 후, 스택에 저장된 context를 cpu에 복원

인터럽트 사이클

  1. PC → MBR : pc의 내용의 MBR로 전송
  2. SP(stack pointer) → MAR, ISR의 시작주소 → PC : sp의 내용이 MAR로 전송, pc는 ISR의 시작 주소로 변경
  3. MBR → M[MAR] : MBR에 저장되어 있던 원래 PC 내용이 스택에 저장

다중 인터럽트

ISR 수행 도중 다른 인터럽트가 발생하는 것

처리 방법

  • 인터럽트 불가능(순차적 인터럽트 처리)
    • 새로운 인터럽트가 들어와도 ISR을 수행하지 않도록 방지
  • 우선순위에 의한 인터럽트 처리 (Nested 인터럽트 처리)
    • 우선순위에 다라 인터럽트 처리 → 스택에 중단된 ISR주소도 추가 저장

간접 사이클

오퍼랜드에 데이터가 저장된 기억장치 주소가 포함

간접 주소지정 방식

  • 명령어에 포함된 주소 공간(오퍼랜드)에 명령어 실행에 필요한 데이터가 저장된 기억장치의 주소를 지정하는 경우
  • 해당 기억장치의 주소를 사용하여 데이터 인출 → 간접 사이클

실행 사이클 이전에 수행

  • 인출 사이클, 실행 사이클 사이에 위치
    • 인출 → 간접 → 실행 → 인터럽트
  1. IR(addr) → MAR : 오퍼랜드 부분을 MAR로 전송
  2. M[MAR] → MBR : 주소가 가리키는 기억장소에서 다시 데이터의 실제 주소를 가져와 MBR에 적재
  3. MBR → IR(addr) : MBR에서 데이터의 실제 주소를 다시 IR의 주소 필드에 저장

명령어 파이프 라이닝

cpu처리 속도를 높이기 위하여 cpu 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술

  • 이론상 단계의 배수만큼 속도가 증가

2-단계 명령어 파이프 라인 : 인출, 실행 단계를 독립적인 파이프 라인 모듈들로 분리 (명령어 선인출)

문제점 : 두 단계의 처리 시간이 같지 않으면 두 배의 속도 향상 불가

4 - 단계 명령어 파이프 라인

  • 명령어 인출, 명령어 해독, 오퍼랜드 인출, 실행

파이프 라인에 의한 실행 시간/속도 향상

  • 파이프 라인 단계 수 = $k$
  • 실행할 명령어들의 수 = $N$

파이프 라인에 의한 전체 명령어 실행 시간 : T

$T = k + (N -1)$

파이프 라인이 되지 않은 경우 전체 명령어들의 실행 시간 : T

$T = k \times N$

속도 향상 $S_p = \frac{k \times N}{k+(N-1)}$


문제점 (성능 저하 요인)

  1. 모든 명령어들이 파이프라인 단계 모두를 거치지 않음
  2. 파이프라인 클럭은 처리 시간이 가장 오래 걸리는 단계가 기준
  3. IF(명령어 인출) 단계와 OF(오퍼랜드 인출)단계가 동시에 기억장치 액세스 시 → 기억장치 충돌(지연)
  4. 조건 분기 명령어 실행 또는 인터럽트 발생 시 → 미리 인출해 처리하던 명령어 무효화
    1. 처리 방법 : 분기 목적지 선인출, 루프 버퍼 사용, 분기 예측, 지연 분기(분기 위치 재배치)

상태 레지스터

  • 조건 분기 명령어에서 사용하는 조건들을 저장하는 cpu 내부의 레지스터
  • 조건 분기 명령어가 지정하는 조건 비트 값을 검사하여 조건 분기 결정
  • 조건 플래그들
    • 부호 플래그 (S) - 0은 양수, 1은 음수
    • 제로 플래그 (Z) - 결과값이 0 이면 1로 세트
    • 올림수 플래그 (C) - 올림수, 빌림수가 발생시 1로 세트
    • 동등 플래그 (E) - 비교값이 같으면 1로 세트
    • 오버플로우 플래그 (V) - 오버플로우 발생 시 1로 세트
    • 인터럽트 플래그 (I) - 인터럽트 가능 시 1로 세트
    • 슈퍼바이저 플래그 (P) - 슈퍼바이저 모드면 1, 사용자 모드면 0


슈퍼 스칼라

cpu의 처리 속도 향상을 위해서 내부에 2개 이상의 명령어 파이프라인을 포함시킨 구조 → ex) 2단계 파이프라인이 2개 이상 존재

  • 이론상 파이프라인 수 만큼 속도 향상 가능
  • 파이프 라인의 수 = $m$ → $m$-way 슈퍼 스칼라

문제점/해결책

  1. 명령어들 간의 데이터 의존 관계 → 명령어 실행 순서 재배치
  2. 하드웨어(ALU, 레지스터 등) 이용에 대한 경합 발생 → 하드웨어 추가 설치

멀티 코어

CPU 코어 : ****명령어 실행에 필요한 CPU 내부의 핵심 하드웨어 모듈

  • 각 코어는 별도의 H/W 모듈로, 시스템 버스와 캐시만 공유
  • 프로그램 실행에 있어 각 코어는 슈퍼스칼라보다 더 높은 독립성을 가짐 → 멀티 태스킹/ 멀티 스레딩

'학교 공부 정리 > 컴퓨터 구조' 카테고리의 다른 글

2.4 명령어 세트  (0) 2022.10.27
1. 컴퓨터 시스템 개요  (1) 2022.10.25

+ Recent posts