CS(Computer Science)/Computer Science

중앙처리장치 작동 원리

환성 2023. 1. 4. 22:56
728x90

 

 

중앙처리장치(CPU)는 크게 연산장치, 제어장치, 레지스터 3가지로 구성되어 있다.

연산 장치

  • 산술, 논리연산을 수행한다.
    • 산술 연산 : 덧셈, 뺄셈
    • 논리 연산 : AND, OR , XOR
  • 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보낸다.

제어 장치

  • 명령어를 순서대로 실행할 수 있도록 제어하는 장치
  • 주기억장치에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄
  • 또한 이들 장치가 보낸 신호를 받아, 다음에 수행할 동작을 결정함
  • 내부 구성
    • 기억장치 버퍼 레지스터, 기억장치 주소 레지스터, 명령 레지스터, 명령 해독기, 프로그램 카운터

레지스터

  • 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장
  • 용도에 따라 범용 레지스터, 특수 목적 레지스터로 구분된다.
  • CPU에 따라 사용할 수 있는 레지스터 개수와 크기가 다르다.
  • 범용 레지스터
    • 연산에 필요한 데이터나 연산 결과를 임시로 저장
  • 특수목적 레지스터
    • 특별한 용도로 사용하는 레지스터

 

범용 목적 레지스터

ECX 반복문에서 카운터로 사용
EDX EAX와 함께 사용되어 연산을 보조
EBX 메모리 주소를 저장
EDI 문자열 연산에서 사용되는 목적 주소를 저장
ESP 스택의 제일 윗부분의 주소를 저장
EBP 스택의 제일 아랫부분의 주소를 저장
ESI 문자열 연산에서 사용되는 원본 주소 저장
R8~R15 64비트에서 추가된 레지스터, 다양한 용도로 사용

 

  • CPU가 발달함에따라 32비트에서는 (=DWORD) CPU에서는 E, 64비트에서는(=QWORD) CPU에서는 R을 붙여 각각 EAX, RAX와 같은 이름을 사용하게 되었다.

특수 목적 레지스터

프로그램 카운터(PC) 다음 인출할 명령어 주소를 가진 레지스터
누산기(AC) 연산 결과를 임시로 저장하는 레지스터
명령어 레지스터(IR) 가장 최근에 인출된 명령어가 저장된 레지스터
기억 장치 주소 레지스터(MAR) CPU가 메모리에 데이터를 읽거나 쓰일 데이터를 일시적으로 저장하는 레지스터
데이터 레지스터(DR) 메모리에서 읽어온 데이터를 저장하는 레지스터
상태 레지스터(SR) 산술 연산의 결과 상태를 알려주는 레지스터

 

CPU의 동작 과정

  • 명령어 인출 사이클
    1. 명령어 인출(Instruction Fetch) : 메모리부터 명령어를 읽어온다.
  • 명령어 실행 사이클
    1. 명령어 해독(Instruction Decode) : 인출할 명령어를 해독하고, 수행할 동작을 결정한다.
    1. 데이터 인출(Data Fetch) : 연산을 위해 필요한 데이터가 있을 경우 데이터의 주소와 데이터를 인출한다.
    1. 데이터 처리(Data Process) : 산술 또는 논리 연산을 실행하여 데이터를 처리한다.
    1. 데이터 저장(Data Store) : 결과값을 메모리에 저장한다.

 

명령어 세트

  • CPU가 실행할 명령어 집합
  • 연산 코드(실행할 연산) + 피연산자(필요한 데이터 or 저장 위치)
  • CPU가 주기억장치에서 한번에 하나의 명령어를 인출하여 실행하는데 필요한 활동을 명령어 사이클이라고 한다.
  • 인출/실행/간접/인터럽트 사이클로 나누어진다.
  • 주기억장치의 지정된 주소에서 하나의 명령어를 가져오고, 실행 사이클에서는 명령어를 실행함. 하나의 명령어 실행이 완료되면 그 다음 명령어에 대한 인출 사이클 시작한다.

 

인출 사이클

T0: MAR <- PC   // PC에 저장된 주소를 MAR로 전달 
T1: MBR <- M[MAR], PC <- PC + 1 // 인출할 명령어를 MBR에 저장, 다음 명령어 인출을 위해 PC값 증가 
T2: IR <- MBR // MBR에 저장된 내용을 IR에 전달

 

실행 사이클

데이터 이동 : LOAD addr

  • 우선 IR에 저장된 명령어의 주소값을 MAR을 통하여 기억장치로 보내 데이터를 인출한다.
  • 이 명령어 수행시, 기억장치에 저장되어 있던 데이터를 AC로 이동하게 된다.

데이터 처리 : ADD addr

  • ADD는 AC에 있는 값과, 기억장치로부터 불러온 새로운 값을 더하여 그 값을 다시 AC에 저장한다.

데이터 저장 : STA addr

  • 먼저 LOAD처럼 IR에 저장된 명령어 주소값을 MAR에게 전달한 후 , AC에 저장되어 있던 데이터를 MBR로 가져온다.
  • 이후, MBR로 가져온 데이터를 기억장치의 addr번지에 저장시켜준다.

프로그램 제어 : JUMP addr

  • 실행 사이클에서는 addr를 PC에 적재만 하면 된다.
// LOAD addr 
T0: MAR <- IR(addr)
T1: MBR <- M[MAR] 
T2: AC <- MBR  

// ADD addr 
T0: MAR <- IR(addr) 
T1: MBR <- M[MAR]
T2: AC <- AC + MBR  

// STA addr 
T0: MAR <- IR(addr) 
T1: MBR <- AC 
T2: M[MAR] <- MBR 

// JUMP addr 
T0: PC <- IR(addr)

 

'CS(Computer Science) > Computer Science' 카테고리의 다른 글

패리티 비트 & 해밍 코드  (0) 2023.01.14
고정 소수점, 부동 소수점  (0) 2023.01.05
캐시 메모리  (0) 2023.01.05
컴퓨터의 구성  (0) 2023.01.04