일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- react
- MySQL
- MSA
- 디자인 패턴
- JPA
- Heap
- JavaScript
- 네트워크
- Kafka
- IT
- 운영체제
- Galera Cluster
- 파이썬
- mongoDB
- design pattern
- spring webflux
- Data Structure
- 백준
- Java
- 자바
- C
- c언어
- redis
- 자료구조
- Algorithm
- 컴퓨터구조
- Spring
- Proxy
- 알고리즘
- OS
Archives
- Today
- Total
시냅스
CPU의 구조와 기능 본문
CPU가 수행하는 동작들
- 명령어 인출 Instruction fetch
- 명령어 해독 Instruction decode
- 위 두 항목은 무조건 수행
- 데이터 인출 Data fetch
- 데이터 처리 Data process (산술적 연산)
- 데이터 저장 Data store
- 위 세 항목은 선택적 수행
CPU 기본 구조
- 산술논리연산장치 Arithmetic and Logical Unit : ALU
- 사칙연산
- 논리연산 (And, or, not...etc)
- 레지스터 세트 Register set
- CPU 내부에 있는 가장 빠른 저장장치
- CPU 가 임시로 저장하는 공간
- 특수목적/일반목적 레지스터
- 제어 유니트 Control unit
- 인출된 명령어를 해독하고 제어 신호를 발생시키는 유니트
- CPU 내부 버스
- CPU의 내부 버스는 외부의 시스템 버스와 직접적으로 연결되지 않는다.
- 버퍼 레지스터 혹은 시스템 버스 인터페이스 회로를 통해 시스템 버스와 연결
명령어 실행
- 명령어 사이클 Instruction cycle
- CPU가 한 개의 명령어를 실행하는 데 필요한 전체 과정
- 인출(fetch) 사이클
- 기억장치로 부터 명령어를 읽어오는 단계
- 실행(excution) 사이클
- 인출된 명령어를 실행하는 단계
- 인출(fetch) 사이클
- CPU가 한 개의 명령어를 실행하는 데 필요한 전체 과정
- 명령어 실행에 필요한 CPU 내부 레지스터
- 프로그램 카운터 PC : Program Counter
- 다음에 인출될 명령어의 주소
- 누산기 AC : Accumulater
- CPU 내 데이터를 일시적으로 저장
- 명령어 레지스터 IR : Instruction Register
- 가장 최근에 인출된 명령어를 보관해서 저장한다.
- 기억장치 주소 레지스터 MAR : Memory Address Register
- PC의 명령어 주소가 시스템 주소버스에 출력되기 전에 일시적으로 저장한다.
- 기억장치 버퍼 레지스터 MBR : Memory Buffer Register
- 데이터 버스와 직접 접속
- 기억장치에 저장, 읽어올 데이터가 CPU 내부에서 일시적으로 저장되는 레지스터
- 프로그램 카운터 PC : Program Counter
- 인출 사이클 fetch cycle
- CPU가 기억장치의 지정된 위치로부터 명령어를 읽어오는 과정
- 마이크로 연산 micro operation
- CPU 클록의 각 주기 동안 수행되는 기본적인 동장
- 인출 사이클 단계별 마이크로 연산
- t0 : MAR <- PC
- t1 : MBR <- M[MAR], PC <- PC + 1
- t2 : IR <- MBR
- 실행 사이클 excution cycle
- CPU가 명령어를 해독하고 그 결과에 따라 필요한 연산들을 수행
- CPU가 수행하는 연산 종류
- 데이터 이동
- 데이터 처리
- 데이터 저장
- 프로그램 제어
- LOAD addr
- t0 : MAR <- IR(addr)
- t1 : MBR <- M[MAR]
- t2 : AC <- MBR
- STA addr (store)
- t0 : MAR <- IR(addr)
- t1 : MBR <- AC
- t2 : M[MAR]<- MBR
- ADD addr
- t0 : MAR <- IR(addr)
- t1 : MBR <- M[MAR]
- t2 : AC <- AC + MBR
- 인터럽트 사이클 Interrupt cycle
- 인터럽트 요구가 들어왔는지 검사하고, 그처리에 필요한 동작들을 수행하는 과정
- 인터럽트
- 프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 요구하는 시스템 동장
- 인터럽트 서비스 루틴 ISR
- 인터럽트 요구를 처리해주기 위해 수행하는 프로그램 루틴
- 간접 사이클 Indirect cycle
- 실행 사이클에서 사용될 데이터의 실제 주소를 기억장치로부터 읽어오는 과정
- 간접 주소지정 방식에서 사용
- 인출 사이클과 실행 사이클 사이에 위치
명령어 파이프라이닝
- 명령어 실행에 사용되는 하드웨어를 여러 단계로 분할하여 처리속도를 높여주는 기술
- 2단계 명령어 파이프라이닝
- 4단계 명령어 파이프라이닝
- RISC에서 주로 쓰이는 기법
- CISC에서는 VLIW 사용
2단계 명령어 파이프라인 시간 흐름
- 명령어의 길이를 클록 주기에 맞춤
- 명령어가 실행되는 동작 시간을 클록 주기에 맞춤
- 이론적으론 2배이나, 현실적으로 적용되지 않음
4단계 명령어 파이프라인 시간 흐름
- 명령어 인출 IF : Instruction fetch
- 명령어 해독 ID : Instruction decode
- 피연산자 인출 OF : operand fetch
- 실행 EX : excute
슈퍼스칼라 Superscalar
- 한번에 처리하는 양을 늘린다
- 프로세스 내 ALU를 여러개 배치하여 한 개 이상의 명령어가 동시에 수행
VLIW Very Large Instruction Word
- 동시에 실행할 수 있는 명령어들을 컴파일러가 찾아서 하나의 명령어로 압축
- 실행할 때는 여러개의 ALU가 분산해서 실행
Pipeline Hazard
- Structural hazard
- 명령어 두 개 이상이 동시에 같은 프로세서 하드웨어에 요청할 때
- Data hazard
- 두 번째 명령어의 결과가 첫 번째 명령어에 의존성이 있는 경우
- Control hazard
- 프로세스가 분기 명령어를 만났을 때 나머지 명령어를 버리는 경우
명령어 세트
- 어떤 CPU를 위해 정의되어 있는 명령어들의 집합
- 명령어 세트 설계를 위한 결정 사항
- 연산 종류 operation repertoire
- 데이터 전송
- 레지스터와 레지스터 간 레지스터와 기억장치 간 또는 기억장치와 기억장치 간에 데이터를 이동하는 동작
- 사칙 연산
- 논리 연산
- 입출력 I/O
- CPU와 외부 장치들 간의 데이터 이동을 위한 동작
- 프로그램 제어 : 명령어 실행 순서를 변경하는 연산
- 분기
- 서브루틴 호출
- CALL
- RET
- 데이터 전송
- 데이터 유형 data type
- 명령어 형식 instruction format
- CISC Complex Instruction Set Computer
- 다음 세대가 나올 때마다 명령어 개수 추가
- 명령어의 길이가 가변적
- 명령어 개수가 많다
- RISC Reduced Instruction Set Computer
- 명령어 세트를 단순화
- 단순한 여러가지 명령어를 조합
- 명령어의 길이가 고정됨
- CISC Complex Instruction Set Computer
- 주소지정 방식 addressing mode
- 직접 주소지정 방식
- 간접 주소지정 방식
- 묵시적 주소지정 방식
- 즉시 주소지정 방식
- 레지스터 주소지정 방식
- 레지스터 간접 주소지정 방식
- 변위 주소지정 방식
- 상대 주소지정 방식
- 인덱스 주소지정 방식
- 베이스-레지스터 주소지정 방식
- 명령어 구성요소
- 연산 코드 operation code
- 수행될 연산을 지정
- 오퍼랜드 operand
- 연산을 수행하는 데 필요한 데이터 혹은 데이터의 주소
- 다음 명령어 주소 next instruction address
- 현재의 명령어 실행이 완료된 후에 다음 명령어를 인출할 위치
- 연산 코드 operation code
- 연산 종류 operation repertoire
컴퓨터 산술과 논리 연산
산술논리연산장치 Arithmetic and Logical Unit ALU
- CPU 내부의 핵심 구성요소로서, 산술 연산과 논리 연산을 수행하는 하드웨어 모듈
- ALU의 구성요소
- 산술 연산장치
- 논리 연산장치
- AND
- OR
- XOR
- NOT
- 선택적-세트 연산
- 특정 비트를 1로 셋
- 선택적-보수 연산
- 특정 비트들을 보수화
- 마스크 연산
- 특정 비트들을 0으로 리셋
- 삽입 연산
- 일부 비트들을 새로운 값들로 대체
- 비교 연산
- 시프트 레지스터 shirt register
- 논리적 시프트 logical shift
- 왼쪽 오른쪽으로 이동
- 순환 시프트 circular shift
- 논리적 시프트와 같지만 최상위 혹은 최하위 비트를 반대편 끝으로 이동
- 산술적 시프트 arithmetic shift
- 부호를 가진 데이터에 대한 시프트 동작
- C 플래그를 포함한 시프트 연산
- 실제 CPU에서는 일반적으로 시프트 연산에 올림수(C) 플래그가 포함
- 논리적 시프트 logical shift
- 보수기 complementer
- 상태 레지스터 status register
- 연산 결과의 상태를 flag로 저장
정수의 표현
- 2진수 체계 : 0, 1, 부호 및 소수점으로 수를 표현
- 부호 비트
- 음수 표현 방법
- 부호화-크기 표현
- 1의 보수 표현
- 모든 비트 반전
- 2의 보수 표현
- MSB -> sign bit
- 1과 0을 반전한 값에 1을 더함
- 음수 표현 및 쉬운 연산을 위함
- 보수를 취하고 더하면 뺄셈이 됨
- 실제로 사용
제어 유니트 Control Unit
- 명령어 코드의 해동
- 명령어 실행에 필요한 제어 신호들의 발생
명령어 사이클 제어
- 마이크로명령어 (microinstruction), 제어 단어 (control word)
- 명령어 사이클의 각 주기에서 실행되는 마이크로-연산들에 대응되는 비트들로 이루어진 단어
- 마이크로프로그램 microprogram
- 마이크로 명령어들의 집합
- 루틴 routine
- CPU의 특정 기능을 수행하기 위한 마이크로 프로그램
제어 유니트의 구조
- 명령어 해독기 instruction decoder
- 명령어의 연산코드 OP code만 해독해서 연산을 수행하기 위한 루틴의 시작 주소 지정
- 제어 주소 레지스터 CAR : control address register
- 다음에 수행할 제어유니트 안의 마이크로 명령어의 주소를 저장하기 위한 레지스터
- 제어 기억장치의 위치를 가리킴
- 제어 기억장치 control memory
- 마이크로 프로그램을 저장하는 제어 유니트 내부의 기억 장치
- 제어 버퍼 레지스터 CBR control buffer register
- MBR 처럼 제어 기억장치로 부터 읽혀진 마이크로 명령어를 저장하기 위한 레지스터
- 서브루틴 레지스터 SBR subroutine register
- 마이크로 프로그램에서 서브 루틴이 호출되는 경우에 CAR의 내용을 일시적으로 저장하는 레지스터
- 순서제어 모듈 sequencing module
- 마이크로 명령어의 실행 순서를 결정하는 회로
CPU 명령어 세트 설계
- 명령어들의 종류 및 비트 패턴 정의
- 명령어들의 실행에 필요한 하드웨어 설계
- 각 명령어를 위한 실행 사이클 루틴 작성 (마이크로프로그래밍)
- 마이크로프로그램은 CPU 설계 단계에서 확정되고, 그 후에는 변하지 않음
- 마이크로프로그램을 저장하는 제어 기억장치는 ROM으로 만들어져 CPU 칩 내에 포함
제어 기억장치의 내부 구성
- 128 word CPU
- 처음 절반, 64 까지는 공통 루틴
- 뒷부분은 인출한 코드에 따라 루틴을 저장
연산 코드를 이용한 루틴 주소의 사상
- IR로 적재된 명령어 비트 중 명령어 코드 OPcode만 제어 유니트의 해독기로 들어온다.
- 해당하는 루틴을 수행하면서 실행된다.
- 연산 코드 = 0001 -> 실행 사이클 루틴의 시작 주소 = 1000100 (68)
- 연산 코드 = 0110 -> 실행 사이클 루틴의 시작 주소 = 1011000 (88)
'컴퓨터구조' 카테고리의 다른 글
컴퓨터구조 기억장치의 분류와 특성 (0) | 2022.08.05 |
---|---|
ARM (Adavanced RISC Machine) 이란? (0) | 2022.07.17 |
컴퓨터 구조 기초 (0) | 2022.07.10 |
명령어: 컴퓨터 언어 (0) | 2022.07.02 |
컴퓨터 추상화 및 관련 기술 (0) | 2022.06.13 |
Comments