[Study] 3주차(2)

hyo_d·2023년 4월 12일
0

Study

목록 보기
5/9

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

빠른 CPU 설계 기법

  • 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다.
  • CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다.

클럭

  • 클럭 속도: 헤르츠(Hz) 단위로 측정
  • 헤르츠(Hz): 1초에 클럭이 반복되는 횟수
  • 클럭이 1초에 한 번 반복되면 1Hz, 1초에 100번 반복되면 100Hz
  • 필요 이상으로 클럭을 높이면 발열이 심해짐
  • 클럭 속도를 늘리는 방법 외에 코어수를 늘리거나 스레드수를 늘리는 방법이 있다.

코어

  • CPU 내에서 명령어를 실행하는 부품 → 멀티코어 프로세서란 여러 개의 코어를 포함하고 있는 CPU

스레드

  • 소프트웨어적 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위(운영체제 파트)
    • 1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.
  • 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위
    • 논리 프로세서라고도 부른다.
    • 핵심은 레지스터

명령어 파이프라인

  • 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다. 명령어 파이프라인을 사용하지 않는다면?
  • 명령어 파이프라인 순서
  1. 명령어 인출
  2. 명령어 해석
  3. 명령어 실행
  4. 결과 저장
  • 명령어 파이프라인 위험: 명령어 파이프라인 성능 향상에 실패하는 경우(제대로 작동하지 않는 경우)

    • 데이터 위험: 명령어 간의 의존성에 의해 야기. 모든 명령어를 동시에 처리할 수는 없다(이전 명령어를 끝까지 실행해야만 실행 할 수 있는 경우)
      • 명령어 1: R1 <- R2 + R3
      • 명령어 2: R4 <- R1 + R5
    • 제어 위험: 프로그램 카운터의 갑작스러운 변화(CPU가 실행하고자하는 메모리의 주소번지가 바뀌는 경우)
    • 구조적 위험: 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때
  • 슈퍼스칼라: CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조(멀티스레드 프로세서)

    • 이론적으로는 파이프라인 개수에 비례하여 처리 속도 증가
    • but 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음
  • 비순차적 명령어 처리(합법적 새치기)

    • 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법

    • 아무 명령어나 순서를 바꿀 수는 없다. 1,3번 순서를 바꿀 수 없고 1,4번 순서를 바꿀 수는 없다. 4,5번은 바꿀 수 있다.

메모리 집합 구조

  • 명령어 집합(구조): CPU가 이해할 수 있는 명령어들의 모음

  • 인텔 CPU 컴퓨터에서 만든 실행 파일을 그대로 아이폰에 옮겨 특별한 설정 없이 바로 실행하면 실행이 안 된다.

  • 같은 소스를 컴파일해도 CPU에 따라 이해하는 저급언어의 종류가 다르다.

  • 명령어 집합은 CPU의 언어. 명령어가 달라지면 달라지는 것들

    • 명령어 해석 방식
    • 레지스터 종류와 개수
    • 파이프라이닝의 용이성
  • CISC(Complex Instruction Set Computer): 복잡한 명령어 집합을 활용하는 컴퓨터(x86-64)

    • 복잡하고 다양하고 강력한 명령어 활용
    • 가변 길이 명령어 활용
    • 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다
    • 메모리를 최대한 아끼며 개발해야 했던 시절 인기 높았으나 명령어 파이프라이닝 불리하다는 치명적 단점
    • 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기 필요
    • 명령어 크기와 실행되기까지 시간이 일정하지 않음
  • RISC(Reduced Instruction Set Computer): 명령어의 종류가 적고, 짧고 규격화된 명령어 사용

    • 단순하고 적은 수의 고정 길이 명령어 집합 활용
    • 메모리 접근 최소화, 레지스터 최대한 활용
profile
햇병아리

0개의 댓글