SangKins

[혼공컴운] 2주차 - CPU의 작동원리, 성능 향상 기법 본문

Dev/혼공단

[혼공컴운] 2주차 - CPU의 작동원리, 성능 향상 기법

holdbird 2024. 1. 9. 15:00
연초에 시작된 혼공학습단 11기도 벌써 2주 차가 되었습니다. 시간이 참 빨라요🤣

 

 

2주 차의 진도는 CPU의 작동원리, 성능 향상 기법을 공부합니다.

혼공컴운 책만으로는 깊이 있는 내용을 알기 어렵기 때문에 헷갈리는 부분은 따로 공부해야 할 듯합니다.

 

 

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

어려운 컴퓨터 구조와 운영체제의 원리를 누구나 쉽게 이해할 수 있도록 용어와 개념은 한 번 더 풀어쓰고, 적절한 예시와 이해하기 쉬운 그림으로 재미있게 구성했다. 또한 일상 소재를 활용한

www.hanbit.co.kr

✅혼자 공부하는 컴퓨터 구조+운영체제

#혼공학습단 #혼공 #혼공컴운

# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 ~ 03 p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기 p. 100의 스택과 큐의 개념을 정리하기
2주차
(1/8 ~ 1/14)
Chapter 04 ~ 05 p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기 Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
3주차
(1/15 ~ 1/21)
Chapter 06 ~ 08 p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기 Ch.07(07-1) RAID의 정의와 종류를 간단히 정리해 보기
4주차
(1/22 ~ 1/28)
Chapter 09 ~ 11 p. 304의 확인 문제 1번 풀고 인증하기 Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
5주차
(1/29 ~ 2/4)
Chapter 12 ~ 13 p. 363의 확인 문제 1번 풀고 인증하기 Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기
6주차
(2/5 ~ 2/12)
Chapter 14 ~ 15 p. 400의 확인 문제 1번 풀고 인증하기 Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

 

Chapter 4. CPU의 작동원리

 

ALU와 제어장치

 

ALU는 계산하는 부품으로써 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들임.

계산한 결과와 더불어 플래그를 내보낸다.

 

플래그의 종류 : 부호플래그, 제로플래그, 캐리플래그, 오버플로우플래그, 인터럽트플래그, 슈퍼바이저플래그 등.

 

제어장치는 제어신호를 내보내고 명령어를 해석하는 부품으로써 클럭신호, 해석해야 할 명령어, 플래그값, 제어신호를 받아들인다.

CPU 내부(ALU, 레지스터)와 CPU 외부(메모리, 입출력장치)에 제어신호를 내보낸다

레지스터

레지스터는 CPU내부의 작은 저장장치의 주요 종류 및 역할

-프로그램카운터 : 메모리에서 가져올 명령어의 주소를 저장. (=명령어포인터)

-명령어레지스터 : 메모리에서 가져온 명령어를 저장.

-메모리주소레지스터 : 메모리 주소를 저장.

-메모리버퍼레지스터 : 메모리와 주고받은 데이터 및 명령어를 저장 (메모리 데이터 레지스터)

-범용레지스터 : 다양하고 일반적인 상황에서 데이터와 주소를 모두 저장 가능함.

-플래그레지스터 : 연산결과 및 CPU 상태에 대한 부가적인 정보를 저장.

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

2. 변위 주소 지정 방식 : 오퍼랜드필드 값과 특정 레지스터 값을 더하여 유효주소 결정.

     - 상대 주소 지정 방식 : 오퍼랜드와 프로그램카운터의 값을 더하여 유효주소 결정.

     - 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스레지스터의 값을 더해 유효주소 결정.

명령어 사이클과 인터럽트

명령어 사이클 : 명령어를 처리하는 일정한 주기의 정형화된 흐름으로 인출, 실행, 간접, 인터럽트 사이클로 구성되어 있습니다. 메모리에서 CPU로 가져오는 인출사이클과 가져온 명령어를 실행하는 실행사이클을 반복.

인터럽트 : CPU의 정상적인 작업을 방해하는 신호로서 CPU자체 또는 입출력장치에 의해 발생. 
인터럽트의 종류 : 동기 인터럽트, 비동기 인터럽트
    동기 인터럽트 : CPU에 의해 발생하는 것으로 프로그래밍상의 오류 등 예상치 못한 상황에 마주할 때 발생합니다.
    비동기 인터럽트 : 주로 입출력장치에 의해 발생하는 것으로 알림과 같은 역할을 수행합니다.

 

하드웨어 인터럽트 처리순서
1. 입출력장치는 CPU에 인터럽트 요청신호 보냄.
2. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 인터럽트 수용여부 확인.
3. 인터럽트 수용의 경우 지금까지의 작업을 백업처리.
4. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(인터럽트 핸들러)을 실행.
5. CPU는 3에서 백업해 둔 작업을 복구하여 실행을 재개.


인터럽트 벡터 : 수많은 인터럽트 서비스 루틴을 구분 식별하기 위한 정보.
인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램(인터럽트 핸들러)
막을 수 없는 인터럽트 : 정전이나 하드웨어 고장 (동기 인터럽트)

 

1. 폴트(fault) : CPU가 인터럽트를 처리한 직후 인터럽트가 발생한 그 명령어부터 실행을 재개
2. 트랩(trap) : CPU가 인터럽트를 처리한 직후 인터럽트가 발생한  명령어의 다음부터 실행 재개
3. 중단(abort) : CPU가 실행 중인 프로그램을 강제로 중단할 수밖에 없는 심각한 오류가 발견된 경우
4. 소프트웨어 인터럽트(software) : 시스템 호출이 발생했을 때 수행

Chapter 5. 성능 향상 기법

 


빠른 CPU를 위한 설계기법

클럭(clock)의 속도를 높여 CPU를 비롯한 컴퓨터 부품들을 빠르게 작동시킴.

컴퓨터부품은 클럭신호에 맞춰 일사불란하게 움직이고, CPU는 명령어 사이클의 정해진 흐름에 맞춰 명령 실행.

 

멀티코어(multi-core) CPU(멀티코어프로세서)를 장착하여 명령어 처리속도를 높임.
멀티코어란 CPU 내에서 명령어를 실행하는 부품인 코어(core)를 여러 개인 CPU를 말함.

멀티스레드(multi-thread) CPU(멀티스레드프로세서)를 통해 하나의 코어로 여러 명령어를 동시에 처리.

하드웨어적 스레드 : CPU에서 하나의 코어가 동시에 여러 명령어를 처리하는 방식
소프트웨어적 스레드 : 하나의 프로그램에서 여러 기능을 독립적으로 실행하는 방식

 

명령어 병렬처리 기법

CPU의 속도를 높이는 것과 함께 CPU가 쉬지 않고 명령어를 동시에 처리하는 기법으로, 시간을 알뜰하게

명령어 파이프라이닝, 수퍼스칼라, 비순차적 명령어 처리 등


명령어 파이프라이닝 : 명령어를 순차적으로 처리하지 않고 같은 단계가 겹치지 않게 각 단계를 동시 실행 기법
명령어 인출-> 명령어 해석-> 명령어 실행-> 결괏값 저장의 과정으로 나뉘어 실행
처리 성능을 높이는 측면이 있지만 특정상황에서는 성능향상에 실패하는 파이프라인 위험 발생 가능
- 테이터 위험(data hazard) : 명령어 간의 데이터 의존성에 의해 발생하는 위험
- 제어 위험(control hazard) : 분기(branch) 등으로 인한 프로그램카운터의 갑작스러운 변화에 의해 발생
- 구조적 위험(structural hazard) : 서로 다른 명령어가 동시에 CPU 부품을 사용하려고 할 때 발생

수퍼스칼라(superscalar) : CPU 내부에 여러 개의 명령어 파이프라인을 포함하는 구조
수퍼스칼라 프로세서(=수퍼스칼라 CPU) : CPU 내에 수퍼스칼라 구조로 명령어 처리가 가능한 CPU

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

 

CISC와 RISC 

 CPU의 언어인 ISA란? 
CPU가 이해할 수 있는 명령어들을 모아놓은 것으로  명령어집합(instruction set) 또는 명령어집합구조
(Instruction Set Architecture)라고 말함.

 

즉. ISA가 다르면 서로의 명령어를 이해하지 못합니다.


ISA는 각기 다른 성격으로 설계된 양대산맥 CISC와 RISC

CISC(complex instruction set architecture)

복잡하고 다양하고 강력한 기능을 가진 명령어집합으로 가변길이 명령어를 활용.
적은 수의 명령어로 프로그램을 실행할 수 있고 메모리 공간을 절약할 수 있는 장점이 있는 반면 명령어의 크기와 실행시간이 일정하지 않은 취약점이 있음.


 RISC(reduced instruction set architecture) 

CISC와 달리 단순하고 적은 종류 명령어를 활용함. 명령어가 짧고 규격화되어 있어 고정길이 명령어를 활용하며 명령어 파이프라이님에 최적화됨.


CISC와 RISC의 차이 
CISC : 명령어 복잡하고 다양, 가변 길이 명령어, 주소 지정 방식 다양, 명령어 수 적음, 여러 클럭, 파이프라이닝 어려움.
RISC : 명령어 단순하고 적음, 고정 길이 명령어, 주소 지정 방식 적음, 명령어 수 많음, 1 클럭 내외, 파이프라이닝 쉬움.

 

 

 

미션


1. 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터

2. 프로그램 카운터 : 메모리에서 가져올 명령어의 주소를 저장하는 레지스터

3. 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터

4. 명령어 레지스터 : 해석할 명령어를 저장하는 레지스터

 

멀티코어 CPU

: 코어


코어와 스레드, 멀티코어와 멀티쓰레드의 개념

1. 코어와 쓰레드:
   - 코어(Core): CPU 내에서 명령어를 실행하는 부품으로, 일반적으로 하나만 존재함.
   - 쓰레드(Thread): 하나의 코어가 명령어를 실행하는 흐름 단위를 나타냄.

2. 멀티코어와 멀티쓰레드:
   - 멀티코어(Multi-core): CPU 내에 여러 개의 코어를 포함하고 있는 구조로, 멀티코어 CPU 또는 멀티코어 프로세서라고 불림.
   - 멀티쓰레드(Multi-thread): 하나의 코어가 여러 개의 명령어를 동시에 실행하는 구조를 나타냄.


 

복습하는 개념으로 한번 정리해 봤습니다. 머릿속에서 정리되는 것 같아 좋은 것 같습니다!