02. [혼공컴운]2주차_ 04. CPU의 작동원리

hyewoon·2024년 1월 7일
0

2주차 (1/8 ~ 1/14)
chapter. 04 : CPU의 작동 원리
chapter. 05 : CPU 성능 향상 기법

Chapter. 04 CPU의 작동 원리

CPU = ALU + 제어장치 + 레지스터

ALU


📌 ALU가 받아 들이는 정보

  • 제어신호 from 제어장치
  • 피연산자 from 레지스터

📌 ALU가 내보내는 정보

  • 연산의 결괏값 to 레지스터
  • 연산의 결과로 나온 추가적인 정보인 플래그 to 플래그 레지스터

제어장치


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

  • 클럭신호 from 클럭: 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
  • 해석해야 할 명령어 from 명령어 레지스터
  • 플래그 값 from 플래그 레지스터
  • 제어신호 from 제어버스(시스템버스)

📌 제어장치가 내보내는 정보

  • 제어신호 to CPU 내부(ALU, 레지스터)
  • 제어신호 to CPU 외부(메모리, 입출력장치)

레지스터


  1. 레지스터
    : cpu내부의 임시저장장치로, 메모리에서 가져온 명령어와 데이터가 저장되거나, 연산의 결괏값이 저장되는 곳

  2. 레지스터의 종류

✅ 프로그램 카운더(PC)

  • 메모리에서 읽어들일 명령어의 주소를 저장한다.

  • 명령어 처리가 끝나면, 프로그램카운터는 증가하여 다음 명령어의 주소를 (1001번지) 저장한다.

  • 이처럼 프로그램 카운터는 지속적으로 증가하여 계속해서 다음 명령어를 읽어들인 준비한다.

    결국 CPU가 메모리 속 프로그램을 순차적으로 읽어 들이고 실행해 나갈 수 있는 이유는 CPU 속 프로그램 카운터가 꾸준히 증가하기 때문이다.

✅ 메모리 주소 레지스터

  • 메모리의 주소를 저장하는 레지스터
  • CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거친다.

✅ 메모리 버퍼 레지스터

  • 메모리와 주고 받을 값(데이터나 명령어) 저장하는 레지스터
  • 메모리로부터 전달 받은 값 또는 보낼 값을 저장한다.
  • 데이터 버스로 주고 받을 값이 메모리 버퍼 레지스터 거친다.

✅ 명령어 레지스터

  • 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터
  • 제어장치는 명령어 레지스터 속 명령어를 받아들이고, 이를 해석한 뒤 제어신 호를 내보낸다.

✅ 플래그 레지스터

  • 연산결과 또는 CPU 상태에 대한 부가적인 정보 저장하는 레지스터

✅ 범용 레지스터

  • 데이터와 주소를 모두 저장 할 수 있는 레지스터

✅ 스택 포인터

  • 스택(stack)의 꼭대기를 가리키는 레지스터
  • 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터

✅ 베이스 레지스터

  • 기준 주소의 역할

📌 추가 : 스택포인터베이스 레지스터 이용한 주소지정방식


명령어 사이클과 인터럽트


📌 명령어 사이클
: 하나의 명령어가 처리되는 주기로 인출, 실행, 간접, 인터럽트 사이클로 구성 됨

  • 인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
  • 실행 사이클 : CPU로 가져온 명령어를 실행하는 단계
  • 간접 사이클 : 피연산자의 실제 주소를 찾기 위해 메모리 내의 데이터를 한 번 더 인출하는 과정
  • 인터럽트 사이클 : 입출력장치로부터 발생하는 인터럽트 처리하는 과정

📌 인터럽트

  • 동기 인터럽트 : 예외 - CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주침
  • 비동기 인터럽트 : 하드웨어 인터럽트 -입출력장치에 의해 발생

📌 하드웨어 인터럽트

CPU가 프린터에 출령을 명령했다고 가정.
입출력장치는 CPU보다 속도가 현저히 느리기 때문에 CPU는 입출력 작업의 결과를 바로 받아볼 수 없다. 이때 하드웨어 인터럽트 사용하지 않으면 CPU는 프린터가 언제 프린트를 끝낼지 모르기 때문에 주기적으로 프린트 완료여부 확인해야 한다.

이때 하드웨어 인터럽트를 이용하면 CPU는 프린터로부터 완료 인터럽트를 받을 때까지 다른 작업을 처리할 수 있다.

하드웨어 인터럽트를 사용하면 CPU로 하여금 효율적으로 명령어를 처리할 수 있게 한다.

📌 하드웨어 인터럽트 처리순서

  1. 입출력장치는 CPU에 >인터럽트 요청신호 보낸다.
    ✅ 인터럽트 요청신호
    : 입출력장치가 끼어들어도 되는지 물어보는 것

  2. CPU는 실행 사이클이 끝나고 명령어 인출하기 전 항상 인터럽트 여부 확인한다.

  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래크통해 인터럽트를 받아들일 수 있는지 여부 확인한다.
    ✅ 인터럽트 플래그
    : 플래그레지스터 안의 인터럽트 플래그로, 0이면 인터럽트 사용불가, 1이면 인터럽트 사용 가능

  4. 인터럽트 받아들일 수있다면 CPU는 지금까지 작업 백업한다.

  5. CPU는 인터럽트 벡터 참조하여 인터럽트 서비스 루틴을 실행한다.
    ✅ 인터럽트 서비스 루틴
    : 인터럽트가 발생하면 어떻게 행동해야 할지를 알려주는 프로그램
    프로그램이기 때문에 사용하려면 메모리에 적재되어 있어야 한다.

    인터럽트 서비스 루틴은 인터럽트 사용 설명서 같은 것


    ✅ 인터럽트 벡터
    : 수많은 인터럽트 서비스 루틴을 식별하는 정보로 인터럽트 서비스 루틴의 시작 주소를 담고 있다.

6. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개한다.

🏅기본미션

p. 125의 확인 문제 2번

  • 1. 플래그 레지스터
    : 연산 결과 혹은 cpu상태에 대한부가정보를 저장하는 레지스터
  • 2. 프로그램 카운터
    : 메모리에서 가져올 명령어를 저장할 레지스터
  • 3. 범용 레지스터
    : 데이터와 주소를 모두 저장하는 레지스터
  • 4. 명령어 레지스터
    : 해설할 명령어를 저장하는 레지스터
profile
오늘도 달리는

0개의 댓글