중앙처리장치(CPU) 동작원리

이상훈·2023년 7월 26일
0

CPU 구성요소

CPU는 컴퓨터에서 가장 핵심적인 역할을 수행하는 부분. '인간의 두뇌'에 해당

CPU는 프로세서라고도 불리며, 컴퓨터 시스템에서 가장 중요한 부분 중 하나

  1. 제어 유닛(Control Unit):
  • 제어 유닛은 CPU의 다른 부분들을 조정하고 제어하는 역할을 합니다.

  • 명령어를 해석하고 실행하는 작업을 담당합니다.

  • 제어 유닛은 CPU의 주변 장치와 연결하여 데이터와 명령어를 주고 받을 수 있도록 합니다.

  • 명령어 레지스터에서 해석할 명령어를 받아온다

  • 제어장치는 그 명령어들을 받아 해석해서 제어 신호를 내보낸다.

  • 플래그 레지스터에서 플래그 값도 받아들인다.

  • 제어신호도 받는다. ex 입출력장치 같은것들

  • 제어신호는 cpu 내부와 외부로 나눔

제어 신호를 발생시키고 명령어를 해석하는 장치

  • 클럭 : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
  1. 산술 논리 유닛(Alu, Arithmetic Logic Unit):
  • 산술 논리 유닛은 산술 연산과 논리 연산을 수행하는 부분입니다.

  • 숫자를 더하거나 빼는 등의 산술 연산과 AND, OR, NOT 등의 논리 연산을 처리합니다.

  • 계산하는 장치

  • 계산을 하기 위해서는 피연산자와 수행할 연산이 필요

  • 피연산자는 레지스터로 부터, 수행할 연산은 제어장치로 부터 받아온다.

  • 결괏값을 레지스터에 저장 ex. 숫자, 문자, 주소...0과 1로 표현된 것들

  • 메모리대신 레지스터에 저장하는 이유 : cpu가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 빠름

  • 플래그 레지스터 : 연산 결과에 대한 부가 정보를 저장


  1. 레지스터(Registers):
  • 레지스터는 cpu 내부의 작은 임시저장장치

  • 프로그램 속 명령어, 데이터는 실행 전후로 레지스터에 저장

  • row 레벨 개발자들은 레지스터 안에 어떤 값이 담기는지 관찰하는 일이 생길수있음

  • cpu 내부에는 다양한 레지스터들이 있고 각기 다른 역할을 가진다.

  • cpu 마다 레지스터 종류는 다를수 있지만 공통적인 사항을 다뤄보자





  • 순차적으로 프로그램을 진행할수 있는 원리

순차적인 실행 흐름이 끊기는 경우

  • 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시 ex. jump
  • 인터럽트 발생 시

  • 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
    (스택 포인터 : 스택의 꼭대기를 가리키는 레지스터)

  • 변위 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소 얻기

  • 레지스터는 CPU 내부의 작은 기억 공간으로, 매우 빠른 데이터 접근이 가능합니다.

  • 중앙 처리 장치는 데이터를 레지스터에 가져와서 처리하고, 다시 레지스터에 저장합니다.

  • 레지스터는 CPU 성능에 매우 중요한 역할을 합니다.

  1. 버스(Bus):
  • 버스는 CPU 내부의 다른 부분들끼리 데이터와 명령어를 주고 받을 수 있도록 연결하는 통로입니다.
  • 데이터 버스는 데이터를 이동시키는데 사용되고, 주소 버스는 메모리 주소를 전달하는데 사용됩니다.
  • 제어 버스는 제어 신호를 전달하는데 쓰입니다.
  1. 시계(Clock):
  • CPU는 일정한 시간 간격으로 작업을 수행하도록 시계 신호를 사용합니다.
  • 시계 신호는 CPU의 동작 주파수를 결정하며, 높은 주파수로 동작할수록 CPU의 성능이 향상됩니다.
  1. 캐시 메모리(Cache Memory):
  • 캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치하여 빠른 데이터 접근을 가능하게 합니다.
  • CPU는 자주 사용하는 데이터를 캐시에 저장하여 더 빠르게 접근하고 처리할 수 있습니다.

CPU 동작원리

  • CPU(중앙 처리 장치)는 컴퓨터의 핵심 구성 요소로서, 프로그램의 명령어를 해석하고 실행하여 모든 계산과 데이터 처리를 담당합니다.

  • 컴퓨터에서 모든 연산은 CPU를 통해 이루어진다.

명령어 사이클 : 프로그램 속 명령어들은 일정한 주기가 반복되며 실행함. 이 주기를 명령어 사이클이라함

인출-실행-인출-실행 계속 반복됨

간접 사이클 : 바로 실행이 안되고 메모리에 접근이 더 하고 실행하는 사이클이 있음

인터럽트는 이 사이클을 끊어버리는 요소

  1. 명령어 인출 (Instruction Fetch):
  • CPU는 프로그램이 저장된 메모리에서 다음에 실행해야 할 명령어를 가져옵니다.

  • CPU 내부에는 프로그램 카운터(Program Counter, PC)라는 레지스터가 있으며, 이는 다음에 실행할 명령어의 주소를 가리킵니다.

  • PC는 메모리에서 명령어를 가져오기 위해 사용되는 주소 포인터 역할을 합니다.

  1. 명령어 해석 (Instruction Decode):
  • CPU는 인출한 명령어를 이해하고 해석합니다.

  • 명령어는 CPU가 인식하는 특정한 형식과 규칙에 따라 구성되어 있습니다. 이 형식에 따라 어떤 작업을 수행해야 하는지를 결정합니다.

  1. 실행 (Execute):
  • CPU는 해석된 명령어를 바탕으로 실제 작업을 수행합니다.

  • 산술 논리 연산(ALU, Arithmetic Logic Unit)이 이 단계에서 중요한 역할을 합니다.

  • 덧셈, 뺄셈, 곱셈, 논리 연산 (AND, OR, NOT 등), 시프트 연산 등이 이루어집니다.

  • 데이터를 메모리에서 로드하거나 저장하는 등의 메모리 접근도 이 단계에서 처리됩니다.

  1. 결과 저장 (Write Back):
  • 실행 단계에서 계산된 결과를 레지스터나 메모리에 저장합니다.

  • 레지스터는 CPU 내부의 작은 기억 공간으로, 연산 중간 결과를 저장하거나 다음 명령어에 필요한 데이터를 보관하는 역할을 합니다.

  • 메모리에 결과를 저장하면 나중에 필요할 때 다시 사용할 수 있습니다.

  1. 인터럽트
  • 인터럽트는 동기 인터럽트와 비동기 인터럽트로 나눈다.

  • 명령어 사이클을 방해하는 요소

동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생

  • 원하는 데이터가 없던지, 실행 할 수 없는 명령이라던지...

비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생

  • 알림(세탁기 완료 알림, 전자레인지 조리 알림)과 같은 역할

  • 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용함

  • 입출력 장치는 CPU에 비해 느리다

  • 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다.

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

  • 인터럽트의 종류를 막론하고 인터럽트 처리 순서는 대동소이하다.
  • CPU가 인터럽트 요청을 받아들이려면? 인터럽트 플래그를 확인하면 된다.

  • 정전같은 무조건 실행해야하는 막을 수 없는 인터럽트도 존재

  • CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행한다.

    인터럽트 서비스 루틴이란, 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램이다.
    ex.키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다.

  • 인터럽트 서비스 루틴도 프로그램이기에 메모리에 저장한다.

  • 인터럽트 백터 : 각각의 인터럽트를 구분하기 위한 정보

  • 인터럽트 서비스마다 인터럽트 시작주소 가짐

  • CPU가 인터럽트를 처리한다는 말은 "인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다."는 말이다.

  • 그리고 인터럽트의 시작 주소는 인터럽트 백터를 통해서 알 수 있다.

  • 그럼 인터럽트 날때 원래 실행중인 프로그램의 레지스터 정보들은 어떻게 되나? -> 인터럽트 나기 전까지 작업내용을 스택에 저장한다.


명령어 사이클 최종 흐름

참고

https://www.inflearn.com/course/lecture?courseSlug=%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C&unitId=149159

0개의 댓글