[컴퓨터 공학 기초] 4. CPU와 작동 원리

이재환·2023년 2월 8일
0

CS 공부

목록 보기
4/5

04-1. ALU와 제어장치


ALU는 연산장치

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

ALU

ALU는 레지스터로부터 피연산자, 제어장치로부터 제어신호를 받아들인다.

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

그 후, 결과값을 레지스터에 저장함.
(CPU가 레지스터에 접근하는 속도가 제일 빠르기 때문에)

또 다른 결과로는 플래그가 있는데, 이는 연산 결과에 대한 부가 정보를 뜻함
(ex. 연산 결과가 양수인지, 음수인지, 0인지 등)



CU (Control Unit)

제어장치의 input

  • Clock : 컴퓨터의 모든 부품들을 움직일 수 있게 하는 시간 단위

  • 명령어 : 명령어 레지스터로부터 받아들이는 해석할 명령어

  • 플래그 : 플래그 레지스터로부터 받아들이는 부가정보

  • 제어 신호 : 외부로부터 받아들이는 제어 신호

제어장치의 output

  • CPU 내부로 보내는 제어신호 : 레지스터, ALU로

  • CPU 외부로 보내는 제어신호 : 메모리, 입출력 장치로



04-2. 레지스터

레지스터는 CPU 내부의 작은 임시저장장치

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

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

  • CPU 마다 레지스터의 종류나 개수는 다름

프로그램 카운터 (PC : Program Counter)

메모리에서 가져올 명령어의 주소를 저장

  • 이를 통해 프로그램을 순차적으로 수행할 수 있음

명령어 레지스터 (IR : Instruction Register)

해석할 명령어를 저장 (이는 제어장치에서 해석된다)

메모리 주소 레지스터 (MAR : Memory Address Register)

메모리의 주소를 저장 (CPU가 읽고자하는 주소를 주소 버스로 보낼 때 거치는 레지스터)

메모리 버퍼 레지스터 (MBR : Memory Buffer Register)

메모리와 주고받을 값(데이터와 명령어)를 저장 (CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터)


전체 흐름

  1. PC에서 다음 단계에 CPU가 수행해야하는 명령어의 주소를 가지고 있음

  2. PC에서 MAR로 명령어 주소를 보내주면, MAR에서는 주소 버스를 통해 (제어장치에서 나오는 메모리 읽기 제어신호는 제어 버스를 통해) 메모리에 명령어를 검색함.

  3. 이때 MAR에서 명령어를 가져오면, PC는 그 다음 명령어의 주소를 받아옴.

  4. 메모리에서는 데이터 버스를 통해 MBR로 명령어 및 데이터를 전송해줌

  5. MBR에서 검색한 명령어(current)는 IR로 들어가서 명령어를 해석됨.

프로그램의 순차적 흐름이 끊기는 경우

  • 특정 메모리 주소로 실행 흐름을 이동하는 명령어가 실행될 시

  • 인터럽트가 발생할 시


플래그 레지스터 (FR : Flag Register)

연산 결과 또는 CPU의 상태에 대한 부가적인 정보

범용 레지스터 (GPR : General Purpose Register)

다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터, 보통 여러 개가 존재

스택 포인터 (SP), 베이스 레지스터 (BR or BP)

스택 포인터 : 스택의 꼭대기을 가리킴

베이스 레지스터 : 기준 주소 저장

특정 주소 지정 방식에 활용됨

  • 스택 주소 지정 방식
    • 스택과 스택 포인터를 이용한 주소 방식

    • 스택 포인터는 스택의 꼭대기를 가리키는 레지스터로, 스택이 어디까지 차 있는지 표시함

    • 이 때 스택은 메모리 내에 미리 지정된 스택 영역에 존재함.


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

    • 아래와 같은 명령어 형태를 띈다

    • 상대 주소 지정 방식 : 오퍼랜드 필드의 값(nn)과 PC의 값을 더하여 유효 주소 얻기 (다음에 수행할 명령어의 nn 이후 또는 이전의 명령어를 수행해라)

    • 베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값과 BR의 값을 더하여 유효 주소 얻기

    • 이때, base register는 일종의 기준 주소와 같은 역할.



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

명령어 사이클 : CPU는 메모리 내부의 프로그램을 정해진 흐름대로 처리하게 되는데, 이러한 흐름을 의미함.

인터럽트 : 정해진 흐름을 방해하는, 끊는 신호

명령어 사이클

  • 인출 사이클 : 메모리에 저장된 값을 CPU로 가지고 오는 작업

  • 실행 사이클 : 가지고 온 값을 실행

  • 인출-실행-인출- ... 이 반복됨

  • 간접 사이클 : 인출 사이클 이후에 바로 실행을 할 수 없고, 추가적인 메모리 접근이 더 필요한 경우 (인출 \rightarrow 간접 \rightarrow 실행)

  • 인터럽트 사이클 (뒤에)

  • 명령어 사이클은 인출, 실행, 간접, 인터럽트 사이클로 구성되어 있음

인터럽트

인터럽트에는 크게 동기 (예외)비동기(하드웨어) 인터럽트가 있음

동기 인터럽트 (exception)

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

비동기 인터럽트

주로 입출력장치에 의해 발생

알림과 같은 역할, 즉 입출력 작업 도중에 효율적으로 명령어를 처리하기 위해 사용함.

만약 인터럽트가 없다면, CPU는 주기적으로 입출력 작업의 완료 여부를 확인해야 함

인터럽트가 있다면, CPU는 입출력 작업 동안 다른 일들을 수행할 수 있음

비동기 인터럽트의 처리 순서

  1. 입출력 장치에서 CPU에 인터럽트 요청 신호를 보냄

  2. CPU는 실행 사이클 이후에 명령어를 인출하기 전에 항상 인터럽트 여부를 확인함

  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그(플래그 레지스터에 있는)를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인

  4. 인터럽트를 받아들일 수 있다면, CPU에서 지금까지의 작업을 백업

  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행함

  6. 인터럽트 서비스 루틴 실행이 완료되면 4. 단계에서 백업해 둔 작업을 복구하여 실행을 재개함.

  • 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아님.

NMI (Non Maskable Interrupt) : 하드웨어의 고장, 정전 등과 같이 매우 긴급한 경우

  • 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때, 해당 인터럽트를 어떻게 처리해야되는지가 적혀있는 프로그램 (이도 프로그램이기 때문에 메모리에 저장되어 있음)

  • 인터럽트 벡터 : 각각의 인터럽트(키보드, 마우스, 프린터)를 구분하기 위한 정보

CPU가 인터럽트를 처리한다

= 인터럽트 서비스 여부를 확인하고, 인터럽트 벡터를 통해 인터럽트 서비스의 시작 주소를 알아내서, 인터럽트 서비스 루틴을 실행하고 완료한 후에, 본래 수행하던 작업으로 다시 되돌아 온다

백업

인터럽트 서비스 루틴을 수행하기 전에 레지스터에 담겨져있던 값들은 모두 스택 영역에 보존됨

인터럽트 서비스 루틴을 완료한 후에는 스택에 있는 PC, MAR, MBR 등의 원래 값들로 복구함

profile
사람

0개의 댓글