[혼공컴운] 2주차_chapter04~05

Erdos·2025년 7월 3일
2

혼공단

목록 보기
2/17
post-thumbnail

저자 github

2회독(讀)이니까 그림 그리는데 공을 들여보자!!
하면서 draw.io와 excalidraw를 사용하고 있다.
저 갬성은 책 그대로를 살려야 해!!(이번 주는 파이프라인이 그랬다) 싶은 건 유튜브도 보고 있으니까 캡...쳐...
다시 읽으면서 이런 내용도 있었구나 기함하고 있는데,
이번에도 100% 소화하기 어려우니 4-5회독 정도를 각오해야 할 것 같다.

2주차

  • Chapter 04 ~ 05
  • 기본숙제: p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기
  • 추가숙제: Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

04 CPU의 작동원리


4-1 ALU와 제어장치

ALU

  • 컴퓨터 내부에서 수행되는 대부분의 계산 수행
  • ALU 내부: 여러 계산을 위한 회로들이 있다. 가산기, 보수기, 시프터, 오버플로우 검출기 등
  • 내보내는 정보: flag
    • ALU는 연산 결과에 대한 추가적인 상태 정보를 내보내야 할 때가 있다.
      이 때의 정보가 flag.
    • CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 참고 정보
    • 플래그 레지스터(EFLAGS)에 저장된다.
    • 참고용 블로그: https://blog.naver.com/sol9501/70087721730
플래그 종류사용 예시
부호 플래그부호 플래그가 1이면 계산 결과는 음수,
0이면 양수를 의미.
제로 플래그제로 플래그가 1이면 연산 결과는 0,
0인 경우는 0이 아님을 의미한다.
캐리 플래그캐리 플래그가 1일 경우 올림수나 빌림수가 발생한 경우,
0이면 발생하지 않았음을 의미한다.
오버플로우 플래그연산 결과가 연산 결과를 담은 레지스터보다 큰 상황이 발생하면 1,
0이면 발생하지 않았음을 의미한다.
인터럽트 플래그인터럽트가 가능하면 1, 불가능하다면 0
슈퍼바이저 플래그커널 모드로 실행중이면 1,
사용자 모드로 실행 중이면 0.

제어장치

제어 신호를 보내고, 명령어를 해석하는 장치

  • 제어 장치가 받아들이는 정보
  1. 클럭 신호
    • clock: 컴퓨터가 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위
  2. 해석해야 할 명령어
    • 명령어 레지스터로부터 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.(그림참고)
  3. 플래그 레지스터 속 플래그 값
  4. 시스템 버스, 그 중에서도 제어 신호

4-2 레지스터

CPU마다 이름, 크기, 종료가 매우 다양함. 책에 소개된 것은 많은 CPU가 공통으로 포함하고 있는 레지스터들이다.
low level의 개발일수록 레지스터 안에 어떤 값들이 담기는지 관찰하는 일이 많다!

반드시 알아야 할 레지스터

  1. 프로그램 카운터(PC:Program Counter):
    명령어 포인터(IP:Instruction Pointer)라고도 부르는 CPU도 있음.
    메모리에서 읽어 들일 명령어의 주소 저장

  2. 명령어 레지스터(IR:Instruction Register):
    방금 메모리에서 읽어 들인 명령어(해석할 명령어)를 저장하는 레지스터

  3. 메모리 주소 레지스터(MAR:Memory Address Register):
    메모리에 주소를 저장하는 레지스터

  4. 메모리 버퍼 레지스터(MBR:Memory Buffer Register):
    메모리와 주고받을 값을 저장하는 레지스터
    CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터
    MDR(Memory Data Register)이라고 부르기도 함

순차적인 실행 흐름이 끊기는 경우

  • 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
    (JUMP, CONDITIONAL JUMP, CALL, RE)
  • 인터럽트 발생 시.
  1. 플래그 레지스터: 연산 결과 or CPU 상태에 대한 부가 정보 저장

  2. 범용 레지스터(general purpose register): 데이터와 주소 모두 저장

  3. 스택 포인터: 스택 최상단의 위치를 저장. 스택이 어디까지 차 있는지에 대한 표시

  4. 베이스 레지스터(base-register addressing mode):
    오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식

특정 레지스터를 이용한 주소 지정 방식

스택 주소 지정 방식

  • 스택과 스택 포인터를 이용한 주소 지정 방식
  • 스택 포인터: 스택의 꼭대기를 가리키는 레지스터
  • 스택 영역: 메모리 안에 스택처럼 사용할 영역이 저장되어 있음

변위 주소 지정 방식(displacement addressing mode)

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

변위(displacement)란?

  • 메모리 주소를 계산할 때 기준 주소(base address)로부터 떨어진 거리
  • 의미는 offset 과 같지만, offset이 더 넓게 쓰이고 displacement는 주로 어셈블리의 메모리 참조 방식에서 많이 쓰인다.
1. 상대 주소 지정 방식(relative addressing mode)

오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 유효 주소 얻기

							사실 {실행할 명령어 -1} 번지는 밖에 썼어야 했는데..;
2. 베이스 레지스터 주소 지정 방식(base-register addressing mode)

오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효 주소 얻기

좀 더 알아보기- x86과 ARM 레지스터

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

명령어: cpu가 직접 이해하고 실행하는 가장 작은 단위의 동작

  • 어셈블리어의 한 줄이라고 생각하면서 공부하면 이해하기가 좋을 것 같다.

명령어 사이클(instruction cycle)

  • 하나의 명령어를 처리하는 정형화된 흐름(주기)
  • 인출 사이클(fetch cycle): 메모리의 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클(execution cycle): CPU에서 가져온 명령어를 실행하는 단계
  • 간접 사이클(indirect cycle): 간접 주소 지정 방식과 같이 메모리 접근이 더 필요한 경우

인터럽트(interrupt)

CPU 작업을 방해하는 신호.
cpu가 얼른 처리해야 할 다른 작업이 생겼을 때

1.동기 인터럽트(synchronous interrupts)

  • CPU에 의해 발생하는 인터럽트
  • 예기치 못한 상황을 접했을 때 발생(디버깅, 실행할 수 없는 명령어)
  • 예외(exception)라고도 부름

2.비동기 인터럽트(asynchronous interrupts)

  • 주로 입출력 장치에 의해 발생하는 인터럽트

  • 알림과 같은 역할

  • 하드웨어 인터럽트. 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해.

  • 하드웨어 인터럽트 처리 순서
    1) 입출력 장치가 CPU에 인터럽트 요청신호를 보냄(지금 끼어들어도 되나요? 물어봄)
    2) CPU가 인터럽트 요청을 확인. 인터럽트 플래그를 통해 받아들일 수 있는지 여부 확인
    3) 인터럽트를 받아 들일 수 있다면 CPU는 지금까지의 작업 백업
    4) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
    5) 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개

    • 프로그램 카운터 값 등 현재 프로그램을 재개하기 위해 필요한 내용을 스택에 백업함
  • 인터럽트 서비스 루틴(ISR: Interrupt Service Routine): 인터럽트 핸들러라고도 부른다. 어떤 인터럽트가 발생했을 때, 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램. 메모리에 저장(프로그램이니까).

  • 인터럽트 벡터: 인터럽트 서비스 루틴을 구분하기 위한 정보.(cpu가 해당 인터럽트 주소의 시작 주소를 알기 위해서!) CPU는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받는다.

  • CPU가 인터럽트를 처리한다 : 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 돌아온다.

cf. 막을 수 없는 인터럽트(non mask interrupt, NMI): 치명적인 하드웨어 오류 등 반드시 처리해야 하는 경우.

05 CPU 성능 향상 기법


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

개념: 클럭, 코어, 스레드
빠른 CPU를 만드는 설계 기법: 멀티 코어, 멀티스레드

클럭

  • 클럭 속도(Hz)
    - 1GHz = 10910^9Hz
  • 클럭 속도가 높은 CPU가 일반적으로 성능이 좋다.
  • 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고(발열) 그렇지 않을 때는 낮추기도 함.
  • overclocking: 최대 클럭 속도를 강제로 끌어올리는 것
    - 성능을 올리는 데는 한계가 있다.

코어와 멀티코어

코어(core): CPU 내에서 명령어를 실행하는 부품. (여러개)

멀티코어(multi-core) CPU/processor: 코어가 여러 개

  • 코어 수가 12개 = dodeca-core
  • 코어 수가 지나치게 많아도 성능에는 크게 영향이 없다.
  • 코어마다 처리할 명령어들이 얼마나 적절하게 분배하느냐가 연산속도의 관건이다.

스레드와 멀티스레드

스레드(thread)

  • 실행 흐름의 단위

1.하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위

(cf. 적절한 이미지를 찾아달라고 퍼플렉시티에게 시켰는데, 그림을 생성해주었다.. 잘 만들었으니 써야지..!)

  • multithread process CPU/processor: 하나의 코어로 여러 명령어를 처리하는 CPU
  • hyper-threading: 인텔의 multithread 기술
  • logical processor라고 부르기도 함.

2.소프트웨어적 스레드: thread(computing), 하나의 프로그램에서 독립적으로 실행되는 단위

  • 운영체제에서 공부

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

CPU를 한시도 쉬지 않고 작동시키는 명령어 병렬 처리 기법

명령어 파이프라인

  1. 일반적인 과정
    1) Insctuction Fetch 명령어 인출
    2) Instruction Decode 명령어 해석
    3) Execute Instruction 명령어 실행
    4) Write Back 결과 저장

  2. 명령어 파이프라인/파이프라이닝

  • 동시에 여러 개의 명령어를 겹쳐 실행하는 기법
  • 파이프라인 위험: 높은 성능을 가져오기는 하지만, 특정 상황에서 성능 향상에 실패하는 경우
  • 데이터 위험, 제어 위험, 구조적 위험

    1) 데이터 위험: 명령어 간 '데이터 의존성'에 의해 발생. 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제대로 작동하지 않는다.

    2) 제어 위험: 주로 분기 등으로 '프로그램 카운터의 갑작스러운 변화'에 의해 발생. 프로그램 카운터는 보통 현재 실행 중인 명령어 다음 주소로 갱신되는데, 프로그램 카운터 값에 갑작스러운 변화가 생기면 명령어 파이프라인의 처리 중이었던 명령어들이 쓸모 없게 된다.
    - 분기 예측(branch prediction): 제어 위험을 방지하기 위해 사용하는 기술

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

슈퍼스칼라(superscalar)

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조

  • CPU 속도를 향상시키기 위한 과거의 방법 중 하나

  • 슈퍼스칼라 프로세서, 슈퍼스칼라 CPU: 매 클럭 주기마다 동시에 여러 명령어를 인출할 수도, 실행할 수 있음

    • 이론적으로는 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라짐(반드시는 아님)
    • 파이프라인 위험을 방지하기 위해 고도로 설계되어야 함

비순차적 명령어 처리

  • OoOE: Out-of-order-execution
  • 합법적인 새치기
  • 오늘날 CPU 성능 향상에 크게 기여한 기법, 대부분의 CPU가 차용하는 기법
  • 비순차적 명령어 처리 기법: 순차적으로만 실행하지 않고, 순서를 바꿔 실행해도 무방한 명령어부터 먼저 실행(의존성이 없는 명령어만). 명령어 파이프라인이 멈추는 것을 방지하는 기법
    - 어떤 명령어와 데이터 의존성을 가지고 있는지, 순서를 바꿔 실행할 수 있는지를 판단할 수 있어야 함.

5-3 CISC와 RISC

명령어 집합(instruction set)

  • 명령어 집합(구조)(ISA:Instruction Set Architecture)

  • CPU가 이해할 수 있는 명령어들의 모음

  • CPU마다 ISA가 다를 수 있다.

  • 똑같은 프로그램임에도 CPU가 이해하고 실행할 수 있는 명령어가 달라 어셈블리어도 달라진다.

  • 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속

  • ISA가 다르면 ➡️ 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법 등이 함께 달라진다.

CISC와 RISC

명령어 집합(ISA)의 두 축

CISC
Complex Instruction Set Computer
RISC
Reduced Instruction Set Computer
복잡하고 다양한 명령어(장점) 단순하고 적은 명령어
가변 길이 명령어(규격화 x)고정 길이 명령어(규격화)
다양한 주소 지정 방식적은 주소 지정 방식
(장점) 프로그램을 이루는 명령어 수가 적다
메모리 절약
(단점) 프로그램을 이루는 명령어 수가 많다
(명령어 종류가 적기 때문에 그렇다)
여러 클럭에 걸쳐 명령어 수행1클럭 내외로 명령어 수행
(단점) 자주 사용하는 명령어만 쓰인다.
(장점) load-store 구조: 메모리에 직접 접근하는 명령어를
load, store로 제한(단순화, 메모리 접근 최소화 -> 레지스터 활용)
(단점) 파이프라이닝이 어렵다
명령어 복잡
& 명령어 수행 시간이 정형화x
CPU의 성장 한계
(장점) 파이프라이닝이 쉽다
(예) x86(32bit), x86-64(예) ARM

숙제


1. 기본숙제: p. 125의 확인 문제 2번

  • 플래그 레지스터: 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
  • 프로그램 카운터(PC:Program Counter)/명령어 포인터(IP:Instruction Pointer)라고도 부른다. 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
  • 범용 레지스터: 데이터와 주소를 모두 저장할 수 있는 레지스터
  • 명령어 레지스터: 해석할 명령어를 저장하는 레지스터

2. 기본숙제: p. 155의 확인 문제 4번

답: 코어

3. 추가숙제: Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

  • 코어: 명령어를 실행할 수 있는 하드웨어 부품
  • 스레드: 실행 흐름의 단위
  • 멀티 코어: 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 2개 이상 있는 CPU
  • 멀티 스레드: 하나의 프로그램(프로세스) 안에서 여러 개의 스레드가 동시에 실행되는 구조

궁금

CISC(intel 계열) 와 RISC(아무래도 MAC..?)를 대표하는 현재 노트북은 무엇일까?
재미삼아 chatgpt 4.1 에게 물어보았고 24년도 기준으로 다음과 같이 답했다.
(모델명을 하나하나 검색해서 보았는데 나름 알맞은 대답이었다)
최근 주변의 맥북 사용자들을 보면서 전력 효율이 좋고, 가볍고, 최적화가 잘 되어 있어 이래서 쓰는구나 감탄 했었는데..
CISC도 RISC처럼 효율을 높이기 위한 변화가 활발히 이뤄지는 중이라고 한다.

  • 흐린 눈으로 보는 cisc 키워드
    • Meteor Lake: Chiplet(타일) 구조, 3D stacking
    • NPU(Neural Processing Unit, AI 가속기)
구분대표 모델CPU (예시, 실제 탑재 모델별 약간 차이 있음)
CISCDell XPS 13/14/16Intel Core Ultra 7 155H / Ultra 9 185H
Lenovo ThinkPad X1 Carbon Gen 12Intel Core Ultra 7 155H
ASUS ZenBook Pro 14 OLEDIntel Core Ultra 9 185H or AMD Ryzen 9 8945H
RISCMacBook Pro 14/16 (2024)Apple M3 / M3 Pro / M3 Max
MacBook Air 13/15 (2024)Apple M3
Surface Laptop 7th (2024)Qualcomm Snapdragon X Elite
profile
수학을 사랑하는 애독자📚 Stop dreaming. Start living. - 'The Secret Life of Walter Mitty'

0개의 댓글