본문 바로가기

Layer7

하드웨어 2차시 과제(CPU 구조, 동작 과정, ISA, 메모리 계층 구조)

이미지출처 https://www.harucat.com/entry/CPU

CPU는 컴퓨터 시스템을 제어하고 데이터 연산을 처리하는 장치이다. 

CPU의 각 구성 요소는 연산장치(ALU), 제어장치(Control Unit), 레지스터(Register set)가 있고,

내부 버스(internal bus)에 의해서 연결되어 있다.

 

 

<CPU 구조>

 

레지스터(Register set)

CPU와 주기억장치 사이의 속도를 보완하기 위해 필요한 데이터나 명령 등을 임시로 저장하는 기억장치이다.

명령어 계수기(PC) : 다음으로 인출(Fetch)될 명령어(instruction)의 주소를 가지고 있다.

명령어 레지스터(IR) : 현재 수행 중인 명령어를 가지고 있다.

메모리 주소 레지스터(MAR) : 메모리로부터 읽어오거나 메모리에 쓰기 위한 주소를 가지고 있다.

메모리 버퍼 레지스터(MBR) : 메모리로부터 읽어온 데이터 또는 메모리에 써야 할 데이터를 가지고 있다.

입출력 주소 레지스터(I/O AR) : 입출력 장치에 따른 입출력 모듈의 주소를 가지고 있다.

입출력 버퍼 레지스터(I/O BR) : 입출력 모듈과 프로세서 간의 데이터 교환을 위해 사용된다.

 

제어장치(Control Unit)

명령어 레지스터에 저장된 명령어를 해석해서 처리한다.

주기억장치(RAM)에 있는 프로그램 명령어를 꺼내 차례대로 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 발생시켜 기억장치, 연산장치, 입출력 장치로 보내서 각 장치들을 동작시킨다.

해독된 명령어에 따라 각 장치로 보낼 제어신호를 생성하는 제어신호 발생기(해독기와 순서기로 이루어짐),

수행될 명령어 주소를 계산하는 주소 처리기 등이 있다.

 

연산기/산술 논리 연산장치(ALU)

산술 연산(덧셈, 뺄셈 등), 논리 연산(AND, OR, XOR 등)을 한다.

연산에 사용할 데이터를 일시적으로 기억하는 장치인 데이터 레지스터,

덧셈 연산만 할 수 있는 컴퓨터에서 뺄셈 연산을 하기 위해서 빼는 수를 보수로 바꿔주는 보수기,

덧셈 연산을 하는 가산기, 연산 결과를 일기적으로 보관하는 누산기,

오버플로우를 검출하는 오버플로우 검출기, 연산 결괏값의 상태를 나타내는 상태 레지스터 등으로 이루어져 있다.

 

<동작 과정>

 

1.인출(fetch)

주기억장치에 있는 명령어 주소를 명령어 계수기(PC)에 저장하고, 그 주소를 넘겨받은 MAR(메모리 주소 레지스터)은 주기억장치의 해당 주소에서 명령어를 인출한 뒤 MBR(메모리 버퍼 레지스터)에 일시적으로 저장해준다.

그리고 PC에서 다음 명령어를 인출하기 위해 값을 1 증가시킨다.

MBR에 저장된 명령어 데이터는 IR(명령어 레지스터)에 보내진다.

 

2. 해독(decode) IR(명령어 레지스터)에서 보내진 명령어를 제어장치(CU)에서 해독한다.

명령어는 Opcode(연산의 동작(종류, 방법)을 나타내는 비트열)와 Operand(연산에 필요한 데이터의 주소)로 나뉜다.

Opcode해독 : 제어장치의 해독기에서 opcode를 해독하여 동작을 구현하는 회로로 제어 신호를 보낸다.

Operand 해독 : 제어장치의 주소 처리기에서유효 주소를 얻는 과정으로, operand에 저장된 값을 통해 유효 주소를 얻는다.

 

3. 실행(execute) : 해독된 명령어에 따라 데이터에 대한 연산을 수행한다.

데이터 이동: 데이터 처리, 데이터 저장, 프로그램 제어 등의 연산을 한다.

데이터 이동 : CPU와 기억장치 또는 CPU와 입출력 장치 간에 데이터가 이동하는 연산

데이터 처리 : 데이터에 대해서 산술, 논리 연산을 수행하는 연산

데이터 저장 : 연산 결과로 얻은 데이터 또는 입력 장치에서 읽어온 데이터를 기억장치에 저장하는 연산

프로그램 제어 : 프로그램의 실행 순서를 결정하는 연산

4.쓰기(write back): 연산 완료된 데이터를 메모리에 기록한다.

 

 

<명령어 집합 (ISA: Instruction Set Architecture)>

 

명령어 집합(ISA)은 소프트웨어와 하드웨어 사이의 약속이며 기계어로 되어있다.

 ISA는 여러 명령어들을 정의하고, 현재 시스템의 상태가 어떻게 구성되어 있고 명령어를 실행할 때 그 상태가 어떻게 바뀌는지에 대해서 정의한다. 그래서 소프트웨어를 구현하는 프로그래머 입장에서는 ISA를 통해 작성한 프로그램이 컴퓨터에서 어떻게 실행될 것인지 알 수 있고, 하드웨어를 구현하는 설계자 입장에서 ISA는 어떤 명령이 수행되었을 때 어떻게 수행되도록 설계해야 하는지의 명세서가 된다. 하나의 CPU는 반드시 하나의 ISA를 사용하므로, 어떤 CPU를 설계하기 위해서는 그 CPU가 사용할 ISA에 대해 알고 있어야 한다.

ISA는 설계 방식에 따라 CISC와 RISC로 나뉜다.

 

1.CISC (Complex Instruction Set Computer)

복잡하고 많은 명령어로 구성된 프로세서(중앙처리장치 또는 마이크로프로세서)이다.

명령어가 많아서 전력소비가 많고 명령어 설계가 어려워 비싸지만 프로그램이 간단해서 메모리 접근 횟수를 크게 줄일 수 있어서 레지스터를 적게 필요로 한다.하위 호환성이 뛰어나서 CPU구조가 바뀔 때마다 크게 바뀌는 것이 없다.

주로 개인용 컴뷰터(PC)에서 사용한다.(많은 명령어가 쓰이기 때문)

 

2.RISC (Reduce Instruction Set Computer)

CPU의 명령어를 최소화하여 단순하게 제작된 프로세서이다.

자주 쓰이지 않는 명령어들은 소프트웨어로 구현하고 자주 쓰이는 명령어만 간략화해서 CPU의 성능을 높인다.

명령어의 종류가 적어서 전력소비가 적고 속도도 빠르지만 복잡한 연산을 하려면 명령어들을 반복 조합해서 써야 하므로 메모리에 접근을 많이 해야해서  레지스터를 많이 필요로 하고 프로그램도 복잡하다.

CPU구조가 바뀔 때마다 명령어들을 최적으로 조정해야 하기 때문에 하위 호환성이 떨어진다.

주로 서버에서 사용한다.(사용자가 요구하는걸 빠르게 실행해야 하기 때문)

 

<메모리 계층 구조>

이미지 출처 https://dapsu-startup.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System-%EB%A9%94%EB%AA%A8%EB%A6%ACMemory

싼 메모리(예:하드디스크)는 용량이 크지만 느리고, 비싼 메모리(예:레지스터)는 빠르지만 용량이 적다.

그래서 속도와 용량의 상호보완을 위해 고안한 방법이 메모리 계층 구조이다.

대부분의 컴퓨터 프로그램들은 프로그램의 전체가 아닌 작은 부분에만 자주 접근하므로,

그 작은 부분만  비싸고 빠른 메모리에 저장하고 사용하면 돈이 덜 들면서 프로그램의 전체적인 성능이 향상된다.

이 때문에 컴퓨터 메모리는 용량이 많고 느린 아래쪽에서 시작해서 용량이 적고 빠른 위쪽으로 올라가는 계층구조를 지니고 있다.