주뇽's 저장소

4. CPU의 작동 원리 본문

컴퓨터 구조

4. CPU의 작동 원리

뎁쭌 2023. 7. 16. 22:00
728x90
반응형

4. CPU의 작동 원리

1

ALU와 제어장치

ALU(계산하는 장치)

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

2

INPUT

  • 레지스터 ⇒ 피연산자
  • 제어 장치 ⇒ 수행할 연산

OUPUT

  • 연산 결과 ⇒ 레지스터

—# 메모리가 아닌 레지스터에 담는 이유는 CPU가 레지스터에 저장하는 속도가 더 빠르기 때문

  • 연산 결과에 대한 부가 정보 ⇒ 플래그 레지스터
3 4

플래그 종류

5

플래그 레지스터

제어장치

6

INPUT

  • 클럭 ⇒ 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
    • 클럭 주기에 맞춰서 특정 명령어들이 수행
7
  • 명령어 레지스터 ⇒ 해석할 명령어
    • 명령어를 해석해서 제어신호를 내보냄
  • 플래그 레지스터 ⇒ 부가적인 값
  • 외부 ⇒ 제어신호

OUTPUT

  • 제어신호
    • CPU 내부
      • 레지스터
        • 레지스터간의 제어
      • ALU
        • 수행할 연산
    • CPU 외부
      • 메모리
        • 메모리 읽기, 쓰기
      • I.O
        • I.O 읽기, 쓰기, 테스트

레지스터

CPU 내부의 작은 임시저장장치

프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장된다.

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

반드시 알아야 할 8개의 레지스터 종류 (CPU 종류마다 레지스터 종류는 다르다)

  • 프로그램 카운터
    • 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소)
  • 메모리 주소 레지스터
    • CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터
  • 메모리 버퍼 레지스터
    • 메모리와 주고받을 값(데이터와 명령어)
    • 메모리에서 값을 읽은 후에 프로그램 카운터가 증가
  • 명령어 레지스터
    • 해석할 명령어 (방금 메모리에서 읽어 들인 명령어)
  • 플래그 레지스터
    • 연산 결과 또는 CPU 상태에 대한 부가적인 정보
  • 범용 레지스터
    • 다양하고 일반적인 상황에서 자유롭게 사용하며 여러개가 존재하다.
  • 스택 포인터
    • 스택 주소 지정 방식에 사용
    • 스택의 꼭대기를 가르키는 레지스터
  • 베이스 레지스터
    • 기준 주소 저장
    • 변위 주소 지정에 사용
    • 오퍼랜드 필드의 값(번위)과 특정 레지스터의 값을 더하여 유효 주소 얻기

명령어 사이클과 인터럽트

8

CPU는 정해진 흐름대로 명령어를 처리한다. 이 때 이 흐름을 방해하는 것이 인터럽트

명렁어 사이클

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

  • 인출 사이클 : 메모리에서 데이터를 CPU로 가져옴
  • 실행 사이클 : 가져온 데이터를 실행
9

인출 후에 추가적인 메모리 접근이 더 필요한 경우 간접 사이클을 거쳐 실행된다.

10

인터럽트

CPU가 꼭 주목해야 할 때, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생

  • 동기 인터럽트
    • 예외
  • 비동기 인터럽트
    • 하드웨어 인터럽트

동기 인터럽트

CPU가 예기치 못한 상황을 접했을 때 발생

  • 폴트
  • 트랩
  • 중단
  • 소프트웨어 인터럽트
11

비동기 인터럽트

  • 주로 입출력 장치에 의해 발생하는 하드웨어 인터럽트이며 알림과 같은 역할

  • 입출력 작업 도중에도 효율적으로 명렁어를 처리하기 위해 사용

    12

    인터럽트가 없는경우

13

인터럽트가 있는 경우

14

인터럽트가 있는 경우

입출력장치는 CPU에 비해 느리다. 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 하지만 인터럽트가 있다면 다른일을 할 수 있다.

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

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
15

인터럽트 요청

  1. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
  2. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인하며 막을 수 없는 인터럽트도 존재한다.
16

인터럽트 플래그

  1. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
  2. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
  3. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개

—# 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램이며 메모리에 저장되어 있다. 또한 인터럽트에 따라 서비스 루틴이 다르다.

17

—# 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보

18

—# 현재 실행중인 정보 백업

19 20 21