본문 바로가기
CS/컴퓨터 구조

컴퓨터 구조 - (3) CPU의 작동 원리

by 16비트 2023. 1. 22.

ALU와 제어장치

  • ALU : 레스터를 통해 피연산자를 받아들이고 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다. 피연산자와 제어신호로 산술연산, 논리 연산 등 다양한 연산을 수행한다.

※ CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리다.

 

  • 플래그 : ALU가 내보내는 연산 결과에 대한 추가적인 상태 정보. 플래그 레지스터에 저장된다.
플래그 종류 의미 사용 예시
부호 플래그 연산한 결과의 부호를 나타낸다 부호 플래그가 1일 경우 계산 결과는 음수,
0일 경우 계산 결과는 양수를 의미한다.
제로 플래그 연산 결과가 0인지 여부를 나타낸다. 제로 플래그가 1일 경우 연산 결과는 0,
0일 경우 연산 결과는 0이 아님을 의미한다.
캐리 플래그 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다. 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다.
오버플로우 플래그 오버플로우가 발생했는지를 나타낸다. 오버플로우 플래그가 1일 경우 오버플로우가 발생,
0일 경우 발생하지 않음
인터럽트 플래그 인터럽트가 가능한지를 나타냄 인터럽트 플래그 1일 경우 인터럽트가 가능함을 의미,
0일 경우 불가능함
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타냄 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중,
0일 경우 사용자 모드로 실행 중

 

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

  • 제어장치가 받아들이는 정보
    • 클럭 신호 : 클럭 단위에 맞춰 레지스터 간의 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽는다.
    • 해석해야할 명령어 : 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야할 내용을 알려준다.
    • 플래그 레지스터 속 플래그 값 : ALU 연산에 대한 추가적인 상태 정보.
    • 시스템 버스 중 제어 버스로 전달된 제어 신호 : 외부 장치로 부터 전달된 제어 신호를 받아들인다.

 

 

레지스터

레지스터는 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치이다.

이름 설명
프로그램 카운터 메모리에서 읽어 들일 명령어의 주소를 저장
명령어 레지스터 방금 메모리에서 읽어 들인 명령어를 저장
메모리 주소 레지스터 메모리의 주소를 저장
메모리 버퍼 레지스터 메모리와 주고받을 값(데이터와 명령어)을 저장
플래그 레지스터 ALU 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장
범용 레지스터 데이터와 주소를 모두 저장할 수 있게 범용적으로 저장
스택 포인터 스택의 꼭대기를 가르키는 레지스터. 마지막으로 저장한 값의 위치를 저장
베이스 레지스터 명령이 시작되는 시작 번지를 저장

 

 

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

  • 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식. 스택 포인터는 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터이다. 메모리 안에 스택 영역이 저장되어 있다. 

스택 주소 지정 방식

 

  • 변위 주소 지정 방식 : 오퍼랜드 필드 값과 특정 레지스터의 값을 더하여 유효주소를 얻는 방식
    • 상대 주소 지정 방식 : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식. 
    • 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식. 즉, 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는지 오퍼랜드에 저장된 값을 연산하여 유효 주소를 얻는다.

변위 주소 지정 방식

 

명령어 사이클과 인터럽트

명렁어 사이클과 인터럽트

  • 명령어 사이클 : 프로그램 속 명령어들은 일정한 주기가 반복되며 실행된다.
    • 메모리에 있는 명령어를 CPU로 인출 -> CPU로 가져온 명령어를 실행 
  • 인터럽트 : CPU의 정상적인 작업을 중단하는 신호.
    • 동기 인터럽트 : CPU에 의해 발생하는 인터럽트
    • 비동기 인터럽트(하드웨어 인터럽트)
      • 처리 순서

인터럽트 처리 순서

1) 입출력장치는 CPU에 인터럽트 요청 신호를 보냄

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

3) CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인

4) 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업

5) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행

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

  • 인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램. 인터럽트 핸들러라고도 부른다.
  • 인터럽트 벡터 : 인터럽트 서비스 루틴을 구분하기 위해 식별하기 위한 정보

 

 

 

 

댓글