[혼공컴운] 2주차_CPU와 메모리

이경현·2024년 1월 13일
0

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


✍️2주차 CPU와 성능 향상 기법

본격적인 컴퓨터 구조 내용이 시작되었습니다!

이번 2주차에 공부한 내용은 1. CPU의 작동 원리. 2. CPU 성능 향상 기법.에 대해 학습하였습니다.

주요 내용은 다음과 같습니다.

  • CPU가 동작하는 원리
  • CPU 성능을 향상시키기 위한 방법

목차
1. CPU의 작동원리
   1-1. ALU와 제어장치
   1-2. 레지스터
   1-3. 명령어 사이클과 인터럽트
2. CPU 성능 향상 기법
   2-1. 빠른 CPU를 위한 설계기법
   2-2. 명령어 병렬 처리 기법
   2-3. CISC와 RISC

1.CPU의작동원리

이름설명
연산장치(ALU)덧셈, 뺄셈 같은 두 숫자의 산술연산과 배타적 논리합, 논리곱, 논리합 같은 논리연산을 계산하는 디지털 회로
레지스터(Register)프로세서에 위치한 고속 메모리로 극히 소량의 데이터나 처리 중인 중간 결과와도 같은 프로세서가 바로 사용할 수 있는 데이터를 담고 있는 영역
제어장치(CU)제어신호를 보내고 명령어를 해석

1-1. ALU와제어장치

  • ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들입니다.

앞선 1주차에서 우리는 컴퓨터 명령어는 연산자와 피연산자로 이루어져 있는 것을 확인했습니다.

명령어 = 연산자(opcode) + 피연산자(operand)

이번 주는 명령어가 실행되는 구체적인 과정에 대해 알아보겠습니다.

명령어 처리에 관여하는 장치들

이름설명
연산장치(ALU) 제어장치 로부터 수행할 연산(연산자) 를 받고 레지스터 를 통해 피연산자 를 받아들입니다.
제어장치(CU)ALU가 수행해야할 연산을 알려줍니다.
레지스터(Register)ALU가 사용할 데이터와 처리한 결과 데이터를 저장합니다.
플래그 레지스터연산 결과에 대한 추가적인 정보를 제공합니다.

이번에 플래그 레지스터가 새롭게 등장했습니다. 플래그 레지스터는 플래그 상태를 저장합니다. 플래그는 CPU에게 부가적인 정보를 줍니다.

플래그의 종류

플래그 종류의미
부호 플래그연산한 결과의 부호를 나타낸다
제로 플래그연산 결과가 0인지 여부를 나타낸다.
캐리 플래그연산 결과 올림수나 빌림수가 발생했는지 나타낸다.
오버플로우 플래그오버플로우가 발생했는지를 나타낸다.
인터럽트 플래그인터럽트가 가능한지를 나타낸다.
슈퍼바이저 플래그커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다.

플래그 레지스터

부호 플래그가 설정되면 플래그 레지스터는 다음과 같이 저장됩니다.

부호 플래그제로 플래그캐리 플래그오버플로우 플래그인터럽트 플래그슈퍼바이저 플래그
100000

제어장치
제어장치는 컴퓨터 부품을 관리하는 장치입니다. 제어장치가 받아들이는 신호는 다음과 같습니다.

  • 클럭 신호
  • 해석해야 할 명령어
  • 플래그 값
  • 제어 버스로 전달된 제어 신호
'클럭' 은 컴퓨터 부품을 움직일 수 있게 하는 시간 단위입니다.

예를 들어 10 Hz(1/s)의 클럭을 가진 CPU는 1 / 10 (s) = 0.1 s 의 클럭 주기를 가집니다.

즉, 높은 클럭 주파수를 가진 CPU가 짧은 클럭 주기를 가지게 됩니다.

1-2. 레지스터

레지스터는 CPU에 있는 비싼 저장장치로 생각할 수 있습니다.

레지스터의 종류설명
프로그램 카운터메모리에서 가져올 명령어의 주소를 저장합니다.
명령어 레지스터해석할 명령어를 저장하는 레지스터 입니다. 프로그램 카운터에 저장된 주소에 있는 명령어를 CPU에 가져와 저장하는 역할을 합니다.
메모리 주소 레지스터메모리 주소를 저장하는 레지스입니다. CPU가 읽어들이고자 하는 주소 값은 버스로 보내지기 전에 메모리 주소 레지스터를 지나게 됩니다.
메모리 버퍼 레지스터메모리와 주고받을 값을 저장. 데이터은 버스로 보내지기 전에 메모리 버퍼 레지스터를 지나게 됩니다.
플래그 레지스터연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장
범용 레지스터다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
스택 포인터스택의 최상위 주소를 가리키는 레지스터
베이스 레지스터기준이 되는 주소를 가리키는 레지스터

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

  • 스택 주소 지정 방식
  • 변위 주소 지정 방식
    • 상대 주소 지정 방식
    • 베이스 레지스터 주소 지정 방식
* 스택 주소 지정 방식은 스택의 최상단 주소를 가리키는 스택 포인터를 활용합니다.

* 상대 주소 지정 방식은 프로그램 카운터와 오퍼랜드 값을 더하여 주소를 가리키는 방식입니다.

* 베이스 레지스터 주소 지정 방식은 베이스 레지스터와 오퍼랜드 값을 더하여 주소를 가리키는 방법입니다.

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

이름설명
명령어 사이클하나의 명령어를 처리하는 정형화된 흐름
인터럽트흐름이 끊어지는 상황

 

명렁어 사이클

이름설명
인출 사이클CPU가 메모리에서 명령어를 인출하는 사이클
실행 사이클인출한 명령어를 실행하는 사이클
간접 사이클간접 주소 지정 방식을 사용한 경우 실행되는 사이클
인터럽트 사이클발생한 인터럽트를 처리하는 사이클

 

이름설명
동기 인터럽트(예외)CPU에 의해 발생하는 인터럽트
비동기 인터럽트(하드웨어 인터럽트)주로 입출력장치에 의해 발생하는 인터럽트

 

하드웨어 인터럽트의 종류

  • 막을 수 있는 인터럽트
  • 막을 수 없는 인터럽트

 

하드웨어 인터럽트 처리 순서

  1. 입출력장치가 CPU에 인터럽트 요청 신호를 보냄
  2. CPU는 매 실행 사이클이 끝나고 명령어를 인출하기 전 인터럽트 여부 확인
  3. CPU는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인
  4. 인터럽트를 받아들일 수 있디면 CPU는 지금까지의 작업을 백업
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행 재개
이름설명
인터럽트 요청 신호CPU의 작업을 방해하는 인터럽트에 대한 요청
인터럽트 플래그인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
인터럽트 벡터인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
인터럽트 서비스 루틴(인터럽트 핸들러)인터럽트를 처리하는 프로그램

 

예외의 종류

이름설명
폴트(fault)예외를 처리한 직후 예외가 발생한 명령어 부터 재개하는 예외
트랩(trap)예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어 부터 실행을 재개하는 예외
중단(abort)CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
소프트웨어 인터럽트시스템 호출이 발생했을 때 나타남

2.CPU성능향상기법

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

클럭
우리는 시간을 정의하기 위하여 1초, 1분, 1시간 이라는 단위를 만들어서 사용합니다.

마찬가지로 CPU에서도 일을 진행하기 위해서 시간 단위를 지정할 필요가 있습니다.

이를 위해서 CPU에서는 클럭을 사용합니다.


출처 : https://en.wikipedia.org/wiki/Clock_generator

위 사진은 메인보드나 그래픽카드에서 클럭을 발생하는 장치이다.

클럭은 전기적 진동(0, 1의 임펄스 신호)가 단위시간동안 발생하는 횟수를 의미한다.

클럭 속도 = 임펄스 횟수 / 1초

예를 들면 A 공장에서는 시계 한칸에 1초(1 Hz)가 흐르고 B 공장에서는 0.5초(2 Hz) C공장에서는 2초(0.5 Hz)가 흐른다.

각 공장에 시계가 10칸 움직일 동안 작업을 마무리 하라는 지시가 내려왔다.

그렇다면 A 공장은 작업을 10초안에 마무리해야하고, B 공장은 5초안에, C 공장은 20초안에 마무리해야한다.

따라서 B 공장의 근로자들의 부하가 높고 그에 비해 C 공장은 부하가 적을 것이다.

코어
코어는 CPU 독립적인 단위라고 볼 수 있다.

제목설명
싱글코어한 개의 독립적인 CPU를 가진 CPU
멀티코어여러 개의 독립적인 CPU를 가진 CPU

스레드
스레드는 실행 흐름의 단위를 의미합니다.

그러나 하드웨어에서 사용하는 스레드와 소프트웨어의 스레드에서 사용하는 의미를 조금 차이가 있습니다.

제목설명
하드웨어적 스레드CPU가 여러 개의 명령을 실행(예. Intel사의 하이퍼스래딩)
소프트웨어 스레드실행하기 위한 여러 자원 중 연산 자원을 의미하는데 사용

프로그램 실행에 필요한 모든 자원을 포함한 개념인 프로세스와 비교할 수 있습니다.

제목설명
스레드프로그램을 실행하기 위한 여러 자원 중 연산 자원
프로세스프로그램 실행에 필요한 모든 자원

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

명령어를 병렬로 처리하기 위한 방법으로 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리 가 있습니다.

명령어 파이프라인

프로그램이 실행되기 위해서는 다음과 같은 과정을 거치게 됩니다.

  • 명령어 인출(IF)
  • 명령어 해석(ID)
  • 오퍼랜드 인출(OF)
  • 명령어 실행(IE)
  • 결과 저장(OS)


출처 : https://binaryterms.com/pipelining-in-computer-architecture.html

각 단계가 서로 중복되지 않는다면 병렬로 처리가 가능합니다.

그러나 명령어 파이프라이닝을 진행함에 따라 발생할 수 있는 위험이 있습니다.

제목설명
데이터 위험병렬로 처리되는 명령어 중 이전 작업의 데이터를 사용하는 경우 발생할 수 있는 위험
제어 위험주소 분기 등으로 실행 흐름이 바뀌면 미리 값을 가지고 와서 처리 하던 명령어들이 의미가 없게 된다.
구조적 위험병렬로 처리되는 명령어가 동시에 같은 자원을 필요로 할 시 발생할 수 있는 위험

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


출처 : https://ko.wikipedia.org/wiki/%EC%8A%88%ED%8D%BC%EC%8A%A4%EC%B9%BC%EB%9D%BC

즉 공장에 하나의 라인이 더 추가된 것으로 이해하면 쉽습니다.

비순차적 명령어 처리
지금까지 이야기한 부분은 명령어가 순차적으로 실행되는 환경에서 설명했습니다.

비순차적 명령어 처리 방법은 명령어를 순차적으로만 실행하지 않고 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법입니다.

이를 통해 명령어 파이프라이닝에 따라 발생할 수 있는 위험을 극복할 수 있게 됩니다.


2-3. CISC와RISC

CPU의 명령어 집합을 설계하기 위한 2가지 매커니즘이 있습니다.

이름설명
ISA(Instruction Set Architecture)CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
CISC(Complex Instruction Set CPU)복잡하고 다양한 종류의 가변 길이 명령어 집할을 활용
RISC(Reduced Instruction Set CPU)단순하고 적은 종류의 고정 길이 명령어 집할을 활용

명령어 집합(ISA)
CPU의 제조사에 따라 CPU가 이해할 수 있는 명령어 집합은 상이합니다.

예를 들면 일반적인 컴퓨터에 사용되는 Intel, AMD 사에서 개발하는 CPU들은(x86-x64) 명령어 집합을 사용합니다.

반면 휴대폰에 사용되는 ARM 기반 CPU는 ARM Istruction Set을 사용합니다.

서로 사용하는 ISA가 다르면 한 시스템(x86-x64)에서 컴파일된 다른 시스템(ARM)에서 프로그램을 실행할 수 없습니다.

CISC
CISC(Complex Instruction Set CPU) 이름에서 유추할 수 있듯이 CISC ISA는 복잡하지만 강력한 가변 명령어들을 사용합니다. CISC의 특징은 다음과 같습니다.

  • 복잡한 명령어
  • 강력한 명령어
  • 가변 길이 명령어
장점단점
메모리 공간을 최대한 아끼며 개발하는데 유리함명령어의 크기가 달라 실행되기까지 시간이 일정하지 않음

과거 메모리 공간을 최대한 아끼며 개발하는 환경에서 각광 받았지만 가변 길이 명령어의 특성 때문에 실행 시간이 일정하지 않다는 단점으로 파이프라이닝에 불리

이런 단점을 극복하기 위해 SISC 제조사에서는 SISC 명령어를 잘게 쪼갠 마이크로 명령어를 사용합니다.

RISC
반대로 RISC(Reduced Instruction Set CPU)는 짧고 규격화된 명령어 되도록 1클럭 내외로 실행되는 명령어를 지향하는 설계 방법입니다.

  • 적은 명령어 갯수
  • 짧은 명령어
  • 규격화된 명령어(고정 길이 명령어)

따라서 RISC는 CISC보다 프로그램을 짤 때 전체 명령어의 길이가 길어지게 됩니다.


출처 : https://www.sharetechnote.com/html/EmbeddedSystem_CISC_RISC.html

CISCRISC
복잡하고 다양한 명령어단순하고 적은 명령어
가변 길이 명령어고정길이 명령어
다양한 주소 지정 방식적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행1클럭 내외로 명령어 수행
파이프라이닝하기 어려움파이프라이닝하기 쉬움

2주차 기본 미션

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

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

코어


2주차 선택 미션

Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
제목설명
코어코어는 CPU 독립적인 단위
하드웨어적 스레드CPU가 여러 개의 명령을 실행(예. Intel사의 하이퍼스래딩)
소프트웨어 스레드실행하기 위한 여러 자원 중 연산 자원을 의미하는데 사용
멀티스레드한 CPU에서 여러개의 명령어를 동시에 처리
멀티코어여러 개의 독립적인 CPU를 가진 CPU

이렇게 2주차까지 끝내게 되었는데요. 😊

저자 동영상을 보면서 공부하니까 더 이해가 쉬워서 좋은 것 같습니다!

이번 주도 다들 수고하셨습니다!

profile
게임 개발자 지망생

0개의 댓글