중앙처리장치(CPU) - 명령실행과 제어, 마이크로 오퍼레이션
- 명령어 실행을 위해 기본적으로 필요한 CPU 내부 레지스터
- 프로그램 카운터 (Program Counter; PC)
- 다음에 인출할 명령어의 주소를 가짐
- 명령어가 인출된 후 자동적으로 1 또는 명령어 길이만큼 증가
- 분기 명령어 실행 시 그 목적지 주소로 바뀜 - 명령어 레지스터 (Instruction Register; IR)
- 가장 최근에 인출된 명령어가 저장되어 있음 - 누산기 (Accumulator; AC)
- 데이터를 일시적으로 저장
- CPU가 한 번에 처리할 수 있는 데이터 비트 수, 즉 단어 길이와 같음 - 기억장치 주소 레지스터 (Memory Address Register; MAR)
- PC 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터 - 기억장치 버퍼 레지스터 (Memory Buffer Register; MBR)
- 기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽혀진 데이터를 일시적으로 저장하는 버퍼 레지스터
Q. 기억장치가 1024 워드(word)로 구성되어 있고, 각 워드는 16비트(bit)로 구성되어 있다고 가정할 때, PC, MAR, MBR의 비트수를 옳게 나타낸 것은?
1. PC:10, MAR:10, MBR:10
2. PC:10, MAR:10, MBR:16
3. PC:16, MAR:10, MBR:16
4. PC:16, MAR:16, MBR:16
-> 기억장치가 1024 워드로 구성되어 있다면 PC와 MAR는 10bit(2^10 = 1024, 10bit로 주소 구분 가능)일 것이고, MBR은 워드 크기인 16비트와 같습니다.
- 마이크로 오퍼레이션
- 프로그램은 여러 명령어 사이클을 수행
- 명령어 사이클은 인출 사이클, 간접 사이클, 실행 사이클, 인터럽트 사이클로 구성
- 각 사이클들은 마이크로 오퍼레이션으로 구성
- 마이크로 오퍼레이션은 각 사이클의 단계에서 실제 수행되는 동작으로 프로그램 수행에서 가장 기본 단위의 수행
- 인출 사이클 (fetch cycle)
- 기억장치의 지정된 위치로부터 명령어를 읽어오는 과정
t0 | MAR <- PC 현재의 PC 내용을 CPU 내부 버스를 통해 MAR로 보냄 |
t1 | MBR <- M[MAR], PC <- PC + 1 주소가 지정하는 기억장치로부터 읽혀진 명령어가 데이터 버스를 통해 MBR에 적재 PC의 내용에 1을 더하여 다음 명령어의 주소를 가리키게 함 |
t2 | IR <- MBR MBR에 저장되어 있는 명령어가 명령어 레지스터인 IR로 이동 |
- 실행 사이클 (execute cycle)
- 명령어를 실제적으로 실행하는 단계
- 데이터 이동 : CPU와 기억장치 또는 CPU와 I/O 장치 사이에 데이터를 이동 (LOAD)
t0 | MAR <- IR(addr) IR의 오퍼랜드(주소)를 MAR로 보냄 |
t1 | MBR <- M[MAR] 주소가 가리키는 기억장소로부터 데이터를 인출하여 MBR로 보냄 |
t2 | IR <- MBR MBR에 저장되어 있는 명령어가 명령어 레지스터인 IR로 이동 |
- 데이터 처리 : 데이터에 대해 산술 또는 논리연산을 수행 (ADD)
t0 | MAR <- IR(addr) IR의 오퍼랜드(주소)를 MAR로 보냄 |
t1 | MBR <- M[MAR] 주소가 가리키는 기억장소로부터 데이터를 인출하여 MBR로 보냄 |
t2 | AC <- AC + MBR 데이터와 AC의 내용을 더하고 결과를 다시 AC에 저장 |
- 데이터 저장 : 연산 결과 데이터 혹은 입력장치로부터 읽어들인 데이터를 기억장치에 저장 (STORE)
t0 | MAR <- IR(addr) 데이터를 저장할 기억장치의 주소를 MAR로 보냄 |
t1 | MBR <- AC 저장할 데이터를 MBR로 보냄 |
t2 | M[MAR] <- MBR MBR의 내용을 MAR이 지정하는 기억 장소에 저장 |
- 제어 : 프로그램의 실행 순서로 결정
t0 | PC <- IR(addr) 분기할 목적지의 주소가 PC로 적재 |
- 간접 사이클 (indirect cycle)
- 간접 주소를 사용할 경우 실행 사이클이 시작되기 전에 유효주소를 기억장치로부터 읽어와 IR의 오퍼랜드에 저장
- 인출 사이클과 실행 사이클 사이에 위치
t0 | MAR <- IR(addr) 명령어의 오퍼랜드를 MAR로 보냄 |
t1 | MBR <- M[MAR] MAR이 가리키는 기억장치의 내용(데이터의 실제 주소)를 MBR로 보냄 |
t2 | IR(addr) <- MBR 데이터의 실제 주소를 명령어의 오퍼랜드에 넣음 |
- 인터럽트 사이클 (interrupt cycle)
- CPU는 한 명령어의 실행 사이클을 종료하고 다음 명령어를 위한 인출 사이클을 시작하기 전에 인터럽트 요구 신호가 대기 중인지를 검사
- 인터럽트 요구가 들어왔다면 현재의 명령어 실행을 끝내고, 다음에 실행할 명령어의 주소(PC)를 스택에 저장
- 인터럽트 서비스 루틴을 호출하기 위해 루틴의 시작주소에 PC를 적재! 시작주소는 인터럽트를 요구한 장치로부터 전송되거나 미리 정해진 값으로 결정
t0 | MBR <- PC 주프로그램에서 수행될 다음 명령어의 주소를 MBR로 전송 |
t1 | MAR <- SP, PC <- ISR(인터럽트 서비스 루틴)의 시작 주소 SP(stack pointer)의 내용을 MAR로 전송 PC의 내용은 인터럽트 서비스 루틴의 시작주소로 변경 |
t2 | M[MAR] <- MBR MBR에 저장되어 있던 원래 PC의 값(복귀주소)을 스택에 저장 |
- 마이크로 오퍼레이션 사이클 타임
- 동기 고정식
: 마이크로 오퍼레이션 사이클 타임 중에서 수행시간이 가장 긴 것으로 CPU Clock 주기를 정하는 방식
: 마이크로 오퍼레이션 사이클 타임이 모두 같으므로 제어기를 구현하기 쉬움
: 마이크로 오퍼레이션 사이클 타임이 현저한 차이가 날 때 시간 낭비가 생김
- 동기 가변식
: 마이크로 오퍼레이션 사이클 타임이 현저한 차이가 날 때 수행시간이 유사한 것끼리 모아서 하나의 군을 만들고, 그 군에 대하여 서로 다른 마이크로 사이클 타임을 주는 방식
: 마이크로 오퍼레이션 사이클 타임이 현저한 차이가 날 때 동기 고정식보다 시간 낭비를 줄일 수 있음
: 제어기가 조금 복잡하므로 제어기 설계가 조금 어려움
- 비동기식
: 원하는 만큼의 cycle time을 각각 할당하는 방법
: CPU 시간의 낭비는 발생하지 않으나 제어가 복잡하므로 거의 사용되지 않음
※ 참고
2024.01.22 - [CS/컴퓨터구조] - 중앙처리장치(CPU) - 제어장치
중앙처리장치(CPU) - 제어장치
중앙처리장치의 구성요소와 역할 - 산술 논리 연산장치 (ALU) : 각종 연산을 실행 - 레지스터 세트 : 데이터를 임시 저장하는 기능 수행 - 제어 장치 : 명령을 해독하고 제어신호를 발생하여 제어
mangs2e.tistory.com
2024.01.23 - [CS/컴퓨터구조] - 중앙처리장치(CPU) - 연산장치, 인터럽트
중앙처리장치(CPU) - 연산장치, 인터럽트
연산장치 - 제어장치의 지시에 따라 사칙연산과 수식의 참, 거짓을 판단하는 논리 연산을 수행하는 장치 - 누산기, 가산기, 데이터 레지스터, 상태 레지서트 등으로 구성 - 상태 레지스터의 상태
mangs2e.tistory.com