[혼공학습단] 혼공컴운 2주차 (Ch 04, 05)

채민·2024년 1월 14일
1

혼공컴운

목록 보기
2/4

1주차에는 상세하게 내용 정리를 했지만 타자를 치면서도 이건 지속불가능하다는걸 느꼈다... 그래서 이번 주는 마인드맵으로 기억해야할 키워드를 적었고 좀 더 설명이 필요한 부분만 적으려고 한다.

내용 정리

Chapter 4

ALU

: CPU 내부의 계산 담당

  • ALU가 내보내는 정보 중 연산 결과값는 특정 숫자나 문자, 메모리 주소일 수 있다
    • 메모리에 저장되지 않고 일시적으로 레지스터에 저장됨
  • 플래그: ALU가 내보내는 정보 중 연산 결과에 대한 추가적인 상태 정보
    • 부호 플래그
    • 제로 플래그
    • 캐리 플래그
    • 오버플로우 플래그
    • 인터럽트 플래그
    • 슈퍼바이저 플래그

제어장치

: 명령어를 읽어 들이고 해석

  • 제어신호: 컴퓨터 부품들을 관리하고 작동 시키기 위한 일종의 전기 신호

제어장치가 받아들이는 정보
1. 제어장치는 클럭 신호를 받아들인다 (디논에서 배운 그 clock)
2. 제어장치는 '해석해야할 명령어'를 받아들인다

CPU가 해석해야할 명령어를 명령어 레지스터로 저장
명령어 레지스터에서 제어장치로 해석해야할 명령어를 보냄
제어장치가 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알림
  1. 제어장치는 플래그 레지스터 속 플래그 값을 받아들인
  2. 제어장치는 시스템 버스, 그 중에서 제어 버스로 전달된 제어 신호를 받아들인다
CPU뿐만 아니라 CPU 외부 장치도 제어 신호를 발생 시킬 수 있음

제어장치가 내보내는 정보
1. CPU 외부에 전달하는 제어신호

제어 버스로 제어 신호를 내보내는거임
1. 메모리에 전달하는 제어 신호
2. 입출력장치에 전달하는 제어 신호
이렇게 두가지가 있음
제어장치가 메모리에 저장된 값을 읽거나/메모리에 새로운 값을 쓰고 싶을때 
메모리로 제어 신호를 내보냄

제어장치가 입출력장치의 값을 읽거나/입출력장치에 새로운 값을 쓰고 싶을때는
입출력장치로 제어신호를 내보냄
  1. CPU 내부에 전달하는 제어신호
1. ALU에 전달하는 제어신호
    수행할 연산을 지시하기 위해
2. 레지스터에 전달하는 제어신호: 
    레지스터간에 데이터를 이동시키거나 
    레지스터 내에 저장된 명령어를 해석하기 위해

레지스터

  1. 프로그램 카운터: 메모리에서 읽어 들일 명령어의 주소 저장
    • 명령어 포인터라고 부르기도 함
  2. 명령어 레지스터: 방금 메모리에서 읽어 들인 명령어(=해석할 명령어)를 저장하는 레지스터
  3. 메모리 주소 레지스터: 메모리의 주소를 저장하는 레지스터
    • CPU가 읽어 들이고자 하는 주소값을 주소 버스로 보낼 때 여길 거쳐감
  4. 메모리 버퍼 레지스터: 메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터
    • 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값이 여길 거쳐감
    • 데이터 버스로 주고 받을 값이 여길 거쳐감

위 4개 레지스터에 어떤 값이 담기는지 p114 참고

# p114 요약:
CPU로 실행할 츠로그램이 1000번지부터 1500번지까지 저장되어있고 1000번비에는 1101 저장

1. 프로그램이 실행되기 전: 프로그램 카운터에 1000이 저장되어있음
2. 1000번지를 읽어들이기 위해 주소 버스로 1000번지를 내보내야 함
    -> 메모리 주소 레지스터에 1000 저장
3-1. 주소 버스를 통해 메모리 주소 레지스터로부터 메모리 주소 값(1000번지)이 메모리로 보내짐.
3-2. 제어버스를 통해 '메모리 읽기' 제어 신호가 메모리로 보내짐
4-1. 데이터 버스를 통해 메모리 1000번지에 저장된 값이 메모리 버퍼 레지스터로 전달 됨
4-2. 프로그램 카운터가 증가되어 다음 명령어를 읽어들일 준비함
5. 메모리 버퍼 레지스터에 저장된 값이 명령어 레지스터로 이동
6. 제어장치가 명령어 레지스터의 명령어를 해석하고 제어 신호 발생시킴
4-2단계에서 프로그램 카운터 값이 증가되었으니 1000번지 명령어가 끝나면 
CPU는 다음 명령어인 1001번지를 읽어들임.

프로그램 카운터가 꾸준히 증가하기 때문에 
CPU가 메모리 속 프로그램을 순차적으로 읽어들이고 실행해 나갈 수 있음
  1. 범용 레지스터: 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
    • 데이터와 주소를 모두 저장할 수 있음
    • CPU안에 여러개 있음
  2. 플래그 레지스터: ALU 연산에 따른 플래그를 저장
  3. 스택 포인터: 스택의 꼭대기를 가리키는 레지스터
    • 스택에 마지막으로 저장한 값의 위치를 저장
    • 스택 주소 지정 방식에 사용
  4. 베이스 레지스터: 베이스 레지스터 주소 지정 방식에서 기존 주소를 담는 역할

1. 특정 레지스터를 이용한 주소 지정 방식: 스택 주소 지정 방식

2. 특정 레지스터를 이용한 주소 지정 방식: 변위 주소 지정 방식

  • 오퍼랜드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식으로 나뉨

명령어 사이클

: 실행되는 프로그램 속 명령어들이 반복되는 일정한 주기

  1. 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  2. 실행 사이클: CPU로 가져온 명령어를 실행하는 단계
    • 제어장치가 명령어 레지스터에 담신 값을 해석
    • 해석한 다음 제어 신호 발생
인출 사이클과 실행 사이클이 반복하여 실행되며 프로그램이 돌아감
  1. 간접 사이클: 명령어를 실행하기 위해 메모리 접근을 한번 더 하는 단계
어떤 명령어는 (1) 인출과 (2) 실행 사이클만으로 실행되고,
어떤 명령어는 (1) 인출 (2) 간접 (3) 실행 사이클을 거쳐 실행된다

인터럽트: CPU가 수행 중인 작업을 방해하여 중단 시키는 신호

  • 동기 인터럽트: CPU에 의해 발생하는 인터럽트
    • 폴트/트랩/중단/소프트웨어 인터럽트로 나뉨
    • 예외라고도 부른다
    • CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황
  • 비동기 인터럽트: 입출력장치에 의해 발생하는 인터럽트
    • 막을 수 있는 인터럽트/막을 수 없는 인터럽트로 나뉨

    • CPU가 프린터와 같은 입출력장치에 입출력 작업을 부탁하면, 작업을 끝낸 입출력장치가 CPU에 완료 알림을 보냄

      • 이때 완료 알림 = 인터럽트
    • 키보드, 마우스와 같은 입출력장치가 어떤 입력을 받아들였을 때 이를 처리하기 위해 CPU에 입력 알림을 보냄

      • 이때 완료 알림 = 인터럽트
    • 하드웨어 인터럽트라고도 부른다

    • CPU는 효율적으로 명령어를 처리하기 위해 이런 알림과 같은 하드웨어 인터럽트를 사용

    • 하드웨어 인터럽트 처리 순서도 있음 (p132 참고)

      • 인터럽트 요청 신호: CPU한테 끼어들기 가능하냐는 물음
      • 인터럽트 플래그: 하드웨어 인터럽트를 받아들일지 결정하는 플래그
      • 인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램(인터럽트 핸들러라고도 부름)
      • 인터럽트 벡터: 인터럽트 서비스 루틴을 식별하기 위한 정보

Chapter 5

설계기법

서로 다른 설계 기법으로 CPU의 성능을 높일 수 있다

1. 클럭 속도

: 1초에 클럭이 몇 번 반복되는지 나타냄

  • 헤르츠(Hz)단위로 측정
  • 오버클럭킹 주의
    • 클럭의 속도를 무작정 높이면 발열 문제가 나타날 수 있다

2. 멀티코어

코어란?
: '명령어를 실행하는 부품'의 관점에서의 CPU
멀티코어란?
: 위 코어를 여러 개 포함하고 있는 CPU

  • 싱글코어에서부터 도데카코어(12개) 프로세서가 있다
  • CPU가 많다고 무조건 성능이 좋아지는게 아님
    • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐에 따라 연산 속도가 달라진다

3. 스레드

: 실행 흐름의 단위

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

  • CPU에서 사용하는 스레드라는 용어는 보통 하드웨어적 스레드를 의미
  • 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 함
  • 하이퍼스레딩: 일텔의 멀티스레드 기술

소프트웨어적 스레드란?
: 하나의 프로그램에서 독립적으로 실행되는 단위

  • 프로그래밍 언어나 운체를 학습할 때 스레드는 보통 소프트웨어적 스레드를 의미

멀티코어 프로세서와 멀티스레드 프로세서의 차이점
: 멀티코어 프로세서는 명령어를 실행할 수 있는 하드웨어 부품이 CPU안에 2개 이상 있는 CPU, 멀티스레드 프로세서는 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU

명령어 병렬 처리 기법

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

명령어 파이프라이닝

: 공장 생산 라인마냥 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법

명령어 처리 과정:
1. 명령어 인출
2. 명령어 해석
3. 명령어 실행
4. 결과 저장

  • 파이프라인 위험: 파이프라이닝이 성능 향상에 실패하는 경우
    • 데이터 위험
    • 제어 위험
      • 이를 위해 분기예측 기술을 사용
    • 구조적 위험
      • 자원위험이라고도 부름

슈퍼 스칼라

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

  • 공장 생산 라인을 여러개 두는 것에 비유
  • 이론적으로는 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라짐
    • 하지만 여러개 파이프라인을 둔만큼 데이터 위험, 제어 위험, 자원 위험을 피하기 더욱 까다로우니 설계를 잘해야한다~

비순차적 명령어 처리기법

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

  • 명령어의 합법적 새치기

CISC

CPU가 이해할 수 있는 명령어들의 모음인 ISA의 일종

  • 가변 길이 명령어 활용
  • 적은 수의 명령으로 프로그램을 동작시키고 메모리 절약 가능
  • 명령어가 규격화되지 않아서 파이프라이닝이 어려움

RISC

CPU가 이해할 수 있는 명령어들의 모음인 ISA의 일종

  • CISC의 단점을 보완
  • 고정 길이 명령어 활용
  • CISC에 비해 명령어의 종류가 적음
  • 명령어가 규격화되어있고 하나의 명령어가 1클럭 내외로 실행되기 때문에 명령어 파이프라이닝에 최적화

혼공학습단 미션

기본 미션

p.125의 확인 문제 2번

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

p.155의 확인 문제 4번 풀고 인증하기

선택 미션

Ch05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

(위 정리 참고)

결국 오늘도 간결한 요약에 실패했다...

profile
컴공의 개발일지

0개의 댓글