Computer Science/Introduction

12. 중앙 처리 장치, 레지스터

컴퓨터 탐험가 찰리 2022. 5. 15. 07:00
728x90
반응형

 

1. 레지스터(Register)

 

레지스터는 중앙처리장치(CPU, Central Processing Unit)의 구성 요소 중 하나이다. 중앙처리 장치는 3가지로 나누어 설명하는 경우가 많다.

 

  1. 연산 장치 : 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술연산, 논리곱, 논리합, 부정 등의 논리연산을 수행한다. 산술논리연산장치라고도 한다. 연산장치는 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보내서 저장한다.
  2. 제어 장치 : 명령어를 순서대로 실행할 수 있도록 제어한다. 주기억장치에서 프로그램 명령어를 꺼내 해독한 다음, 해독 결과에 따라서 명령어 실행에 필요한 신호를 기억장치, 연산장치, 입출력 장치로 보낸다.
  3. 레지스터 : RAM, ROM 등에 비해 더 고속인 기억장치이다. 명령어 주소, 명령어 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장한다. 연산에 필요한 데이터나 연산 결과를 저장하는 레지스터는 범용 레지스터라고 부르며, 특수 목적 레지스터는 아래와 같은 종류가 있다.

 

특수 목적 레지스터

  • 메모리 주소 레지스터(MAR, Memory Address Register) : 읽기와 쓰기 연산을 수행할 주기억장치의 주소를 저장한다.
  • 프로그램 카운터(PC, Program Counter) : 다음에 수행할 명령어의 주소를 저장한다.
  • 명령어 레지스터(IR, instruction register) : 현재 실행 중인 명령어를 저장한다.
  • 메모리 버퍼 레지스터(MBR, Memory Buffer Register) : 주기억장치에서 읽어온 데이터나 주기억장치에 저장할 데이터를 임시로 저장한다.
  • 누산기(AC, Accumulator) : 연산 결과를 임시로 저장한다.

 

참조 2.의 그림

 

 

 


 

 

2. 중앙처리장치의 동작 과정

 

산술 논리 연산 장치(Arithmetic and Logical Unit, ALU)는 연산코드, 피연산자 및 조건 코드를 받아서 결과를 낸다. 

 

 

아래 표는 4비트의 ALU 명령코드이다. add, sub등 산술연산도 있고, and, or 등 논리연산도 있는 것을 확인할 수 있다. 

 

동작순서 및 각 장치의 역할

참조 3의 그림

  1. 주기억장치가 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
  2. 중앙처리장치는 프로그램을 실행하기 위해서 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와서 처리하고 결과를 다시 주기억장치에 저장한다.
  3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 내보낸다.
  4. 제어장치는 1~3과정에서 명령어가 순서대로 실행될 수 있도록 각 장치를 제어한다.

 

 

동작 과정

주기억장치에서 불러오는 명령어는 연산 코드(OP Code) + 피연산자(Operand)로 구성된다. 연산코드는 실행할 연산을 말하는 것이고, 피연산자는 연산에 필요한 데이터나 데이터의 저장 위치를 뜻한다.

 

중앙 처리 장치는 프로그램을 실행하기 위해서 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행하는 과정을 반복한다. 한 번에 하나의 명령어를 인출하여 실행하는데 필요한 활동을 '명령어 사이클(Instruction Cycle)'이라고 한다.

 

 

 

명령어 사이클(CPU 4대 사이클)

 

 

인출 사이클(Fetch Cycle)

주기억장치에서 명령어를 인출하고, 다음 명령어를 인출하기 위해서 프로그램 카운터(PC, Program Countrer) 값을 증가시킨다.

 

참조 1.의 그림

작동순서는 다음과 같다. 이런 작은 사이클 내에서의 작동 과정을 마이크로 연산이라고 한다.

 

t_0 : 프로그램 카운터(PC)에 지정된 주소를 메모리 주소 레지스터(MAR)에 전달한다.

t_1 : MAR에 저장된 내용을 토대로 주기억장치의 주소에서 명령어를 인출한다. 메모리 버퍼 레지스터(MBR)에 저장한다. 다음 명령어를 인출하기 위해서 프로그램 카운터(PC) 값을 증가시킨다.

t_2 : 메모리 버퍼 레지스터(MBR)에 저장된 내용이 명령어 레지스터(IR)에 전달된다.

 

실행 사이클(execute cycle)

인출한 명령어를 해독하고 그 결과에 따라 제어 신호를 발생시켜 명령어를 실행한다. 인출 사이클은 명령어를 인출해오는 과정이기 때문에 동일한 마이크로 연산이 반복되지만, 실행 사이클은 명령어의 연산 코드마다 수행되는 마이크로 연산이 달라진다.

 

가장 간단한 덧셈 연산(ADD)의 실행 사이클에 대해 간단히 알아보자.

 

t_0 : 인출 사이클에서 IR에 저장된 명령어를 MAR로 가져오고, 기억장치에서 인출을 요청한다.

t_1 : 기억장치에 저장된 값을 MBR에 저장한다.

t_2 : 누산기(AC)에 이미 저장된 값과 ALU를 이용하여 연산을 진행한다.

 

간접 사이클(Indirect cycle)

간접 사이클은 Fetch와 execute 사이클의 중간단계라고 할 수 있다. 이 사이클은 fetch 단계에서 해석한 주소를 읽어왔는데, 그 주소가 간접 주소인 경우에 유효주소를 계산하기 위해서 거치는 사이클이다.

 

t_0 : MAR <- MBR, MBR에 있는 명령어의 번지 부분을 MAR에 전송한다.

t_1 : MBR <- M[MAR], 메모리에서 MAR가 지정하는 위치의 값을 MBR에 다시 전송한다.

t_2 : No Operation //정확히 모르겠으나, 아마 t_0 ~ t_3 간 다른 사이클과 같은 타이밍에 실행되는 과정 중, t_2에 해당될때는 아무런 연산이 일어나지 않는다는 내용으로 추측됨

t_3 : F <- 1, R <- 0, F에 1, R에 0을 전송하여 Execute 단계를 진행한다.

 

-> 유효주소

데이터가 저장된 기억장치의 실제 주소를 유효 주소라고 한다. 이런 유효 주소를 직접 지정하는 직접 주소 지정 방법 외에도 유효 주소를 지정하는 주소값을 만들고, 그것을 간접 사이클에 의해 다시 참조하는 간접 주소 지정 방법 등이 있다. 굳이 간접 주소 지정을 하는 이유는, 명령어의 비트 공간을 확보하기 위해서 주소 길이가 제한되는데 참조를 2번 하는 방식으로 마치 주소 공간을 2배로 가질 수 있도록하는 것이다.

 

(참조 6) 주소 지정 방식

즉시 주소 지정(Immediate addressing) , 직접 주소 지정(Direct addressing), 간접 주소 지정(Indirect addressing), 레지스터 주소 지정(Register Addressing), 변위 주소 지정(Displacement addressing), 스택 주소 지정(Stack addressing) 등이 있다.

 

 

인터럽트 사이클(Interrupt cycle)

CPU가 프로그램을 수행하는 동안 컴퓨터 시스템의 내부와 외부에서 발생하는 예기치 못한 사건이 있을 때 실행되는 사이클이다. CPU는 항상 인터럽트 요구가 있는지 검사한다. 만약 인터럽트 요구가 있다면 현재 수행 중인 프로그램의 주소 값인 PC 값을 특정 영역에 저장한 뒤, 인터럽트 프로세스를 진행한다. 인터럽트 요구가 끝나면, PC에 저장된 원래 진행하던 프로그램의 처리를 계속해서 수행한다.

 

t_0: MBR <- PC, 다음에 실행할 명령의 주소를 MBR의 주소 부분으로 전송한다.

PC <- 0, 복귀주소를 저장한 0번지를 PC에 저장한다.

t_1: MAR <- PC, PC가 가지고 있는 값의 0번지를 MAR에 전송한다.

PC <- PC + 1, 인터럽트 처리 위치를 지정하기 위해서 PC의 값을 증가시켜 1로 지정한다.

t_2: MAR <- MBR, 다음에 명령할 주소를 MAR가 가리키는 위치에 저장한다.

IEN <- 0, 인터럽트 단계가 끝날때까지 다른 인터럽트가 발생하지 않도록 IEN에 0을 전송한다.

*IEN(Interrupt Enable flip-flop) 인터럽트가 가능한 상태인지 저장하는 플립플롭

t_3: F <- 0, R <- 0, F에 0, R에 0을 전송하여 Fetch 단계로 변경한다.

 

 

 


참조

 

0. [책] 한 권으로 읽는 컴퓨터 구조와 프로그래밍

 

1. 안경잡이 개발자 - 중앙처리장치(CPU)의 작동 원리를 알아보자!

https://ndb796.tistory.com/7

 

2. 블랙박스 - 중앙처리장치(CPU)의 구성과 명령어 처리 과정 그리고 명령어 세트

https://edmblackbox.tistory.com/197

 

3. 안쓰던 블로그 - 컴퓨터구조-중앙처리장치(CPU) 구조, 동작과정

https://foxtrotin.tistory.com/144

 

4. 바블 블로그 - CPU 4대 사이클

https://blog.naver.com/PostView.nhn?blogId=kj9966&logNo=221136417397&parentCategoryNo=&categoryNo=20&viewDate=&isShowPopularPosts=true&from=search

 

5. 푸른 하늘의 해가 되자~!! 블로그 - 주소 지정 방식

https://m.blog.naver.com/PostView.naver?blogId=k97b1114&logNo=140157844146&referrerCode=0&searchKeyword=%EC%A3%BC%EC%86%8C%20%EC%A7%80%EC%A0%95%20%EB%B0%A9%EC%8B%9D

 

6. 바른 교육 정훈사 시험 정보의 모든 것 - 명령어와 주소지정-2

https://blog.daum.net/junghunsa/200

 

 

 

728x90
반응형