본문 바로가기
개발자 일지/컴퓨터구조, 운영체제

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

by 네빌링 2025. 1. 14.
반응형

혼공학습단13기 2주차 활동의 일환으로 혼자공부하는 컴퓨터구조 + 운영체제 학습 내용을 정리해보는 포스팅입니다.

오늘은 챕터4 CPU의 작동 원리, 챕터5 CPU 성능 향상 기법 관리를 정리해보겠습니다.

 

혼공컴운-2주차-썸네일

 

 

[목차]

  1. CPU의 작동 원리
  2. CPU 성능 향상 기법
  3. 마무리

 

 


1. CPU의 작동 원리

 

CPU의 구성요소 중 대표적으로

ALU, 제어장치, 레지스터가 있습니다.

 

여기서는 ALU와 제어장치를 

알아보려고 합니다.

 

1) ALU와 제어장치

 

ALU는 레지스터를 통해 피연산자를 받고,

제어장치로부터 제어신호를 받아서 

산술, 논리 연산 등 다양한 연산을 수행합니다.

 

ALU의 결과값은 메모리에 바로 저장되는 것이 아니라

레지스터에 저장됩니다.

 

그리고 ALU는 결과값 이외에도 연산 결과에 대한

추가적 정보를 담는 플래그도 보냅니다.

그리고 플래그 레지스터에 담깁니다.

 

다음은 제어장치입니다.

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

부품입니다.

 

제어장치가 받아들이는 정보는 아래와 같습니다.

  • 클럭 신호
  • 해석해야 할 명령어(명령어 레지스터로부터)
  • 플래그 레지스터 속 플래그 값
  • 시스템버스(제어버스)로 전달된 제어신호

제어장치가 내보내는 정보는 크게 CPU 외부, CPU 내부로 

나뉩니다.

 

CPU 외부로 제어신호를 내보내는데,

메모리에 전달하거나 입출력장치에 전달합니다.

 

CPU 내부에는 ALU에 전달하는 제어신호와 

레지스터에 전달하는 제어신호가 있습니다.

 

2)레지스터

 

레지스터에는 종류가 많이 있고 CPU마다 이름이 다릅니다.

그러나 꼭 필수적으로 알아야 하고 공통으로 대부분 포함하는

8가지의 레지스터를 알아보려고 합니다.

 

레지스터 종류 설명
프로그램 카운터 메모리에서 가져올(읽어들일) 명령어 주소를 저장하는 레지스터
명령어 레지스터 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터
메모리 주소 레지스터 -메모리 주소를 저장하는 레지스터
-CPU는 여기서 주소버스를 통해 주소값을 전달 가능
메모리 버퍼 레지스터(MDR) 메모리와 주고받은 값(데이터, 명령어)을 저장하는 레지스터
데이터버스로 값을 주고받고 가능
범용 레지스터 -데이터와 주소 모두를 저장할 수 있는 레지스터
-대부분 현재의 CPU들은 범용 레지스터를 갖고 있음
플래그 레지스터 ALU 연산 결과에 따른 플래그를 저장하는 레지스터

 

아직 정리 못한 나머지 2개의 레지스터는

주소지정방식에서 사용되는데

스택 포인터베이스 레지스터입니다.

 

주소지정방식은 명령어에서 오퍼랜드에 어떻게 주소를 지정할지에 

대한 방법을 얘기합니다.

 

이 방법중 스택 포인터를 사용하는 주소지정방식이

스택 주소 지정 방식입니다.

말그대로 스택과 스택 포인터를 이용한 방식입니다.

 

스택에 값을 저장하고 스택 포인터는 

스택의 가장 위쪽 데이터를 가리킵니다.

 

이 스택은 메모리의 일부 영역에 있습니다.

 

그리고 변위 주소 지정 방식이 있습니다.

 

변위 주소 지정 방식은 다시 두 가지가 있는데,

첫번째는 상대 주소 지정 방식이 있습니다.

 

이 방식은 오퍼랜드와 프로그램 캉누터 값을 더해

유효주소를 얻는 방식입니다.

 

그리고 베이스 레지스터를 사용하는

베이스 레지스터 주소 지정 방식이 있습니다.

 

베이스 레지스터는 말그대로 베이스 주소(기준주소)를 

담고 있어서 이 값과 오퍼랜드 값을 더해 유효주소를 

얻을 수 있습니다.

 

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

 

CPU가 명령어를 주기적으로 처리하는 흐름을

명령어 사이클이라고 합니다.

 

메모리에서 CPU로 가지고 오는 단계를 인출 사이클,

명령어 레지스터 값을 제어장치가 해석해서 신호를 발생시키는

단계를 실행 사이클로 부릅니다.

 

그래서 인출, 실행 사이클이 반복되는 것이

명령어의 기본적 사이클입니다.

 

그러나 곧바로 실행할 수 없는 경우도 있습니다.

명령어의 오퍼랜드 주소지정방식이

간접 주소 지정 방식(유효주소의 주소를 담는 방식)이면

메모리 접근을 더 해야하기 때문인데

이 사이클을 간접 사이클이라고 합니다.

 

그러나 하나가 더 있는데 바로 인터럽트 입니다.

 

말그대로 CPU의 명령어 수행을

'방해'하는 흐름, 신호입니다.

 

인터럽트는 크게 동기 인터럽트,

비동기 인터럽트가 있습니다.

 

동기 인터럽트는 예외(Exception)로 불리며

프로그램 오류 등으로 여기서 말하는 인터럽트는

아닙니다.

 

비동기 인터럽트(하드웨어 인터럽트)가

주로 여기서 언급할 인터럽트인데

입출력장치에 의해 발생하는 인터럽트를 말합니다.

 

예를 들어 프린터 입출력 요청이 오고나면

끝날 때까지 CPU가 기다리면 비효율적입니다.

그래서 CPU는 할일을 하고 있다가

프린터에서 '완료'라는 인터럽트를 보내는 식으로

작동할 수 있습니다.

 

또 마우스 등에서 클릭시 인터럽트 요청이 들어와서

CPU가 그 처리를 해주는 것도 인터럽트 요청의 처리입니다.

 

하드웨어 인터럽트 처리 순서는 아래와 같이 정리할 수 있습니다.

 

  • 입출력장치가 CPU에 인터럽트 요청 신호를 보냄
  • CPU는 실행 사이클 끝나고 명령어 인출전 인터럽트 여부 체크
  • 인터럽트 요청 확인 후 인터럽트 플래그를 통해 인터럽트 받아들일 수 있는지 체크
  • 받아들일 수 있으면 CPU는 지금까지 작업을 백업
  • CPU는 인터럽트 벡터 참조하여 인터럽트 서비스 루틴 실행
  • 인터럽트 서비스 루틴 끝나면 백업 복구 후 실행 재개

 

참고로 인터럽트 플래그인터럽트를 받아들일지 말지에 대한

값을 담고 있는데, 인터럽트 불가능으로 설정되어 있어도

무시할 수 없는 인터럽트가 있습니다.

(정전 또는 하드웨어 고장으로 인한 인터럽트 등)

 

그리고 인터럽트 서비스 루틴인터럽트를 처리하기 위한

프로그램입니다.

 

인터럽트 벡터인터럽트 서비스 루틴 구분을 위한 정보입니다.

인터럽트 요청시 같이 들어오는 정보입니다.

 

그리고 백업 작업은 메모리의 스택 영역에 백업을 해둡니다.

 

2. CPU 성능 향상 기법

 

1)빠른 CPU를 위한 설계 기법

 

CPU가 빠르기 위해서는 우선 앞에서 언급한

클럭 속도(Hz)가 높아야 합니다.

 

컴퓨터, 노트북 구입시 CPU 성능을 보면

2.5GHz 등으로 적혀있는 걸 볼 수 있습니다.

 

1초에 '똑-딱'하고 한 번 반복되면

1Hz를 나타냅니다.

 

이 클럭속도는 시계와 같이 일정하게 움직이지는

않습니다. 고성능을 요구하는 순간에는

더 빠르게 움직이게 되며, 강제로

최대 클럭 속도를 끌어올리는 것을

오버클럭이라고 합니다.

 

클럭 속도를 높이면 빨라지지만

컴퓨터가 그만큼 부하가 심해지기 때문에

클럭만으로 CPU 속도 높이는 것은

한계가 있습니다.

 

클럭 이외에 성능을 높이는 방법이

CPU의 코어스레드 수를 늘리는 것입니다.

 

여기서 코어는 명령어를 실행하는 부품이며,

레지스터와 제어장치, ALU 묶음을 하나의 코어로

생각하면 될 것 같습니다.

 

이 묶음이 2개면 듀얼코어, 4개면 쿼드코어 등으로

부를 수 있습니다.

 

이런 코어를 멀티코어 CPU, 멀티코어 프로세서라고 

부릅니다.

 

그러나 코어를 무조건 늘린다고 빨라지는 것은 아닙니다.

아주 작은 일을 혼자하는 게 아니라 8명이 하면

오히려 느려질 수 있는 것과 같은 이치입니다.

 

다음으로 스레드멀티스레드입니다.

여기서의 스레드는 소프트웨어적 스레드가 아니라

하드웨어적 스레드를 언급합니다.

 

소프트웨어적 스레드는 하나의 프로그램에서 

독립적으로 실행되는 단위를 뜻합니다.

 

반면, 하드웨어적 스레드는 하나의 코어가 동시에 처리하는

단위를 뜻합니다.

 

이를 멀티스레드 프로세서라고 합니다.

 

8코어 16스레드는 코어가 8개이고 코어1개당 2개의 스레드로

처리 가능한 것을 뜻합니다.

 

2)명령어 병렬 처리 기법

 

CPU를 빠르게 하려면 앞에서 언급한 

코어, 스레드, 클럭 등의 요소도 중요하지만

CPU가 놀지 않고 효율적으로 일하는 것도 중요합니다.

 

여기서는 이 부분을 향상시키는 방법에 대해 언급합니다.

 

명령어 병렬 처리 기법은 CPU를 쉬지 않고 작동시킵니다.

 

대표적으로 명령어 파이프 라이닝, 슈퍼스칼라, 

비순차적 명령어 처리가 있습니다.

 

명령어 파이프라인은 명령어 처리과정이 겹치지 않는다면

각 단계를 동시에 실행시키는 것을 의미합니다.

 

명령어 처리를 인출, 해석, 실행, 저장으로 크게 구분한다면,

각 명령어들의 저런 단계들이 겹치지 않도록 하는 것입니다.

 

이러면 특정 단계에서는 명령어3개를 동시에 실행시키거나,

4개를 동시에 실행시킬 수 있습니다.

 

그러나 파이프라이닝은 특정상황에서 실패하는 경우가 있는데

이를 파이프라인 위험이라고 부릅니다.

 

크게 3가지가 있고 아래와 같습니다.

 

데이터 위험 명령어간 데이터 의존성에 의해 발생. 명령어1과 2가 있을 때, 1의 계산 이후 2가 수행되어야 하는 경우가 있으며 이는 2가 1에 의존적인 상황. 이런 상황에서 무작정 동시에 실행하면 데이터 오류 발생 가능
제어 위험 -분기 등으로 인해 프로그램 카운터의 갑작스러운 변화에 의해 발생
실행 흐름이 바뀌어 명령어 순서 변화가 생길 수 있음. 이때 동시에 실행하면 동시에 실행할 명령어들 무쓸모됨
-이런 상황에서 쓸 수 있는 기술이 분기 예측. 프로그램이 어디로 분기할지 미리 예측 후 그 주소를 인출하는 기술
구조적 위험(자원 위험) -명령어들을 겹쳐 실행하는 과정에서 레지스터, ALU 등 자원을 공유사용할때 발생

 

 

다음으로 슈퍼스칼라는 파이프라인을 여러개로 처리하는 방법입니다.

 

이론적으로 단일 파이프라이닝에 비해 빠릅니다.

그러나 그만큼 위험도도 증가하기 때문에 고도로 설계되어야 하며,

위에서 언급한 3가지 위험에 더 노출되기 쉽습니다.

 

마지막으로 비순차적 명령어 처리가 있습니다.

명령어들을 순차적으로 실행하지 않고 순서를 변경시키는 방법입니다.

 

명령어 순서가 1~6까지 있다고 가정했을 때,

3만 1과 2의 순서에 의존한다면, 4~6은 순서를 위로 올려도 상관없습니다.

이런식으로 좀 더 효율성을 높일 수 있습니다.

 

3)CISC와 RISC

 

위의 파이프라이닝, 슈퍼스칼라 기법 등을 효율적으로 사용하려면

CPU가 인출,해석하는 명령어가 파이프라이닝 하기 쉽게 생겨야 합니다.

 

이런 명령어를 크게 CISCRISC 방식으로 구분할 수 있습니다.

 

우선 ISA라는 용어부터 알고 가야하는데

이는 CPU가 이해할 수 있는 명령어 집합을 의미합니다.

 

A,B를 같은 소스코드로 만든 프로그램이라고 하더라도

ISA가 다르면 CPU가 같이 이해할 수 없습니다.

 

본론으로 들어가 CISC와 RISC를 알아보려고 합니다.

 

CISC는 Complex Instruction Set Computer로

복잡한 명령어 집합을 활용하는 컴퓨터입니다.

 

강력한 명령어 집합을 활용하기 때문에 명령어 형태와 크기가

바뀌는 가변 길이 명령어를 사용합니다.

 

그만큼 적은수의 명령어로도 프로그램 실행이 되니

메모리 세이브가 가능합니다.

 

그러나 가변 길이기 때문에 파이프라이닝에 최적화된

방식은 아닙니다.(규격화가 안 됨)

 

이런 이유로 RISC방식이 등장했습니다.

RISC는 Reduced Instruction Set Computer의 약자입니다.

 

RISC는 고정 길이 명령어이고 규격화 되어 있어서

파이프라이닝에 효과적입니다. 

 

그리고 메모리 접근 명령어를 load, store만으로 제한하여

단순화하였습니다.

 

3. 마무리

 

혼공학습단13기 참여 덕분에 우선순위를 높여서

발등에 불이 떨어지기 전에(?) 열심히 학습하고 있습니다.

그리고 우수혼공 학습자 선정으로 감사하게도

커피한잔도 받을 수 있어서 정말 감사드리네요.

 

스터디를 리드해주시는 학습단의 족장님에게

감사드립니다ㅎㅎ

 

그리고 숙제 인증!

 

혼공컴운-2주차-숙제1
125p / 확인문제 2번

 

혼공컴운-2주차-숙제2
155p / 확인문제 4번

 

감사합니다!

반응형