2.1 ~ 2.3 CPU의 구조와 기능
cpu의 기능
- 프로그램 수행
- 명령어 인출(Instruction Fetch) - 메모리에서 IR로
- 명령어 해독(Instruction Decode)
- 명령어 인출/해독은 모든 명령어에 대하여 공통적으로 수행
- 데이터 인출(Data Fetch)
- 데이터 처리(Data Process)
- 데이터 쓰기(Data Store)
- 데이터 인출/처리/쓰기는 명령어에 따라 필요한 경우에만 수행
CPU의 기본 구조
ALU (산술논리연산창치)
- 각종 산술/논리 연산들을 수행하는 회로들로 이루어진 하드웨어
레지스터 세트
- CPU 내부 레지스터들의 집합
- 컴퓨터 기억장치들 중에서 액세스 속도가 가장 빠름 (액세스 : 읽고 쓰는 행위 - 접근)
제어 유니트 (control unit)
- 명령어를 해석하고 실행하기 위한 제어 신호들을 순차적으로 발생하는 하드웨어 모듈
- 명령어 실행에 필요한 정보들의 전송 통로와 방향 지정
- cpu 내부 요소 ↔ 시스템 구성 요소들의 동작 시간 결정
CPU 내부 버스
- alu - 레지스터 사이의 데이터 선, 제어 유니트로 발생되는 제어 신호 선
- 외부의 시스템 버스와 직접 연결 X, 반드시 버퍼 레지스터/시스템 버스 인터페이스 회로를 통하여 시스템 버스와 접속
명령어 실행
명령어 사이클
cpu가 한 개의 명령어를 실행하는데 필요한 전체 처리과정
- 프로그램 실행을 시작한 순간부터 전원을 끄거나, 회복 불가능 오류 발생하여 중단될 때까지 반복
기본 명령어 사이클
- 인출 사이클 : cpu가 기억장치로부터 명령어를 읽어오는 단계
- 실행 사이클 : 명령어를 실행하는 단계 (명령어 해독, 연산 수행)
- 간접 사이클, 인터럽트 사이클 필요 시 있음
- 인출 → 간접 → 실행 → 인터럽트
명령어 실행에 필요한 CPU 내부 레지스터들
프로그램 카운터 (Program Counter : PC)
- 다음에 인출할 명령어의 주소를 가진 레지스터
- 명령어 인출 후, 자동으로 일정 크기만큼 증가(다음 명령어로)
- 순차적이 아닌, 분기(branch) 명령어가 실행 시 목적지 주소로 갱신
누산기 (Acumulator : AC)
- 데이터를 임시적으로 저장
- 레지스터 크기 : cpu가 한번에 처리할 수 있는 데이터 비트 수
명령어 레지스터 (Instruction Register : IR)
- 가장 최근에 인출된 명령어가 저장된 레지스터
메모리 주소 레지스터 (MAR)
- PC의 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터
메모리 버퍼 레지스터 (MBR)
- 기억장치에 저장할 데이터, 기억장치에서 읽은 데이터를 일시적으로 저장하는 버퍼 레지스터
인출 사이클
메모리에 저장된 명령어를 인출
- PC → MAR : PC의 내용을 CPU내부 버스를 통하여 MAR로 전송
- M[MAR] → MBR, PC = PC +1 : 주소, 데이터 버스를 이용해서 주소가 지정하는 기억장치 위치로부터 읽혀진 데이터가 MBR로 적재, 동시에 PC값 증가(다음 명령어로)
- MBR → IR : MBR에 있는 명령어 코드가 IR로 이동
실행 사이클
명령어 코드를 해독하고, 필요한 연산들을 수행
연산의 종류
- 데이터 이동 : cpu ↔ 기억장치, cpu ↔ io 장치
- 데이터 처리 : 데이터에 대한 산술/논리 연산 수행
- 데이터 저장 : 연산 결과 및 입력장치에서 읽은 데이터를 기억장치에 저장
- 제어 : 프로그램 실행 순서 결정
가상 cpu 명령어 형식 정의
연산코드 : cpu가 수행할 연산 지정
오퍼랜드 : 명령어 실행에 필요한 데이터/데이터의 주소가 저장된 주소
LOAD addr 명령어 (데이터 이동)
기억장치에 저장된 데이터를 AC로 이동하는 명령어
- IR(addr) → MAR : IR에 있는 명령어 주소 부분을 MAR로 전송
- M[MAR] → MBR : 그 주소가 지정한 기억장소에서 데이터를 인출하여 MBR로 전송
- MBR → AC : 데이터를 AC에 적재
STA addr 명령어 (데이터 저장)
AC 레지스터의 내용을 기억장치에 저장하는 명령어
- IR(addr) → MAR : IR에 있는 데이터를 저장할 주소를 MAR로 전송
- AC → MBR : 저장할 ****데이터를 MBR로 이동
- MBR → M[MAR] : MBR의 내용을 MAR이 지정하는 기억장소에 저장
ADD addr 명령어 (데이터 처리)
기억장치에 저장된 데이터를 AC의 내용과 더하고, 다시 AC에 저장하는 명령어
- IR(addr) → MAR : 주소를 MAR로 전송
- M[MAR] → MBR : 데이터를 인출하여 MBR에 적재
- AC ← AC + MBR : 그 데이터와 AC의 내용을 더하고(ALU가 해줌) 결과를 다시 AC에 저장
JUMP addr 명령어
addr이 가리키는 위치의 명령어로 실행순서를 변경하는 분기(branch) 명령어
- IR(addr) → PC : 명령어의 오퍼랜드(분기 목적지 주소)가 PC에 저장
인터럽트 사이클
인터럽트 : 다른 모듈들이 프로세서의 정상적 처리를 중단할 수 있는 메커니즘 → 처리 효율 향상
종류 : Program, Timer, I/O, Hardward failure
인터럽트 종류
인터럽트 사이클
- 프로그램 실행 중, CPU의 현재 처리 순서를 중단, 다른 동작 수행
- 외부로부터 인터럽트 요구가 들어오면
- cpu는 원래 프로그램 수행 중단, 요구된 인터럽트를 위한 서비스 프로그램 수행
- 인터럽트 서비스 루틴(ISR) : 인터럽트를 처리하기 위해 수행하는 프로그램 루틴
인터럽트 처리
인터럽트가 들어왔을 때 CPU는
- 어떤 장치가 요구했는지 확인 후, 해당 ISR 호출
- ISR 종료 후, 중단되었던 원래 프로그램 수행
CPU의 인터럽트 처리 동작
- 현재 명령어 실행 중단
- 실행 context저장 : 실행할 명령어의 주소(PC값), 프로세서의 현재 동작과 관련된 데이터(레지스터 값)을 스택에 저장
- ISR 호출 및 실행
- ISR 종료 후, 스택에 저장된 context를 cpu에 복원
인터럽트 사이클
- PC → MBR : pc의 내용의 MBR로 전송
- SP(stack pointer) → MAR, ISR의 시작주소 → PC : sp의 내용이 MAR로 전송, pc는 ISR의 시작 주소로 변경
- MBR → M[MAR] : MBR에 저장되어 있던 원래 PC 내용이 스택에 저장
다중 인터럽트
ISR 수행 도중 다른 인터럽트가 발생하는 것
처리 방법
- 인터럽트 불가능(순차적 인터럽트 처리)
- 새로운 인터럽트가 들어와도 ISR을 수행하지 않도록 방지
- 우선순위에 의한 인터럽트 처리 (Nested 인터럽트 처리)
- 우선순위에 다라 인터럽트 처리 → 스택에 중단된 ISR주소도 추가 저장
간접 사이클
오퍼랜드에 데이터가 저장된 기억장치 주소가 포함
간접 주소지정 방식
- 명령어에 포함된 주소 공간(오퍼랜드)에 명령어 실행에 필요한 데이터가 저장된 기억장치의 주소를 지정하는 경우
- 해당 기억장치의 주소를 사용하여 데이터 인출 → 간접 사이클
실행 사이클 이전에 수행
- 인출 사이클, 실행 사이클 사이에 위치
- 인출 → 간접 → 실행 → 인터럽트
- IR(addr) → MAR : 오퍼랜드 부분을 MAR로 전송
- M[MAR] → MBR : 주소가 가리키는 기억장소에서 다시 데이터의 실제 주소를 가져와 MBR에 적재
- MBR → IR(addr) : MBR에서 데이터의 실제 주소를 다시 IR의 주소 필드에 저장
명령어 파이프 라이닝
cpu처리 속도를 높이기 위하여 cpu 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술
- 이론상 단계의 배수만큼 속도가 증가
2-단계 명령어 파이프 라인 : 인출, 실행 단계를 독립적인 파이프 라인 모듈들로 분리 (명령어 선인출)
문제점 : 두 단계의 처리 시간이 같지 않으면 두 배의 속도 향상 불가
4 - 단계 명령어 파이프 라인
- 명령어 인출, 명령어 해독, 오퍼랜드 인출, 실행
파이프 라인에 의한 실행 시간/속도 향상
- 파이프 라인 단계 수 = $k$
- 실행할 명령어들의 수 = $N$
파이프 라인에 의한 전체 명령어 실행 시간 : T
$T = k + (N -1)$
파이프 라인이 되지 않은 경우 전체 명령어들의 실행 시간 : T
$T = k \times N$
속도 향상 $S_p = \frac{k \times N}{k+(N-1)}$
문제점 (성능 저하 요인)
- 모든 명령어들이 파이프라인 단계 모두를 거치지 않음
- 파이프라인 클럭은 처리 시간이 가장 오래 걸리는 단계가 기준
- IF(명령어 인출) 단계와 OF(오퍼랜드 인출)단계가 동시에 기억장치 액세스 시 → 기억장치 충돌(지연)
- 조건 분기 명령어 실행 또는 인터럽트 발생 시 → 미리 인출해 처리하던 명령어 무효화
- 처리 방법 : 분기 목적지 선인출, 루프 버퍼 사용, 분기 예측, 지연 분기(분기 위치 재배치)
상태 레지스터
- 조건 분기 명령어에서 사용하는 조건들을 저장하는 cpu 내부의 레지스터
- 조건 분기 명령어가 지정하는 조건 비트 값을 검사하여 조건 분기 결정
- 조건 플래그들
- 부호 플래그 (S) - 0은 양수, 1은 음수
- 제로 플래그 (Z) - 결과값이 0 이면 1로 세트
- 올림수 플래그 (C) - 올림수, 빌림수가 발생시 1로 세트
- 동등 플래그 (E) - 비교값이 같으면 1로 세트
- 오버플로우 플래그 (V) - 오버플로우 발생 시 1로 세트
- 인터럽트 플래그 (I) - 인터럽트 가능 시 1로 세트
- 슈퍼바이저 플래그 (P) - 슈퍼바이저 모드면 1, 사용자 모드면 0
슈퍼 스칼라
cpu의 처리 속도 향상을 위해서 내부에 2개 이상의 명령어 파이프라인을 포함시킨 구조 → ex) 2단계 파이프라인이 2개 이상 존재
- 이론상 파이프라인 수 만큼 속도 향상 가능
- 파이프 라인의 수 = $m$ → $m$-way 슈퍼 스칼라
문제점/해결책
- 명령어들 간의 데이터 의존 관계 → 명령어 실행 순서 재배치
- 하드웨어(ALU, 레지스터 등) 이용에 대한 경합 발생 → 하드웨어 추가 설치
멀티 코어
CPU 코어 : ****명령어 실행에 필요한 CPU 내부의 핵심 하드웨어 모듈
- 각 코어는 별도의 H/W 모듈로, 시스템 버스와 캐시만 공유
- 프로그램 실행에 있어 각 코어는 슈퍼스칼라보다 더 높은 독립성을 가짐 → 멀티 태스킹/ 멀티 스레딩
'학교 공부 정리 > 컴퓨터 구조' 카테고리의 다른 글
2.4 명령어 세트 (0) | 2022.10.27 |
---|---|
1. 컴퓨터 시스템 개요 (1) | 2022.10.25 |