[CS] 4. CPU의 작동원리

eunoia73·2025년 4월 1일
1

TIL

목록 보기
21/32

1. ALU

레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들임
연산 결과플래그를 내보냄
결과값은 일시적으로 레지스터에 저장됨

  • 플래그 - 연산 결과에 대한 추가적인 상태 정보
    CPU가 프로그램을 실행하는 도중 기억해야하는 참고 정보
    플래그 레지스터에 저장됨
    부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 인터럽트 플래그, 슈퍼바이저 플래그 등이 있음

2. 제어장치

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

1) 클럭 신호를 받아들인다
클럭 - 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
2) 명령어 레지스터로부터 해석해야 할 명령어를 받아들인다.
3) 플래그 레지스터 속 플래그 값을 받아들인다.
4) 시스템 버스 중 제어버스로 전달된 제어 신호를 받아들인다.

➚ CPU 내부와 외부로 제어신호를 내보낸다.

3. 레지스터

1) 레지스터의 종류

  1. 프로그램 카운터 - 메모리에서 가져올 명령어의 주소 저장
  2. 메모리 주소 레지스터 - 메모리의 주소를 저장
    주소 버스로 내보낼 주소값 저장
  3. 메모리 버퍼 레지스터 - 메모리와 주고받을 값(데이터와 명령어)을 저장
    데이터 버스로 주고받을 값 저장
  4. 명령어 레지스터 - 메모리에서 읽어들인 명령어(해석할 명령어)를 저장
  • 🌊 흐름
  1. 프로그램 카운터(PC)
    현재 실행할 명령어의 주소를 가지고 있음.
    PC = 100 (100번지의 명령어 실행 예정)

  2. 메모리 주소 레지스터(MAR) ← PC
    MAR에 PC 값을 복사하여 메모리에서 해당 주소를 읽을 준비를 함.
    주소버스로 메모, 제어버스로 제어신호(메모리 읽기) 내보냄
    MAR = 100

  3. 메모리 버퍼 레지스터(MBR) ← 메모리[MAR]
    100번지의 메모리에서 명령어(ADD R1, R2)를 읽어 MBR에 저장
    데이터 버스로 메모리에 저장된 값이 전달됨
    MBR = ADD R1, R2

  4. 명령어 레지스터(IR) ← MBR
    MBR에 있는 명령어를 IR에 저장하여 CPU가 해석할 수 있도록 준비
    IR = ADD R1, R2

  5. PC ← PC + 1
    다음 명령어 실행을 위해 PC 증가
    PC = 101

  1. 범용 레지스터 - 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
  2. 플래그 레지스터 - 연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장
  3. 스택 포인터 - 스택의 꼭대기를 가리키는 레지스터
    (스택영역은 메모리 안에 있음)
  4. 베이스 레지스터 - 프로그램이 실행될 때 특정 기준이 되는 메모리 주소를 저장하는 레지스터

2) 특정 레지스터를 이용한 주소 지정 방식

  1. 스택 주소 지정 방식 - 스택과 스택 포인터를 이용한 주소 지정 방식

  2. 변위 주소 지정 방식 - 오퍼랜드 필드 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

  • 상대 주소 지정 방식 - 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식
    주로 조건 분기(조건문)나 루프(loop)에서 사용
  • 베이스 레지스터 주소 지정 방식 - 오퍼랜드와 베이스 레지스터의 값을 더하여 유효주소를 얻는 방식
    기준 주소로부터 얼마나 떨어져있는 주소에 접근할 것인지 연산하여 유효 주소를 얻어내는 방식
    주로 운영체제가 프로그램의 시작 주소를 관리할 때 사용

4. 명령어 사이클과 인터럽트

명령어 사이클 - 하나의 명령어를 처리하는 정형화된 흐름
인출, 실행, 간접, 인터럽트 사이클이 있음
인터럽트 - 흐름이 끊어지는 상황, CPU의 작업을 방해하는 신호

1) 동기 인터럽트(예외) - CPU에 의해 발생

  • 폴트fault - 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외
  • 트랩trap - 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외. 디버깅시 사용
  • 중단abort - CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외

2) 비동기 인터럽트(하드웨어 인터럽트) - 입출력 장치에 의해 발생

  • 입출력장치가 CPU에 인터럽트 요청 신호를 보냄
  • 인터럽트 플래그를 통해 받아들일 수 있는지 확인
  • CPU는 스택에 지금 실행하고 있던 작업을 백업
  • 인터럽트 벡터(인터럽트 서비스 루틴의 시작 주소 등 식별 정보)를 참조하여 인터럽트 서비스 루틴(인터럽트 처리 프로그램)을 실행

[혼자 공부하는 컴퓨터구조 + 운영체제] 책을 읽고 정리한 기록입니다.

0개의 댓글