선릉역 1번 출구

컴퓨터 구조(4) - CPU 본문

Computer/CS

컴퓨터 구조(4) - CPU

choideu 2022. 11. 13. 22:52

ALU: 계산을 담당하는 장치

 

INPUT: 레지스터를 통해 피연산자(operand)를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아 들임

OUTPUT: Integer Result를 레지스터에 저장하고 Status=flag(register)값을 내보냄

*결과값을 레지스터에 저장하는 이유는 메모리에 바로 저장하게 되면 cpu와 메모리 사이의 이동시간으로 느려지기 때문

 

flag의 종류

  • 부호 플래그: 연산 결과가 음수인지 양수인지를 나타냄
  • 제로 플래그: 연산 결과가 0인지 나타냄
  • 캐리 플래그: 캐리가 발생했는지 나타냄
  • 오버플로우 플래그: 오버플로우가 발생했는지 나타냄
  • 인터럽트 플래그: 인터럽트가 가능한지 나타냄
  • 슈퍼바이저 플래그: 커널 모드로 사용중인지, 사용자 모드로 실행 중인지를 나타냄

플래그 레지스터

 

제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품

cpu의 구성 요소 중 가장 정교하게 설계된 부품으로 제조사마다 구현 방식이나 명령어를 해석하는 방식이 다를 수 있음

 

특징

1. 제어장치는 클럭 신호를 받아들임

- 클럭: 부품이 움직이는 신호 단위

- 컴퓨터의 모든 부품이 클럭 신호에 맞춰 작동함(but 한 클럭 신호마다 작동하는 것이 아니고 클럭이라는 박자에 맞춰 움직인다는 것임)

2. 해석해야 할 명령어를 받아들임

- 명령어 레지스터로부터 해석할 명령어를 받아들이고 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알림

3. 제어장치는 플래그 레지스터 속 플래그 값을 받아들임

4. 제어 버스로 전달된 제어 신호를 받아 들임

- 외부로 내보내는 제어 신호(메모리/입출력장치)

- 내부로 내보내는 제어 신호(ALU-연산 수행/레지스터-레지스터 간 데이터 이동 및 레지스터에 저장된 명령어 해석을 위함)

 

 

레지스터: 명령어와 데이터가 저장되는 공간

  • 프로그램 카운터: 메모리에서 가져올 명령어의 주소가 저장
  • 명령어 레지스터: 메모리에서 읽어 들인 명령어를 저장
  • 메모리 주소 레지스터: 메모리의 주소를 저장하는 레지스터, cpu가 읽어들이고자 하는 주소 값을 주소 버스로 보낼 때 거치는 레지스터
  • 메모리 버퍼 레지스터: 메모리와 주고받을 값을 저장하는 레지스터, 메모리에 r/w전에 이 레지스터를 거침
  • 플래그 레지스터: ALU 연산 결과 도는 cpu 상태에 대한 부가적인 정보를 저장
  • 범용 레지스터: 데이터와 주소를 모두 저장할 수 있음
  • 스택 포인터: 
  • 베이스 레지스터

CPU로 실행할 프로그램이 메모리 1000번지에 저장된 상황

(메모리 1000번지에는 명령어 1101이 저장되어 있음)

프로그램 카운터 1000
메모리 주소 레지스터  
메모리 버퍼 레지스터  
명령어 레지스터  

메모리에서 가져올 명령어가 1000번지에 있다는 것을 의미(PC의 값)

프로그램 카운터 1000
메모리 주소 레지스터 1000
메모리 버퍼 레지스터  
명령어 레지스터  

1000번지를 읽기 위해서 주소 버스를 통해 값을 내보내야 하므로 메모리 주소 레지스터에 1000을 저장

주소 버스를 통해 메모리 주소 레지스터 값인 1000을 보냄 + 제어신호(메모리 읽기)

프로그램 카운터 1001
메모리 주소 레지스터  
메모리 버퍼 레지스터 1101
명령어 레지스터  

pc의 값인 1000이 실행되었으므로 pc + 1 해줌

프로그램 카운터 1001
메모리 주소 레지스터  
메모리 버퍼 레지스터 1101
명령어 레지스터 1101

메모리 버퍼 레지스터에 있는 값이 명령어 레지스터로 이동함

그럼 제어장치는 명령어 레지스터에 있는 명령어를 해석하고 제어 신호를 발생시킴

 

*CPU가 주소 버스로 내보낼 값은 메모리 주소 레지스터를, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거침

 

주소 지정 방식

  • 즉치 주소지정: 피연산자가 명령어에 포함됨
  • 직접 주소지정: 명령어에 피연산자의 주소(주기억장치)가 포함됨

  • 간접 주소지정: 명령어에 주기억장치의 주소가 포함되고 주기억장치의 주소에는 피연산자가 들어있는 주기억장치의 주소가 들어있음

  • 스택 주소 지정: 메모리 안 스택이라는 특정 영역에서 최상단을 가리키는 스택 포인터를 사용하는 방식
  • 변위 주소 지정: operand의 값과 특정 레지스터의 값을 더해 메모리의 유효 주소를 알아내는 방식

 

명령어 사이클: 명령어를 처리하는 정형화된 흐름

  • 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클: CPU로 가져온 명령어를 실행하는 단계
  • 간접 사이클: CPU로 가져온 명령어 실행 시 메모리 접근이 필요한 경우 

인터럽트: CPU의 작업을 방해하는 신호

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

  • 동기 인터럽트(예외): CPU에 의해 발생하는 인터럽트
  • 비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트

CPU가 인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 설정되어 있어야 함

*인터럽트 플래그가 0으로 설정되어 있어도 무시할 수 없는 플래그가 존재하긴 함

 

인터럽트 서비스 루틴: 인터럽트를 처리하기 위한 프로그램

ex) 마우스가 어떤 인터럽트 요청을 보냈을 때 어떻게 작동한다

-> 각기 다른 인터럽트 서비스 루틴을 구분하기 위해 인터럽트 벡터를 사용함

 

Comments