공부

[혼공컴운]2주차_CPU의 작동 원리/CPU 성능 향상 기법

무른2 2025. 1. 19. 21:36

✔️CPU 의 작동 원리

ALU와 제어장치의 역할

 

  • ALU: ALU는 산술논리연산장치로서, 계산 역할을 담당
  • ALU 작동 방식: 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들이며 수행
  • ALU는 계산 결과와 더불어 플래그(연산 결과에 대한 추가 정보로 양수 또는 음수를 구분)를 내보낸다.

 

  • 플래그의 종류
    • 부호 플래그: 연산 결과의 부호를 나타낸다.
    • 제로 플래그: 연산 결과가 0인지 여부를 나타낸다.
    • 캐리 플래그: 연산 결과 올림수나 빌림수가 발생했는지 나타낸다.
    • 오버플로우 플래그: 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황(오버플로우)가 발생했는지 나타낸다.
    • 인터럽트 플래그: CPU의 작업을 방해하는 인터럽트가 발생했는지 나타낸다.
    • 슈퍼바이저 플래그: 커널 모드, 사용자 모드로 실행 중인지 나타낸다.

이렇게 발생한 플래그들은 플래그 레지스터라는 레지스터에 저장된다.

 

 

  • 제어장치: 제어 신호를 내보내고 명령어를 해석하는 부품
  • 제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들인다.
클럭 : 컴퓨터의 부품들을 움직일 수 있게 하는 시간 단위

 

 

레지스터

 

프로그램 속 데이터는 실행 전후로 반드시 레지스터에 저장된다. 

레지스터는 프로그램의 실행 흐름을 파악하게 도와주고 CPU 내에서 각기 다른 역할을 지닌다. 

 

  • 레지스터 역할들
    • 프로그램 카운터: 메모리에서 가져올 명령어의 주소를 저장한다.
    • 명령어 레지스터: 메모리에서 읽어 들인 명령어를 저장한다.
    • 메모리 주소 레지스터: 메모리의 주소를 저장하는 레지스터이다.
    • 메모리 버퍼 레지스터: 메모리와 주고받을 데이터와 명령어를 저장한다. 
    • 범용 레지스터: 데이터와 주소를 모두 저장할 수 있는, 자유롭게 사용가능한 레지스터이다.
    • 플래그 레지스터: 연산 결과, CPU 상태에 대한 부가 정보를 저장한다.
[메모리 주소 레지스터와 메모리 버퍼 레지스터의 차이]
메모리 주소 레지스터에는 CPU가 주소 버스로 내보낼 값이 거친다.
메모리 버퍼 레지스터에는 데이터 버스로 주고받을 값이 거친다.

 

 

  • 특정 레지스터를 이용한 주소 지정 방식
    1. 스택 주소 지정 방식: 스택과 스택 포인터를 이용한 주소 지정 방식
    2. 변위 주소 지정 방식: 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
      변위 주소 지정 방식은 다시 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등으로 나뉜다.
상대 주소 지정 방식: 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
베이스 레지스터 주소 지정 방식: 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식

 

 

명령어 사이클과 인터럽트

 

  • 명령어 사이클: 하나의 명령어를 처리하는 정형화된 흐름
    1. 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
    2. 실행 사이클: CPU로 가져온 명령어를 실행하는 단계
    3. 간접 사이클: 바로 실행 사이클에 돌입할 수 없어, 메모리 접근이 더 필요한 경우 실행되는 사이클
  • 인터럽트: CPU의 작업을 방해하는 신호
    • 동기 인터럽트(예외): CPU에 의해 발생하는 인터럽트로, CPU가 실행하는 프로그래밍상의 오류와 같은 예외 상황에서 발생
    • 비동기 인터럽트(하드웨어 인터럽트): 입출력장치에 의해 발생하는 인터럽트. 하드웨어 인터럽트는 다시 막을 수 있는 인터럽트와 막을 수 없는 인터럽트로 나뉜다. 
  • 인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램
  • 인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보. 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있다.
[더 알아보기- 동기 인터럽트(예외)의 종류]
폴트: 예외를 처리한 직후 예외가 발생한 명령어부터 실행 재개
트랩: 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행 재개
중단: CPU가 실행 중인 프로그램을 강제로 중단
소프트웨어 인터럽트: 시스템 호출이 발생할때

 

 

 

✔️CPU 성능 향상 기법

클럭/코어/스레드

 

  • 클럭
    • 대체로 클럭 속도가 높은 CPU는 빠르게 작동한다.
    • 클럭은 상황에 따라 클럭 속도를 높이거나 줄이는 등 조절한다.
      즉, 클럭은 계속 일정한 속도를 유지하지는 않는다.
    • 최대 클럭 속도를 강제로 끌어올리는 기법을 오버클럭킹이라고 칭한다.
  • 코어와 멀티코어
    • 코어: CPU 내에서 명령어를 실행하는 부품을 여러 개 포함하는 부품
    • 멀티코어: 코어를 여러 개 포함하고 있는  CPU

CPU 종류는 CPU 내 코어 개수에 따라 단일코어, 멀티코어로 나뉜다.

코어 수 프로세서 명칭
1 싱글코어(single-core)
2 듀얼코어(dual-core)
3 트리플코어(triple-core)
4 쿼드코어(quad-core)
6 헥사코어(hexa-core)
8 옥타코어(octa-core)
10 데카코어(deca-core)
12 도데타코어(dodeca-core)

 

코어 수에 따라 CPU 연산 속도가 증가하지는 않는다.

 

  • 스레드: 실행 흐름의 단위
    • 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
    • 소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위
  • 멀티스레드 프로세서: 하나의 코어로 여러 명령어를 동시 처리하는 CPU

 

명령어 병렬 처리 기법

 

명령어를 빠르고 효율적으로 처리하는 명령어 병렬 처리 기법은 CPU의 성능을 높여준다.

명령어 병렬 처리 기법에는 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리가 있다.

 

  • 명령어 파이프라이닝: 명령어 처리 과정을 명령어  파이프라인을 활용하여 처리하는 기법
  • 슈퍼 스칼라: 여러 개의 명령어 파이프라인을 두는 기법
  • 비순차적 명령어 처리 기법: 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법

 

명령어 파이프라이닝은 성능 향상을 도와주기도 하지만 성능 향상에 실패하는 경우도 존재한다.

이를 파이프라인 위험이라고 칭하며 파이프라인 위험에는 데이터 위험, 제어 위험, 구조적 위험이 존재한다.

 

  • 데이터 위험: 명령어 간 데이터 의존성에 의해 발생한다.
    한 명령어가 다른 명령어의 데이터에 의존적이어서 동시 실행시 파이프라인이 제대로 작동하지 않는 것이다.
  • 제어 위험: 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생한다.
    프로그램 실행 흐름이 갑작스레 바뀌어, 명령어가 실행되며 프로그램 카운터 값이 '현재 실행 중인 명령어의 다음 주소'로 갱신하지 못할 때 발생한다.
  • 구조적 위험: 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용하려고 할 때 발생한다.

 

CISC와 RISC

 

ISA는 CPU가 이해할 수 있는 명령어들의 집합으로, CISC와 RISC는 서로 다른 성격의 ISA 기반으로 설계된 것이다.

 

CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
가변 길이 명령어 고정 길이 명령어
다양한 주소 지정 방식 적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음 프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행 1클럭 내외로 명령어 수행
파이프라이닝하기 어려움 파이프라이닝하기 쉬움

 

 

숙제