크래프톤정글/혼공컴운

[혼공컴운] CH04 CPU 와 작동 원리

아람2 2024. 10. 5. 11:32
반응형

CH04 CPU 와 작동 원리

04-1  ALU 와 제어장치

https://youtu.be/lehWiAsIDrQ?si=t_qVgcIp6xMAjZR5

 

ALU - 계산하는 장치 

제어장치 - 제어 신호를 발생시키고 명령어를 해석하는 장치 

 

 

ALU 

계산하는 장치 

계산을 하기 위해서는 피연산자수행할 연산이 필요 

결과를 레지스터에 저장하는 이유는, CPU 가 메모리에 저장하는 것보다 레지스터에 접근하는 것이 빠르기 때문 

플래그

플래그 레지스터에 담기는 정보 - 연산 결과에 대한 부가 정보 (연산 결과 - 음수, 0 등) 

연산 결과가 (결과를 담을 레지스터에 비해) 너무 클 경우, 플래그 레지스터에 결과가 담긴다 

 

제어 장치

제어 장치가 받아 들이는 정보 

1) 클럭 신호 

 

2) 해석할 명령어

명령어 레지스터에 해석할 명령어가 저장되어 있다 

 

3) 플래그 

연산 결과의 부가 정보도 명령어를 해석하는 과정에서 반드시 필요하다 

 

4) 제어 신호 

입출력 장치를 비롯한 주변 장치에서 발생한 제어 신호

제어 장치가 내보내는 제어 신호 

1) To 레지스터 - 레지스터 간의 어떤 정보를 이동해라, 어떤 값을 저장해라, 레지스터가 어떤 행동을 해라 

2) To ALU - 수행할 연산을 지시하는 제어 신호 (어떤 연산을 수행해라)

3) To 메모리 - 메모리를 읽어라, 메모리를 써라

4) To 입출력장치 - 입출력 장치를 읽어라, 입출력 장치를 써라, 입출력 장치를 테스트해라 

 

 

04-2 레지스터 

로우 레벨 개발자들은 레지스터 안에 있는 값을 관찰할 일이 많다 

 

반드시 알아야 할 레지스터 

1. 프로그램 카운터 - 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소)

    Instruction Pointer 명령어 포인터라고 부르는 CPU 도 있다 

2. 명령어 레지스터 - 해석할 명령어 (방금 메모리에서 읽어 들인 명령어), 제어 장치가 해석한다 

3. 메모리 주소 레지스터 - 메모리의 주소, CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터 

4. 메모리 버퍼 레지스터 - 메모리와 주고 받을 값 (데이터와 명령어), CPU 가 정보를 데이터 버스로 주고 받을 때 거치는 레지스터 

5. 플래그 레지스터 - 연산 결과 또는 CPU 상태에 대한 부가적인 정보, 현재 CPU 가 어떤 연산을 했는지, 상태가 어떤지 파악 가능 

6. 범용 레지스터 - 다양하고 일반적인 상황에서 자유롭게 사용 (여러 개가 있다) 

7. 스택 포인터 - 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)

스택 주소 지정 방식 - 스택과 스택 포인터를 이용한 주소 지정 방식/ 스택은 메모리 안에 스택처럼 쓸 수 있는 공간 (스택 영역) 에 존재한다 

8. 베이스 레지스터 - 기준 주소 저장 

변위 주소 지정 방식 - 오퍼랜드 필드의 값 (변위) 과 특정 레지스터 (프로그램 카운터 or 베이스 레지스터) 의 값을 더하여 유효 주소 얻기 

상대 주소 지정 방식 - 오퍼랜드 필드의 값 (변위) 과 프로그램 카운터의 값을 더하여 유효 주소 얻기 

베이스 레지스터 (기준 주소) 주소 지정 방식 - 오퍼랜드 필드의 값 (변위) 과 베이스 레지스터의 값을 더하여 유효 주소 얻기 

+ 메모리에서 실제로 저장되어 있는 주소와 CPU 가 인식하는 주소는 다르다

 

프로그램 카운터가 증가하면서 프로그램을 순차적으로 실행할 수 있다 

https://youtu.be/fSCHizcezTs?si=2-RnfAzc7KBOz7lv

 

단, 순차적인 실행 흐름이 끊기는 경우는 아래와 같다 

- 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시

  e.g. JUMP, CONDITIONAL JUMP, CALL, RET

- 인터럽트 발생 시

- ETC 

 

04-3 명령어 사이클과 인터럽트 

https://youtu.be/3Yz7OnVUM28?si=M5OCH4dEl7f0pVB7

 

CPU 가 메모리에 저장되어 있는 프로그램을 실행하는데 실행하는 과정에 일정한 패턴 (정해진 흐름) 이 있다

그 정해진 흐름 주기를 명령어 사이클이라고 한다 

간혹 그 정해진 흐름을 끊는 흐름을 인터럽트라고 한다 

 

명령어 사이클

프로그램 속 명령어들은 일정한 주기가 반복되며 실행된다, 이 주기가 명령어 사이클  

인출 사이클 - 가장 먼저 CPU 로 갖고 와야 한다 

실행 사이클 - 갖고 왔으면 실행해야 한다 

 

그런데 CPU 로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다 

간접 주소 지정 방식, 추가적으로 메모리에 접근해야 한다

메모리 접근이 더 필요한 경우 간접 사이클을 거쳐 실행 사이클이 실행된다 

 

인터럽트 Interrupt 

CPU 가 꼭 주목해야 할 때, CPU 가 얼른 처리해야 할 다른 작업이 생겼을 때 발생 

인터럽트 종류

 

하드웨어 인터럽트

알림과 같은 인터럽트, 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용

입출력 장치는 CPU 에 비해 느리기 때문에 인터럽트가 없다면 CPU 는 완료 여부를 확인하기 위해 주기적으로 확인해야 한다 

인터럽트가 있다면 입출력 작업 동안 CPU 가 다른 일을 할 수 있다 

 

인터럽트 요청 신호 - CPU 의 작업을 방해하는 인터럽트에 대한 요청 

인터럽트 플래그 - 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트 

인터럽트 벡터 - 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보 

인터럽트 서비스 루틴 - 인터럽트를 처리하는 프로그램 

 

인터럽트 플래그로 인터럽트를 받아 들일 수 있는지의 유무를 저장한다 

다만, 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아니다 (ex. 하드웨어 고장, 정전 - nmi 은 막을 수 없음) 

 

 

메모리에 인터럽트 서비스 루틴을 저장하고 인터럽트 발생 시 실행한다

 

메모리 안에 인터럽트 벡터 테이블도 있다

CPU 가 인터럽트를 처리한다는 말은, 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아온다는 말

그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다 

 

하드웨어 인터럽트 실행 시 기존 실행 프로그램을 스택 영역에 백업라고 인터럽트 종료 후에 다시 복구하여 작업을 재개한다 

 

 

반응형