📗 BOOK/혼자 공부하는 컴퓨터구조+운영체제

혼자 공부하는 컴퓨터 구조+운영체제 5장 정리

미미누 2024. 7. 16. 22:59


빠른 CPU를 위한 설계 기법

  • 클럭 속도는 헤르츠 단위로 측정한다.
  • 1초에 클럭이 몇 번 반복되는지를 나타낸다.

코어와 멀티코어

  • 코어란 CPU 내에서 명령어를 실행하는 부품으로 여러 개 있을 수 있다.
  • 코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU라고 한다.
  • 멀티코어 프로세서한 여러 개의 코어를 포함하고 있는 CPU를 말한다.
  • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐이고, 그에 따라서 연산 속도는 크게 달라진다.

스레드와 멀티 스레드

  • 스레드는 실행 흐름의 단위이다.
  • 스레드에는 CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드가 있다.

하드웨어적 스레드

  • 스레드를 하드웨어적으로 정의하면 하나의 코어가 동시에 처리하는 명령어 단위를 의미한다.
  • 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행 할 수 있다.
  • 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다.

소프트웨어적 스레드

  • 하나의 프로그램에서 독립적으로 실행되는 단위
  • 하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있다.

멀티스레드 프로세서

  • 하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면, 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 된다.
  • 하드웨어 스레드(CPU에서 사용되는 스레드)를 논리 프로세서라고 부른다.

05-2 명령어 병렬 처리 기법

명령어 파이프라인

  • 명령어 처리 과정을 클럭 단위로 나누어 보면 다음과 같이 나뉜다.
    • 명령어 인출(Instruction fetch)
    • 명령어 해석(instruction decode)
    • 명령어 실행(execute instruction)
    • 결과 저장(write back)

→ 같은 단계가 겹치지만 않는다면 cpu는 각 단계를 동시에 실행할 수 있다.

  • 명령어들을 명령어 파이프라인에 넣고, 동시에 처리하는 기법을 명령어 파이프라이닝 이라고 한다.
  • 파이프라이닝이 높은 성능을 가져오기는 하지만, 성능 향상에 실패하는 경우도 있는데, 이를 파이프라인 위험 이라고 한다.
  • 파이프라인 위험은 데이터 위험, 제어 위험, 구조적 위험이 있다.

데이터 위험

  • 명령어 간 데이터 의존성에 의해 발생한다.
  • 모든 명령어를 동시에 처리 할 수는 없다
명령어 1: R1 <- R2 + R3
명령어 2: R4 <- R1 + R5 

위와 같은 경우, 명령어 1을 수행해야만, 명령어 2를 수행할 수 있다. 따라서 명령어 2는 명령어 1의 데이터에 의존적이다.

제어 위험

  • 제어 위험은 주로 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생한다.
  • 프로그램 카운터는 현재 실행중인 명령어의 다음 주소로 갱신된다.
  • 프로그램 실행 흐름이 바뀌어 명령어가 실행되면서 프로그램 카운터 값에 갑작스러운 변화가 생긴다면, 명령어 파이프라인에 미리 가지고 와서 처리중이던 명령어는 쓸모 없어진다.
  • 분기 예측은 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술이다.

구조적 위험

  • 구조적 위험은 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용할 때 발생, 구조적 위험은 자원 위험이라고도 부름

슈퍼스칼라

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼 스칼라라고 한다.
  • 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서, 슈퍼스칼라 CPU라고 한다.

비순차적 명령어 처리

  • 아래와 같은 명령어들로 이루어진 소스 코드가 있다고 하자.

메모리 N번지는 M(n)으로 표기, 메모리 n번지에 m을 저장하라는 m(n) ← m으로 표기

M(100) <- 1
M(101) <- 2
M(102) <- M(100) + M(101)
M(150) <- 1
M(151) <- 2
M(152) <- 3
  • 3번 명령어를 실행하기 위해서는 M(100), M(101) 값이 결정되어야 하기에, 1번과 2번 명령어 실행이 끝날 떄까지 기다려야 한다.
  • 명령어를 순차적으로만 실행하지 않고, 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법을 비순차적 명령어 처리 기법이라고 한다.

CISC와 RISC

명령어 집합

  • CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합이라고 한다. 명렁어 집합구조(ISA)라고 한다.
  • ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어를 이해하지 못한다.
  • ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 연속이다.

CISC

  • Complex Instruction Set Computer의 약자
  • 복잡한 명령어 집합을 활용하는 컴퓨터이다.
  • 이름 그대로 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방식이다.
  • CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에, 명령어의 형태나 크기가 다양한 가변 길이 명령어를 활용한다.
  • 적은 수의 명령어만으로도 프로그램을 동작시킬 수 있다.
  • 단점은 활용하는 명령어가 워낙 복잡하고, 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
  • 복잡한 명령어때문에 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 한다.
  • 명령어의 규격화가 어려워 파이프라이닝이 어렵다.

RISC

CISC의 한계

  1. 빠른 처리를 위해 명령어 파이프라인을 십분 활용해야 한다. 원활한 파이프라이닝을 위해 명령어 길이와 수행 시간이 짧고, 규격화 되어야 한다.
  2. 복잡한 기능을 지원하는 명령어를 추가하기보다는 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것이 중요하다.
  • Reduced Instruction Set Computer의 약자이다.
  • CISC에 비해 명령어의 종류가 적다.
  • CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향한다.
  • RISC는 고정 길이 명령어를 활용한다.
  • 명령어 파이프라이닝에 최적화되어 있다.
  • RISC는 메모리에 직접 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구한다. 주소 지정 방식의 종류가 적음.
  • RISC를 load-store 구조라고 부르기도 한다.
  • 메모리 접근을 최소화 하는 대신에, 레지스터를 적극적으로 활용한다. CISC보다 레지스터를 이용하는 연산이 많고, 범용 레지스터 개수도 더 많다.