최상위 관점에서의 CPU요소
종류 | 설명 |
PC | 앞으로 실행할 명령어의 주소 저장 |
IR | 지금 수행할 명령어 저장 |
MAR | 메모리로부터 데이터를 읽고 쓸 때 필요한 주소 저장 |
MBR | 메모리로부터 데이터를 읽고 쓸 때 필요한 데이터 저장 |
I/O AR | 입출력장치로부터 데이터를 읽고 쓸 때 필요한 주소 저장 |
I/O BR | 입출력장치로부터 데이터를 읽고 쓸 때 필요한 데이터 저장 |
EU (Execution Unit) | 실제 연산을 수행하는 위치 |
EU는 연산을 수행한다는 점에서 ALU와 비슷하다. 실제로 EU가 ALU보다 상위 개념이라고 한다.
폰노이만 구조 & 하버드 구조
폰노이만 구조와 하버드 구조는 이전에 설명했던 Stored Program Computer개념을 구현하는 방식이다. 이 방식 간의 가장 큰 차이는 프로그램 실행에 필요한 명령어와 데이터를 같이 보관하느냐(폰 노이만 구조), 따로 보관하느냐(하버드 구조)이다.
폰 노이만 구조 | 하버드 구조 | |
병목현상 | 발생 | 발생하지 않음 |
하드웨어 구조 | 단순 (구현비용 낮음) | 복잡 (구현비용 높음) |
명령어 코드 변경 | 가능 | 불가능 |
주 사용 ISA | CISC | RISC |
위 표는 폰 노이만 구조와 하버드 구조 간에 주목할 만한 차이점을 나타낸 것이다.
가장 주목할 만한 부분은 병목현상이다. 여기서 말하는 병목현상은 명령어와 데이터에 동시에 접근하고자 할 때 발생하는 문제다. 명령어와 데이터가 같은 메모리에 저장되는 폰 노이만 구조에서 이러한 병목현상이 발생한다.
폰 노이만 구조 | 하버드 구조 | |
장점 | - 구조가 단순하다 - 구현이 쉽다 - 구현비용이 낮다 | - 병목현상을 해결해 빠르다 - 소형 CPU, 임베디드에 유리하다 |
단점 | - 병목현상으로 인해 느리다 | - 구조가 복잡하다 - 구현이 어렵다 - 구현비용이 높다 |
위 표는 폰 노이만 구조와 하버드 구조 간의 특징 및 차이점으로 인한 각 구조의 장단점을 나타낸 것이다.
참고로, 최근에는 폰 노이만 구조에 하버드 구조를 병행하여 병목현상을 해결하는 방식으로 구현한다. 메모리부터 CPU까지는 폰 노이만 구조 방식으로 명령어와 데이터를 가져오고, CPU 내부에 명령어와 데이터를 위한 메모리를 각각 따로 두어서 하버드 구조처럼 구동하게 한다.
명령어 포멧
위 그림은 명령어가 저장되는 형식(포멧)을 가장 간단하게 나타낸 것이다. 총 16비트로 이루어져있는 구조에서 앞 4비트는 어떠한 명령을 할 것인지를 나타내는 OP코드, 뒤 12비트는 해당 명령을 수행하기 위해 필요한 데이터가 저장된 주소코드이다.
OP코드 (16진수) | 설명 |
0001 | Load: 주소코드에 적힌 주소로 접근하여 얻은 데이터를 AC에 저장 |
0010 | Store: 현재 AC에 저장된 데이터를 주소코드에 적힌 주소에 저장 |
0101 | Add: 현재 AC에 있는 데이터와 주소코드에 적힌 주소로 접근하여 얻은 데이터를 더하여 AC에 저장 |
위 표는 CPU에서 사용되는 대표적인 명령어를 OP코드와 함께 나타낸 것이다.
여기서 언급된 주소는 메모리 주소다.
여기서 언급된 AC는 CPU 내부에 있는 메모리로, 각종 연산을 위해 데이터를 임시로 저장할 때 쓰인다.
이후 설명할 CPU에서의 명령 실행 과정에서는 쉽게 설명하기 위해 위 명령어 포멧을 위와 같이 10진수로 간단하게 나타냈다.
CPU에서의 명령 실행 과정
CPU가 실행되는 과정을 하나의 그림으로 나타낸 사진이다. 여기서 살펴볼 수 있는 것은 명령 실행 과정은 크게 Fetch와 Execute단계로 이루어진다는 것이다. 수업에서는 Fetch, Decoding, Execution, Write Back 총 4단계에 대해 설명하셨다.
위 그림을 한 단계 씩 살펴보면 다음과 같다.
CPU 내부의 모습을 도식화한 그림이다.
왼쪽은 메모리를 나타낸 것으로 편의상 300번지부터 900번대 번지까지 나타낸 것이다. 300번대 번지에는 명령어를 저장한 것으로 나타냈고 900번대 번지에는 명령어에 쓰이는 데이터를 저장한 것으로 나타냈다.
때문에 명령어가 저장되는 메모리 내 300번대 번지와 IR에는 OP코드임을 나타내는 파란색 칸을 두어 구별하였다.
현재 실행할 명령어의 주소가 저장된 PC 값에 따라, 300번지에 있는 명령어 '1940'을 IR로 이동시킨다. (Fetch 과정)
IR에 있는 명령어 코드 '1940' 내 OP값을 통해 어떤 작업을 할 것인지 인지한다. (Decoding 과정)
OP코드 값이 1이므로 Load명령어다. 따라서 940번지에 있는 데이터인 '0003'을 읽어서 (Execution 과정)
AC에 저장한다. (Write Back 과정)
명령을 수행했으므로 PC값을 1 증가시킨다.
PC 값에 따라 301번지에 있는 명령어 '5941'을 IR로 이동시킨다.
IR에 있는 명령어 코드 '5941' 내 OP값을 통해 어떤 작업을 할 것인지 인지한다.
OP코드 값이 5이므로 Add명령어다. 따라서 AC에 있는 데이터인 '0003'와 941번지에 있는 데이터인 '0002'을 읽어서 더한 후, 결과값인 '0005'를 AC에 저장한다.
명령을 수행했으므로 PC값을 1 증가시킨다.
PC 값에 따라 302번지에 있는 명령어 '2941'을 IR로 이동시킨다.
IR에 있는 명령어 코드 '2941' 내 OP값을 통해 어떤 작업을 할 것인지 인지한다.
OP코드 값이 2이므로 Store명령어다. 따라서 AC에 있는 데이터인 '0005'를 메모리 내 941번지에 저장한다.
명령을 수행했으므로 PC값을 1 증가시킨다.
Program Flow Control
Program Flow Control(프로그램 흐름 제어)이 필요한 상황의 대표적인 예는 입출력장치를 사용하는 상황이다.
입출력장치에서 데이터를 주고 받는 속도는 메모리에서 주고 받을 때와 비교할 수 없을 정도로 느리다. 때문에 키보드를 사용할 때를 예를 들면, 입출력장치로부터 읽어들인 정보가 도달할 때까지 CPU는 기다려야 한다.
위와 같은 흐름 제어 기법에는 인터럽트가 대표적이다. 인터럽트는 끼어드는 행위를 말하며, 컴퓨터를 구동하는 상황에서 작업이 딜레이되는 시간을 줄이기 위해 인터럽트를 적절히 사용한다.
참고로, 외부에서 인터럽트가 발생했을 때 이를 처리하는 과정을 ISR(Interrupt Service Routine), 혹은 IH(Interrupt Handler)라고 한다.
이러한 인터럽트에는 거절할 수 있는 Maskable Interrupt와 거절할 수 없는 Non-Maskable Interrupt가 있다.
CISC & RISC
CPU가 이해할 수 있는 명령어 모음을 명령어 집합체(ISA: Instruction Set Architecture)라고 하며, 이러한 ISA에는 CISC와 RISC방식이 있다.
CISC(Complex Instruction Set Computer)는 이름에서 살펴볼 수 있듯이 복잡한 명령어 집합을 가진 구조다. 명령어 집합이 복잡해진 이유는 명령어의 수가 많기 때문이다. CISC는 명령어의 길이가 가변적이라서 메모리 공간을 절약할 수 있다는 장점이 있지만, 파이프라이닝이라는 명령어 처리 기법에서는 불리하다는 단점이 있다. (파이프라이닝에 관해서는 아래 링크를 참조)
RISC(Reduced Instruction Set Computer)는 명령어의 수를 줄여서 비교적 간단한 명령어 집합을 가진 구조다. 실제로 이 구조에서 사용하는 메모리 접근 명령에는 Load와 Store 뿐이고, 이외의 다른 명령어는 Load와 Store를 조합하여 만든다. RISC는 명령어의 길이가 고정적이어서 파이프라이닝에 유리하고, 이로 인해 효율이 높다는 장점이 있지만 레지스터를 사용하는 연산이 많아서 레지스터가 비교적 많이 필요하다는 단점이 있다.
'대학교 공부 > 컴퓨터시스템 (2023)' 카테고리의 다른 글
6주차 - Cache(캐시), Mapping Function(사상 방식), Replacement Algorithms(교체 알고리즘), Write Policy (0) | 2023.04.10 |
---|---|
5주차 - MU0, Parallelism(파이프라이닝, 스칼라) (0) | 2023.04.10 |
4주차 - Instruction Execution Unit, 주소 지정 방식, Hard wired & Micro programming (0) | 2023.04.10 |
2주차 - 컴퓨터 시스템 설명 (0) | 2023.03.17 |