CPU & 마이크로프로세서
마이크로프로세서
- 컴퓨터에서 명령을 수행하고 데이터를 처리하는 CPU를 집적회로의 칩 형태로 만든 것
폰 노이만 컴퓨터 구조
- 프로그램 내장 방식
- 데이터와 명령어가 주기억장치에 저장되어 있다가 버스를 통해서 CPU로 전달
- CPU는 전달되어 온 명령어를 이용하여 데이터를 사용자가 원하는 형태로 처리
- 결과는 다시 데이터 버스를 통해서 주기억장치 RAM으로 보냄
머신 사이클
- 프로그램을 구성하는 명령어는 CPU에서 4단계의 과정을 통해서 수행 → 머신 사이클
- ① 인출(Fetch) 사이클: 필요한 명령어를 주기억장치에서 불러오는 사이클
- ② 해독(Decode) 사이클: 호출된 명령어를 해석하는 사이클
- ③ 실행(Execute) 사이클: 해석된 명령어를 산술논리연산장치를 통해 실행
- ④ 저장(Store) 사이클: 수행결과를 주기억장치에 저장하는 사이클
클록 속도
- 클록 속도(클록 주파수): 1초에 클록이 몇 번 발생하는지를 나타낸 것, 단위 Hz
- 주회로기판에 장착되어 있는 클록 발생기가 만들어 냄
- 클록 수가 높을수록 컴퓨터의 처리 속도가 빠르다는 것을 의미
- 클록(Clock): CPU가 일정한 속도로 작동하기 위해 일정한 간격으로 공급되는 전기적 진동(oulse)
- 1Hz: 1초에 1번 클록이 발생하는 것
- 1MHz: 1초에 10⁶개의 클록 발생
명령어 처리 속도
- 초당 처리하는 명령어의 개수, 단위 MIPS(Million Instruction Per Second)
- 현재는 MIPS보다는 FLOPS(FLoating point Operation Per Second) 단위를 자주 사용
CPU의 내부구조
- 연산장치·제어장치·레지스터의 집합으로 구성되고 내부 CPU 버스로 연결
- 연산장치: 각종 연산기능 수행
- 레지스터: 데이터를 보관하는 기억기능 수행
- 제어장치: 명령을 해독하고 제어신호를 발생하여 제어기능 수행
- 버스: 데이터의 전달기능 수행
산술논리연산장치(ALU)
- Arithmetic and Logic Unit
- 덧셈, 뺄셈과 같은 산술연산과 AND, OR, NOT, XOR 등의 논리연산을 계산하는 디지털 회로
- 산술 및 부울 논리 연산기: 실제적인 산술 연산과 논리 연산을 수행하는 회로
- 상태 플래그: 연산 중인 ALU 내의 데이터 상태 표시, 음수·0·오버플로우 등을 표시
- 이동기(Shifter): 데이터 비트를 좌우로 비트 별로 이동 (비트의 이동 = 2의 곱셈 or 나눗셈)
- 보수기(Complementer): ALU 내의 데이터에 대해 보수연산 수행 (2의 보수)
프로세서 레지스터
- CPU 내에서 데이터를 저장하는 장치
- 기억장치들 중에서 속도가 가장 빠름
- ALU에서 처리된 결과 데이터를 임시 보관하고, 주기억장치로부터 읽어온 명령어와 데이터를 임시 보관
레지스터의 용도별 분류
구분 | 특징 |
데이터 레지스터 | 정수 데이터 값을 저장할 수 있는 레지스터 |
주소 레지스터 | 기억장치 주소를 저장하여 기억장치 액세스에 사용 |
범용 레지스터 | 데이터와 주소 모두 저장할 수 있는 레지스터 |
부동 소수점 레지스터 | 부동소수점 데이터 값을 저장하기 위해 사용 |
상수 레지스터 | 0이나 1 등 고정된 데이터 값을 저장하기 위한 레지스터 |
특수 레지스터 | 실행 중인 프로그램의 상태를 저장 (프로그램 카운터, 상태 레지스터) |
명령 레지스터 | 현재 실행 중인 명령어 저장 |
색인 레지스터 | 실행 중에 피연산자의 주소를 계산하는데 사용 |
CPU에 존재하는 레지스터
- 사용자에게 보이는 레지스터
- 어셈블리 프로그래머는 프로그램에서 사용되는 변수 데이터 등의 저장을 위해 해당 레지스터를 알고 있어야 함
구분 | 특징 | |
일반 목적용 레지스터 | 프로그래머에 의해 여러 용도로 사용 | |
데이터 레지스터 | 데이터 저장에만 사용할 수 있는 레지스터 (누산기) | |
주소 레지스터 | 특정 주소지정 방식을 위해 사용하는 레지스터 유효주소를 저장하기 위한 레지스터 | |
인덱스 레지스터 | 변위 주소지정 방식에서 인덱스 주소지정에 사용 | |
스택 포인터 | 스택이라는 저장장치의 최상위 주소를 저장하는 레지스터 | |
조건 코드 | 저장된 데이터의 상태를 표시하는데 사용 | |
부호 비트 | 양수인지 음수인지를 표시 | |
영(0) 비트 | 해당 데이터가 0이라는 것을 표시 | |
오버플로우 비트 | 연산의 결과 등에 오버플로우가 발생했다는 것을 표시 |
- 제어 및 상태 레지스터
- 프로그램 상태 단어(Program Status Word)의 종류
- 부호 비트: 해당 레지스터 내의 데이터의 부호 표시
- 영 비트: 레지스터가 0이라는 것을 표시
- 올림수 비트: 해당 레지스터에서 자리 올림이 발생했다는 것을 표시
- 동등 비트: 비교 대상과 해당 레지스터가 동일한 상태임을 표시
- 오버플로우 비트: 해당 레지스터의 오버플로우 상태 표시
- 인터럽트 가능/불가능 비트: 인터럽트 가능 여부 표시
- 디렉션 비트: 문자열 조직에서 참일 경우 주소 레지스터 값이 자동으로 감소하고, 거짓일 경우 자동으로 증가하도록 하는 비트
- 트랩 비트: 참일 경우 한 명령이 실행할 때마다 인터럽트 발생
- 보조올림수 비트: 연산 결과 하위 니블(4bits)에서 비트 범위를 넘어섰을 때 참이 됨 → 이진화 십진법(BCD) 연산에 사용하는 비트
- 패리티 비트: 연산 결과에서 1의 값을 갖는 비트의 수가 짝수일 경우 참
- 슈퍼바이저 비트: CPU가 슈퍼바이저 모드 혹은 사용자 모드에서 실행 중인지를 나타내는 비트
- 프로그램 상태 단어(Program Status Word)의 종류
구분 | 특징 |
프로그램 카운터(PC) | 주기억장치에 저장된 다음에 인출할 명령어의 주소를 가지고 있는 레지스터 |
명령어 레지스터(IR) | 가장 최근에 주기억장치인 RAM에서 인출한 명령어를 저장 |
기억장치 주소 레지스터(MAR) | 액세스할 기억장치의 주소가 저장되는 레지스터, 출력이 주소 버스와 직접 연결됨 |
기억장치 버퍼 레지스터(MBR) | 기억장치에 쓰여질 데이터 혹은 가장 최근에 읽은 데이터가 저장됨 |
입/출력 주소 레지스터 | 입/출력 장치의 주소를 저장하는 주소 레지스터 |
입/출력 버퍼 레지스터 | 입/출력 모듈과 CPU 사이에 교환되는 데이터를 일시적으로 저장하는 레지스터 |
프로그램 상태 단어 | 저장된 데이터의 상태와 조건을 나타내기 위한 조건 코드 비트 |
스택
- 저장장치의 일종, 일반적으로 사용되는 스택은 RAM 메모리 스택
- 저장되는 요소들이 순차적으로 저장
- 요소의 개수 또는 스택의 길이는 가변적
- 한 번에 하나의 요소에만 액세스 가능
- 나중 입력 먼저 출력(LIFO, Last-In-First-Out)
스택의 동작 표현
구분 | 특징 |
TOP | 데이터가 입력되고 출력되는 액세스 부분 |
PUSH | 스택의 Top에 새로운 요소를 추가 저장하는 동작 |
POP | 스택의 Top에서 하나의 요소를 꺼내는 동작 |
스택 포인터 | Top의 위치를 표시하는 장치 스택에서는 항상 스택의 꼭대기 항을 가리키는 주소 레지스터인 스택 포인트가 필요함 |
스택의 기본적인 동작
- Top에 위치한 요소는 POP 동작을 통해 스택에서 인출
- 연산을 수행하고, 연산의 결과를 다시 스택에 저장되도록 PUSH
- 결과 데이터가 저장되었으므로 Top은 위쪽으로 이동
제어장치
- 명령어를 해독하는 기능과 제어 신호를 해당 장치에 전달하는 역할을 수행
- 명령어의 형식 = 연산코드 + 기억장치 주소
- 연산코드 필드: 수행되어야 할 연산이 지정되어 있는 필드
- 기억장치 주소 필드: 해당 연산을 수행할 때 필요한 데이터가 저장되어 있는 주소
제어장치의 구성요소
구분 | 특징 |
MBR | 주기억장치에서 읽어온 명령어를 임시 저장 |
IR | 명령어 저장 |
명령어 해독기 | IR에 저장된 명령어의 연산코드 필드를 전달받아 명령어를 해독하여 수행할 연산 결정 |
MAR | IR에 저장된 명령어의 주소 번지를 저장 |
PC | 다음에 수행할 명령어의 주소 번지를 저장 |
내부 CPU 버스
- CPU 내의 ALU·레지스터·제어장치 간의 데이터 이동을 위한 통로
- 실질적인 데이터를 전달하는 데이터 버스와 제어장치에서 발생되는 제어 신호를 전달하는 제어버스로 구성
- CPU 밖의 시스템 버스들과는 직접 연결되지 않음
- 반드시 버퍼 레지스터들 혹은 시스템 버스 인터페이스 회로를 통해 시스템 버스와 접속하는 특징을 가지고 있음
- MBR과 MAR은 CPU 내부와 외부 장치 간에 속도 차이를 극복하기 위한 버퍼 역할 수행
레지스터
- 데이터에 대한 처리결과를 일시적으로 저장하거나 내용을 이동할 때 잠시 보관하는 장소
- 고속으로 동작할 수 있도록 플립플롭으로 구성
- 레지스터의 설계
- 일반적으로 D 플립플롭은 레지스터를 제작하는 구성 요소로 사용
- 입력신호 D가 클록 펄스에 동기 되어 그대로 출력에 전달되는 특성
- 레지스터의 구성
- 클록이 플립플롭에 입력될 때마다 4비트의 입력 I₀ ~ I₃가 저장됨
- 출력 측 A₀ ~ A₃에서는 언제나 저장된 값을 참조할 수 있음
레지스터의 전송
레지스터 간 전송
- 다른 레지스터에 데이터를 쓰거나 저장된 데이터를 읽는 동작으로 직렬 전송과 병렬 전송으로 구분
- 직렬 전송 방식
- 이동 레지스터(Shift Register)
- 레지스터에서 다른 레지스터로 데이터가 직렬 전송되는 개념
- 전송하는 레지스터의 내용을 보존하기 위해서는 자신의 직렬 출력을 다시 직렬로 입력하여 모든 비트가 원래의 위치에 있도록 하여야 함
- 병렬 전송 방식
- 레지스터에 기억된 전체 내용을 하나의 제어 신호로 다른 레지스터에 동시에 전송하는 방식
버스 전송 방식
- 병렬 버스 전송: 버스 내의 선의 개수와 레지스터를 구성하는 플립플롭의 개수가 일치해야 함
- 단일 버스 전송: 버스로 사용하는 회선이 1개이므로 1비트 신호인 제어 신호를 전송하거나 직렬 전송만 가능
- 디코더를 활용한 단일 버스 연결
- 레지스터 4개를 단일 버스를 통해서 데이터를 공동으로 전송할 경우에는 레지스터를 선택하기 위해 2비트가 입력되는 디코더를 사용
- 멀티플렉서와 디멀티플렉서의 단일 버스 연결
- 단일 버스가 여러 레지스터 중 선택된 하나의 레지스터에 수신하는 방법으로 디멀티플렉서 회로를 사용함
- 선택 신호에 의해 디멀티플렉서 회로의 출력 D₀ ~ D₃가 생성되므로 이를 직접 레지스터에 연결하여 수신하도록 함
- 레지스터에 저장된 데이터를 단일 버스로 송신할 때는 멀티플렉서를 사용
- 레지스터 4개가 멀티플렉서를 통하여 단일 회선인 버스에 연결
- x와 y가 지적하는 회로에 의해 R₁ ~ R₄ 중 하나가 선택, 선택된 레지스터는 버스로 데이터를 출력
- 단일 버스가 여러 레지스터 중 선택된 하나의 레지스터에 수신하는 방법으로 디멀티플렉서 회로를 사용함
기억장치 전송 방식
- 주기억장치에 데이터를 쓰기 동작과 읽는 동작을 수행하기 위해서는 해당 위치를 알려주는 주소번지가 필요
- 주소번지를 저장하는 MAR이 필요하고, 주기억장치에서 읽히거나 기록할 때 임시 저장되는 MBR이 필요
연산장치
- 연산될 데이터와 연산한 결과를 기억시킬 레지스터 필요
- 연산의 상태를 나타내기 위한 상태 레지스터들의 연결 필요
- ALU의 구성
- 덧셈을 위한 가산기
- 연산에 이용되는 데이터나 연산 결과 등을 일시적으로 보관하기 위한 누산기
- 데이터를 보관하는 MBR 등
- 보수를 만들기 위한 보수기, 계산 결과의 상태를 점검하기 위한 상태 레지스터 등으로 구성
산술연산 회로
- 4비트의 병렬 가산기로 구성
- 병렬 가산기가 단순한 덧셈 기능뿐만 아니라 여러 가지 연산을 수행하기 위해서는 구성요소인 전가산기의 한쪽 입력단자에 논리 회로를 추가해야 함
- 두 개의 선택 신호, 자리올림에 의해 8가지 연산을 수행
선택 신호 & 자리 올림 | 출력 | 연산 동작 | ||
S₁ | S₂ | Cᵢ | ||
0 | 0 | 0 | F = A | A를 전송 |
0 | 0 | 1 | F = A + 1 | A의 증가 캐리를 포함한 덧셈 |
0 | 1 | 0 | F = A + B | A와 B의 가산 |
0 | 1 | 1 | F = A + B + 1 | A와 B의 캐리를 가진 가산 |
1 | 0 | 0 | F = A + B' | A와 B의 1의 보수 가산 |
1 | 0 | 1 | F = A + B' + 1 | 감산(A와 B의 2의 보수 덧셈) |
1 | 1 | 0 | F = A - 1 | A를 1 감소 |
1 | 1 | 1 | F = A | A를 전송 |
논리연산 회로
- 논리 게이트들을 이용하여 조합논리 회로를 구성하면 다양한 논리연산을 수행
- 논리 게이트의 조합논리 회로와 멀티플렉서로 구성
- 4개의 논리연산이 선택신호 S₀와 S₁에 의해 하나가 선택되고 출력하게 함
S₁ | S₀ | 출력 | 연산 동작 |
0 | 0 | F = A ∧ B | AND |
0 | 1 | F = A ∨ B | OR |
1 | 0 | F = A ⊕ B | XOR |
1 | 1 | F = A' | NOT |
상태 비트
- 플래그 또는 조건 코드(Condition Code)라고도 불림
- CPU를 설계하는 과정에서 상태 비트는 여러 종류가 존재
- 자리올림, 부호, 제로, 오버플로우의 4가지는 필수정
- C (Carry): 자리올림 비트가 1이면 자리올림수가 발생한 것
- S (Sign): 부호비트가 1이면 음수, 0이면 양수
- Z (Zero): ALU의 연산결과 모든 비트의 출력이 0이면 제로 비트는 1이 되고, 아닐 경우 0이 됨
- V (Overflow): ALU의 두 자리올림수 C₈, C₉를 XOR 한 결과가 1이면 오버플로우, 0이면 오버플로우가 발생하지 않은 상태
8비트 ALU와 상태 레지스터
이동기
- Shifter, 이동 레지스터
- 이동 방향은 왼쪽과 오른쪽이고, 이동 방향의 마지막 비트 값은 바깥으로 밀려남
- 오른쪽 이동: 왼쪽에서 새로운 비트 값이 입력되고 오른쪽에서 마지막 비트 배출
- 왼쪽 이동: 오른쪽에서 새로운 비트 값이 입력되고 왼쪽에서 마지막 비트 배출
제어장치
- 하드웨어적 제어장치
- Hardwired Control Unit
- 하드웨어만으로 설계된 하드웨어적 제어장치
- 마이크로 프로그램된 제어장치
- Micro-programmed Control Unit
- 소프트웨어가 포함된 마이크로 프로그램된 제어장치
CPU의 기능
- CPU는 소프트웨어의 명령을 실행하는 핵심 부분
- 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행하고, 프로그램에 따라 외부에서 정보를 입력·기억·연산하고 외부로 출력
- CPU가 모든 명령어들에 대하여 공통적으로 수행되는 기능은 명령어 인출(Fetch)과 해독(Decode)
명령어의 기능 |
|
구분 | 특징 |
데이터 인출 기능 | 명령어 실행을 위해 데이터가 필요한 경우, 기억장치 or 입출력장치에서 데이터를 읽어오는 과정 연산 과정에서 사용하는 데이터를 불러오는 과정 |
데이터 처리 기능 | 읽어온 데이터에 대한 산술적 또는 논리적 연산 수행 |
데이터 쓰기 기능 | 데이터 처리 과정에서의 수행 결과를 저장하는 기능 |
- 주기억장치로부터 데이터를 전송받고, 처리된 데이터를 다시 주기억장치로 전송
CPU의 동작
- 처리해야 할 데이터는 주기억장치 RAM에서 인출되고, 외부 시스템 버스를 통해 레지스터로 전달
- 제어장치는 새롭게 저장된 레지스터의 데이터와 이전부터 저장하고 있던 다른 레지스터의 데이터를 덧셈하라는 제어신호를 ALU로 전달
- ALU에서는 제어신호에 의해 덧셈을 수행하고 그 결과를 누산기에 저장
- 덧셈의 계산 결과는 외부 시스템 버스를 통해 다시 주기억장치로 전달
제어장치의 기본 동작 과정
- 주기억장치에서 명령어를 인출해서 제어장치 내 IR에 저장
- PC에 다음에 실행될 명령어의 주소 저장
- 제어장치가 IR의 명령어 해석
- 해석된 명령어는 해당되는 제어신호 발생시킴
프로그램 카운터의 역할
- 프로그램에서 항상 앞에서부터 한 명령씩 차례대로 실행되도록 함
- 조건부 분기(e.g. JUMP)와 같이 그 순서를 바꿔야 하는 경우 PC의 내용을 바꿈으로써 분기된 이후부터의 명령들이 새로운 순서에 맞게 실행
CPU의 성능 요소
- CPU가 데이터를 처리하는 속도는 컴퓨터의 성능을 평가하는 중요한 요인
- CPU가 데이터를 처리하는 속도는 여러 가지 요소들에 의해 좌우
대표적 성능 요소
클록 주파수
- 컴퓨터에서 수행되는 모든 연산의 타이밍을 맞추기 위해 발생시키는 펄스를 시스템 클록이라 함
- 컴퓨터가 명령어를 수행하는 속도를 결정
- 하나의 클록 동안에 명령어 부 사이클이 수행되는데, 클록의 주기가 길면 그만큼 처리할 수 있는 명령어 부 사이클의 시간이 지연됨
- 클록의 주기는 클록의 주파수와 반비례하므로 짧은 주기는 높은 클록 주파수를 뜻함
- 결과적으로 클록 주파수는 특정시간 동안에 완수할 수 있는 명령어의 수를 제한
워드 크기
- CPU가 한 번에 읽고 쓸 수 있는 비트 수
- 워드의 크기는 레지스터의 크기와 버스의 데이터 선로 수에 달려 있음
- 워드 크기가 큰 컴퓨터는 한 명령어에서 더 많은 데이터를 처리할 수 있음
- 최근 컴퓨터의 워드 크기는 64비트
캐시 기억장치
- CPU가 데이터에 빠르게 접근할 수 있는 고속의 기억장치
- CPU에서 필요한 데이터를 미리 캐시기억장치에 가져다 놓음으로써 주기억장치에서 데이터를 확인하는 시간을 줄여줌
- 읽기와 쓰기 동작 속도를 향상해서 전체적으로 CPU 속도가 훨씬 빨라짐
명령어 집합의 복잡성
- 복잡 명령어 집합 컴퓨터(CISC)
- CPU에 복잡한 명령어가 많이 내재된 컴퓨터
- 한 명령어는 기억장치에서 많은 바이트를 차지해 CPU가 수행하려면 많은 클록이 소요되므로 저속으로 동작됨
- 축소 명령어 집합 컴퓨터(RISC)
- 연산속도를 향상하기 위해 제어논리를 단순화하고 단순화된 명령어 구조를 가짐
- CPU에 빠르게 수행되는 제한된 수의 간단한 명령어만이 내재된 컴퓨터
- 결과적으로 특별한 설계 방법을 통해 속도를 최대한 높일 수 있는 컴퓨터
파이프라이닝 기법
- Pipelining
- 파이프들이 연속적으로 연결되는 개념
- CPU 또는 프로세서가 이전 명령어의 수행이 완전하게 종료되기 전에 새로운 다음 명령어 수행을 시작하는 기법
병렬처리
- Parallel Processing
- 하나 이상의 CPU로 구성된 컴퓨터에서 한 번에 여러 개의 명령어를 동시에 수행시킬 수 있는 방법
- 병렬처리의 동작원리
- 명령어가 제어장치로 입력되면 제어장치는 이 명령어가 수행이 가능한 CPU로 보냄
- 여분의 CPU가 다른 명령어를 처리할 수 있으므로 대기하는 시간 없이 바로 처리됨
- 여러 개의 CPU가 필요하므로 비용이 상승하지만 그만큼 컴퓨터의 처리 속도가 증가됨