Written by coh at home

[혼공컴운] 2주차 본문

Etc/도서

[혼공컴운] 2주차

och 2024. 7. 15. 00:04

4장 CPU작동원리

4-1 ALU & 제어유닛

  • Review

CPU = ALU + 제어유닛 + 레지스터 명령어를 읽어들이고 해석하고 실행하는 장치.

ALU : 연산수행

제어유닛 : 명령어 해석, 제어신호

레지스터 : 저장공간

  • ALU
    • Input : 연산자(제어신호), 피연산자(레지스터)
    • Output : 연산결과(레지스터), 플레그(레지스터)
      • Flag :오버플로우, 제로, 부호, 캐리
  • 제어유닛 : 명령어 해석, 제어신호 발생
    • Input : 클럭, 플레그, 명령어, 제어신호 ← 제어버스
    • Output : 제어신호
      • CPU내부 : ALU 연산, 레지스터(명령어, 데이터)
      • CPU외부 → 제어버스: 메모리, 입출력장치(보조기억장치 etc)

4-2 레지스터

  • 8가지 레지스터

프로그램 카운터 : 다음 읽을 명령어 주소 저장.

명령어 레지스터 : 읽어온 명령어 저장

메모리 주소 레지스터 : 프로그램 카운터의 값을 저장하여 제어 신호와 함께 해당 주소의 값을 메모리 버퍼 레지스터에 저장한다.

메모리 버퍼 레지스터 : 읽어들인 값(명령어, 데이터) 저장. 명령어 레지스터에 값을 복사함.

범용 레지스터 : 데이터, 주소 모두 저장 가능. 그럼 메모리 주소 레지스터, 메모리 버퍼 레지스터가 왜 필요하냐 싶다. 전자는 주소버스로 내보낼 주소만, 후자는 데이터 버스로 주고 받을 데이터만 저장한다.

플래그 레지스터 : ALU 연산 이후 플레그 값 저장.

스택 레지스터 : 메모리 스택 영역의 쌓인 스택의 최상단 주소 지정.

베이스 레지스터 : 기준 주소.

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

명령어 사이클: 인출 + 실행 + 간접 + 인터럽트로 구성. 주로 인출과 실행 주기 속에서 간접과 인터럽트가 호출된다.

  • 인터럽트 : CPU의 동작을 방해하는 신호.

동기 인터럽트 (CPU), 비동기 인터럽트 (입출력 장치)가 존재한다.

  1. 동기 인터럽트

CPU에서 명령어를 처리할 때 발생. 예외라고도 불린다.

  1. 비동기 인터럽트

입출력 장치에서 발생. 마우스나 키보드 입력 처리는 비동기적으로 처리해야 자원낭비가 적음.

  • 비동기 인터럽트의 처리 과정

인터럽트 신호 발생 → 다음 명령어 인출 전 인터럽트 체크 → 인터럽트 플레그 체크 → 벡업(스택) → 인터럽트 서비스(인터럽트 벡터) → 다시 수행

  • 인터럽트 시그널
  • 인터럽트 플레그 : 무시 여부 설정. 단, 더 긴박한 작업 정전이나 고장은 무시 불가.
  • 인터럽트 벡터 : 인터럽트 서비스의 메모리 시작주소를 알려줌.
  • 인터럽트 서비스 : 메모리에 올라가 있음. 해당 인터럽트를 처리해주는 프로그램.

인터럽트 서비스를 수행하면 CPU의 레지스터의 데이터가 변하므로 벡업을 스택 영역에 하게 된다.

  • 동기 인터럽트
    • 폴트(fault) : 인터럽트가 발생한 라인부터 다시 명령어 사이클 - 하드디스크에 필요한 데이터 가져와야할 때
    • 트랩(trap) : 인터럽트 발생 이후 라인부터 다시 명령어 사이클 - 디버깅
    • 중단(abort) : 프로그램 정지해야하는 중대한 문제.
    • 소프트웨어 인터럽트 : 시스템콜(signal함수)

5장 CPU성능 향상 기법

5-1 빠른 CPU설계기법

빠른 클럭 → 과열문제 → 멀티코어 → 역할 분배 또는 적은 연산일 경우 → 스레드(하드웨어, 소프트웨어) → 멀티스레드 프로세서(하드웨어 스레드)를 여러 개 레지스터를 사용하여 구현.

코어 : 명령어를 처리하는 부품

하드웨어 스레드 : 코어에서 명령어를 처리하는 단위

소프트웨어 스레드 : 프로그램에서 독립적 실행의 단위

멀티코어 : CPU내 여러 개 코어

멀티스레드 프로세서 : 하나의 코어가 여러 개의 명령어를 동시 실행할 수 있는 CPU

5-2 명령어 병렬 처리

명령어 파이프라인

동시에 여러 개의 명령어를 겹쳐 처리하는 기법 각 파이프라인별(인출, 해석, 실행, 저장) 하드웨어적인 회로가 구성되어 있다. 따라서 클럭이 동작할 때마다 단계가 넘어가게 된다.

  • 파이프라인 위험 : 파이프라인이 기대한 결과가 안 나오는 경우
  1. 데이터 위험 : 데이터 의존도가 생기는 경우.
  2. 제어 위험 : 분기로 프로그램카운터의 값이 변경되는 경우
  3. 구조적 위험 : 레지스터, ALU 등 하드웨어 자원을 동시 접근하는 경우.

슈퍼 스칼라

여러 개의 명령어 파이프라인을 포함한 구조. 단, 파이프라인 위험을 잘 관리해야한다.

비순차적명령어 처리

대부분의 CPU가 사용하는 기법. 데이터 의존성이 없는 명령어를 먼저 처리하는 기법.

5-3 CISC, RISC

ISA

CPU가 이해할 수 있는 명령어들의 모음. 각 CPU마다 명령어의 기본 구조의 차이가 있다. 각 CPU별로 설치파일, 실행파일이 다른 것이 바로 이것 때문!!

CISC (Complex Instruction Set Computer)

대표적 예시 : x86, x86-64

가변길이 명령어

메모리 절약 가능

복잡한 명령어 제공 → 단, 그렇기에 명령어 파이프라인에 큰 걸림돌

실제로 자주 쓰이는 명령어만 사용

RISC

명령어의 종류가 적다.

1클럭 내외로 실행되는 명령어 지향. → 고정길이 명령어

레지스터 적극 활용하여 범용 레지스터 갯수가 많다.

주소 지정방식이 CISC보다 적다.

파이프라인을 이용하기 쉽다.

숙제

p. 125의 확인 문제 2번 - 답: (순서대로) 플레그 레지스터, 프로그램 카운터, 범용 레지스터, 명령어 레지스터

p. 155의 확인 문제 4번 - 답: 코어

'Etc > 도서' 카테고리의 다른 글

[혼공컴운] 4주차  (0) 2024.08.02
[혼공컴운] 3주차  (3) 2024.07.21
[혼공컴운]1주차 정리  (0) 2024.07.07
[부트캠프 QA]  (0) 2024.06.23
[한권으로 배우는 도커 & 쿠버네티스]  (0) 2024.05.18