책/혼공컴운

[혼공컴운] 2주차 - Chapter04~05

jylee3 2025. 1. 19. 20:36

Chapter04. CPU의 작동 원리

4-1 ALU와 제어장치

ALU

  • ALU는 계산 장치 이다.

  • ALU의 입력

    • 계산을 위해선 피연산자와 수행할 연산이 필요하다.
    • ALU는 레지스터를 통해 피연산자를 받아들이고, 제어 장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다.
  • ALU의 출력

    • 연산 수행 결과는 특정 숫자, 문자, 메모리 주소가 될 수 있다.

    • 결과값은 메모리에 저장되지 않고, 일시적으로 레지스터에 저장된다.

      (CPU가 메모리에 접근하는 속도는 레지스터 접근 속도 보다 훨씬 느리기에, 레지스터에 우선 저장)

    • 계산 결과와 함께 플래그를 내보낸다.

플래그

: 연산 결과에 대한 추가 적인 상태 정보, 플래그 레지스터에 저장

  • 부호 플래그
    • 연산한 결과의 부호를 나타냄
    • 1이면 음수, 0이면 양수
  • 제로 플래그
    • 연산 결과가 0인지 여부를 나타냄
    • 1이면 0, 0이면 연산 결과가 0이 아님
  • 캐리 플래그
    • 연산 결과 올림수나 빌림수가 발생했는지 여부
    • 1이면 발생, 0이면 미발생
  • 오버플로우 플래그
    • 오버플로우 발생 여부 체크
    • 1이면 발생, 0이면 미발생
  • 인터럽트 플래그
    • 인터럽트 가능 여부 체크
    • 1이면 가능, 0이면 불가능
  • 슈퍼바이저 플래그
    • 커널모드 실행인지, 사용자 모드 실행 중인지 체크
    • 1이면 커널 모드, 0이면 사용자 모드

제어 장치

: 제어 신호를 내보내고, 명령어를 해석하는 부품,

  • 입력
    • 제어장치는 클럭 신호를 받아들인다.
    • 제어장치는 명령어 레지스터에서 해석해야 할 명령어를 받아들인다.
    • 플래그 레지스터 속 플래그 값을 받아들인다.
    • 제어 장치는 시스템 버스, 그 중에서 제어버스로 전달된 제어 신호를 받아들인다.
  • 출력
    • CPU 내부에 전달하는 제어 신호
      • ALU 전달 제어신호
      • 레지스터 제어 신호
    • CPU 외부에 전달하는 제어 신호
      • 메모리에 전달하는 제어신호
      • 입출력 장치에 전달하는 제어신호

4-2 레지스터

  1. 프로그램 카운터(PC)
    • 메모리에서 가져올 명령어의 주소 저장
    • 명령어 포인터 라고도 부른다.
  2. 명령어 레지스터
    • 메모리에서 읽어들인 명령어를 저장하는 레지스터
  3. 메모리 주소 레지스터
    • 메모리의 주소를 저장하는 레지스터
  4. 메모리 버퍼 레지스터
    • 메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터
  5. 범용 레지스터
    • 다양하고 일반 적인 상황에서 자유롭게 사용가능한 레지스터
  6. 플래그 레지스터
    • ALU 연산 결과에 따른 플래그를 저장

스택 주소 지정 방식

: 스택과 스택 포인터를 이용한 주소 지정 방식

  • 스택 포인터: 스택의 꼭대기를 가리키는 레지스터
  • 메모리안에 스택처럼 사용할 영역이 저장되어 있다. 이를 스택 영역 이라 부른다.

변위 주소 지정 방식

: 오퍼랜드 필드의 값과특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

  • 상대 주소 지정 방식
    : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻어내는 방식

  • 베이스 레지스터 주소 지정 방식

    : 오처랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식

4-3 명령어 사이클과 인터럽트

명령어 사이클

: 하나의 명령어를 처리하는 정형화된 흐름

  • [ 인출 사이클 → 실행 사이클 ] : 이 한 주기 흐름의 반복
  • 간접 사이클 : 오퍼랜드 필드가 간접 주소 지정 방식을 이용한 경우 명령어 실행을 위해 메모리에 한번 더 접근하는 단계

인터럽트

: CPU의 작업을 방해하는 신호.

  • 동기 인터럽트 (= 예외)
    • CPU에 의해 발생하는 인터럽트
    • CPU가 실행하는 프로그래밍 상의 오류와 같은 예외적 상황이 발생한 경우
  • 비동기 인터럽트 ( = 하드웨어 인터럽트)
    • 막을 수 있는 인터럽트 : 주로 입출력 장치에 의해 발생
    • 막을 수 없는 인터럽트 : 하드웨어 고장
    • 인터럽트 서비스 루틴 (= 인터럽트 핸들러) : 인터럽트 처리를 위한 프로그램
      • 인터럽트 벡터 : CPU가 수많은 인터럽트 서비스 루틴을 구별하기 위한 정보
        • 인터럽트 서비스 루틴의 시작 주소 정보 확인 가능

Chapter05. CPU 성능 향상 기법

5-1 빠른 CPU를 위한 설계 기법

클럭

  • 클럭 신호 높아지면, CPU 명령어 사이클이 빨라진다.
  • HZ 단위로 측정
  • 클럭 속도만으로 CPU 성능을 올리기엔 한계가 존재

코어와 멀티코어

  • 코어 : 명령어를 실행하는 부품
    → CPU : 명령어를 실행하는 부품들을 여러개 포함하는 부품

스레드와 멀티 스레드

  • 스레드 : 실행 흐름의 단위

    • 하드웨어적 스레드

      : 하나의 코어가 동시에 처리하는 명령어 단위

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

      • 프로그램은 여러부분이 동시에 실행가능 하다.

멀티 스레드 프로세서

  • 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터를 추가
  • 프로그램 입장에선 스레드 여러개가 아닌, CPU가 여러개 있는 것 처럼 보인다.

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

: 명령어들을 동시에 처리하여 CPU들을 한시도 쉬지 않고 작동시키는 방법

명령어 파이프라인

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

파이프라인 위험

  • 데이터 위험
    : 데이터 의존성에 의해 발생

  • 제어 위험

    : 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생

    • 분기 예측 : 제어 위험을 보완하는 기술
  • 구조적 위험 (= 자원 위험)

    : 서로 다른 명령어가 동시에 같은 CPU부품에 접근하려 할 때 발생

슈퍼스칼라

  • CPU 내부에 여러개의 명령어 파이프 라인을 포함한 구조
  • 멀티슬드 프로세서 같은 경우 사용 가능

비순차적 명령어 처리

: 명령어를 순차적으로만 실행하지 않고, 순서를 바꿔 실행하여도 무방한 명령어를 먼저 실행하여 파이프라인이 멈추는 것을 방지하는 기법

5-3 CISC와 RISC

명령어 집합

ISA : CPU가 이해할 수 있는 명령어들의 모음.

  • 서로 다른 CPU는 서로의 명령어를 이해할 수 없다.
  • 명령어가 달라지면 어셈블리어도 달라진다.
  • ISA가 달라지면, CPU가 이해할 수 있는 어셈블리어도 달라진다.
  • 사용한 컴파일러에 따라서도 어셈블리어가 달라질 수 있다.

CISC (Complex Instruction Set Computer)

: 복잡한 명령어 집합을 활용하는 컴퓨터

  • 다양한 가변길이 명령어 활용
  • 주소 지정 방식도 다양
  • 컴파일 된 프로그램의 크기가 작다.
  • 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
  • 하나의 명령어를 실행하는 데 여러 클럭 주기를 필요로 한다.

RISC (Reduct Instruction Set Computer)

  • 고정 길이 명령어를 이용
  • 명령어가 규격화 되어 있고, 하나의 명령어가 1클럭 내외로 실행된다.
  • 메모리 접근을 단순화 하고, 최소화
  • 주소 지정 방식 종류가 적다.
  • 레지스터를 적극적으로 활용한다.
  • CISC보다 많은 명령으로 프로그램을 작동시킨다.

기본 숙제

  1. p.125번의 2번
    • 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
    • 프로그램 카운터 : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
    • 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터
    • 명령어 레지스터 : 해석할 명령어를 저장하는 레지스터
  2. p.155번의 4번
    answer : core