CPU 작동원리

김민성·2023년 3월 4일
0

Computer Architecture

목록 보기
2/6

연산 장치

  • 산술 연산, 논리 연산
  • 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보냄

제어 장치

: 명령어를 순서대로 실행

  • 주기억장치에서 명령어를 꺼내 해독
  • 결과에 따라 명령어 실행에 필요한 제어 신호를 기억 장치, 연산 장치, 입출력 장치로 보냄
  • 이들 장치가 보낸 신호를 받아 다음 수행 동작 결정

레지스터

: 고속 기억 장치

  • 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 임시 저장
  • 중앙처리장치 종류에 따라 사용할 수 있는 레지스터 개수 크기 다름
  • 용도에 따라 구분
    • 범용 레지스터 : 연산에 필요한 데이터나 연산 결과 임시 저장
    • 특수 목적 레지스터 : 특별한 용도로 사용

특수 목적 레지스터 중 중요한 것

  • MAR(메모리 주소 레지스터) : 읽기, 쓰기 수행할 주기억장치 주소 저장
  • PC(프로그램 카운터) : 다음에 수행할 명령어 주소 저장
  • IR(명령어 레지스터) : 현재 실행 중인 명령어 저장
  • MBR(메모리 버퍼 레지스터) : 주기억장치에서 읽어온 데이터/저장할 데이터 임시 저장
  • AC(누산기) : 연산 결과 임시 저장

CPU 동작 과정

  1. 주기억장치 : 입력장치에서 입력 받은 데이터/보조기억장치에 저장된 프로그램 READ
  2. CPU : 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어 READ, PROCESS 결과를 다시 주기억장치에 저장
  3. 주기억장치 : 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄
  4. 제어장치 : 1 ~ 3 과정에서 명령어가 순서대로 실행되도록 각 장치 제어

명령어 세트?

: CPU가 실행할 명령어 집합

  • 연산 코드 + 피연산자
  • 연산 코드 : 실행할 연산(연산, 제어, 데이터 전달, 입출력 기능)
  • 피연산자 : 필요한 데이터/저장 위치(주소, 숫자/문자, 논리 데이터)

CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독, 실행

→ 명령어 사이클 : 하나의 명령어를 인출하여 실행하는데 필요한 활동

→ 인출/실행/간접/인터럽트 사이클

주기억장치의 지정된 주소에서 하나의 명령어 가져옴 → 실행 사이클에서 명령어 실행 → 하나의 명령어 실행이 완료되면 그 다음 명령어 인출 사이클 시작

인출 사이클과 실행 사이클에 의한 명령어 처리 과정

: 인출 사이클에서 가장 중요한 부분은 PC값 증가

Fetch Cycle

T0 : MAR <- PC # 실행할 명령어의 주소를 MAR로 전달
T1 : MBR <- M[MAR], # MAR에 위치한 메모리 내용을 MBR로 전달, 
T1' : PC <- PC+1 # 다음 실행할 명령어를 위해PC 1 증가 
T2 : IR <- MBR # 메모리 내용을 IR 로 전달
T3 : F <- 1 or R <- 1 # F=1 이면 실행 사이클로, R=1 이면 간접 사이클로 진행

인출한 이후 명령어 실행 과정

Indirect Cycle

T0 : MAR <- MBR[ADDR] # MBR에 있는 주소를 MAR로 전송
T1 : MBR <- M[MAR] # 피연산자를 읽고, MAR위치 값을 MBR에 전송
T3 : F <- 0, R <- 0 # 1Cycle 명령이면 Fetch Cycle로 진행
T3' : F <- 1, R <- 0 # 실행 명령이면 Execute Cycle로 진행

이미 인출이 진행되고 명령어만 실행하면 되기 때문에 PC 증가 필요 X

IR에 MBR 값이 이미 저장된 상태를 의미함

따라서 AC에 MBR을 더해주기만 하면 됨

ISZ(Increment and Skip if Zero)

: 메모리의 값을 읽고 그 값을 1 증가시킨 후, 음수에서 시작한 그 값이 0이면 현재 명령을 건너뛰고 다음 명령으로 이동

T1 : MBR <- M[MAR]
T2 : MBR <- MBR + 1
T3 : M[MAR] <- MBR, if(MBR == 0) then (PC <- PC + 1)

Interrupt Cycle

MBR[ADDR] = PC # 리턴 번지를 MBR에 저장(상태 저장)
PC = 0
MAR = PC
PC = PC + 1
M[MAR] = MBR
IEN = 0

MBR[ADDR] <- PC, PC <- 0
MAR <- PC, PC <- PC + 1
M[MAR] <- MBR, IEN = 0
R <- 0 AND F <- 0

Fetch → Indirect → Execute → Interrupt

0개의 댓글