혼자 공부하는 컴퓨터구조 + 운영체제 4장

doxxx·2023년 2월 3일
1
post-thumbnail

Ch.04 CPU의 작동 원리

4.1 ALU와 제어장치

ALU

ALU는 레지스터로부터 피연산자를, 제어장치로부터 제어 신호를 받아 연산을 수행한다.

받아들인 정보를 바탕으로, 레지스터에 결괏값 또는 플래그를 내보낸다.

플래그는 연산 결과에 대한 추가적인 상태 정보를 담고 있다.

제어장치

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

  • 클럭 신호
  • 명령어: 명령어 레지스터로부터 받아들인 명령어
  • 플래그: 플래그 레지스터로부터 받아들인 플래그
  • 제어 신호: 시스템 버스의 제어 버스로부터 받아들인 제어 신호

제어장치가 제어 신호를 내보내는 목적지

  • CPU 내부의 레지스터
  • CPU 내부의 ALU
  • CPU 외부의 메모리 또는 입출력 장치(제어 버스)

4.2 레지스터

레지스터는 CPU 내부의 작은 임시저장장치로, 프로그램 속 명령어를 저장하거나 연산에 사용되는 데이터를 저장한다.

반드시 알아야 할 레지스터

CPU 마다 레지스터의 종류가 다르다.

공통적인 레지스터는 8개이다.

  • 프로그램 카운터(PC, Program Counter): 다음에 실행할 명령어의 주소를 저장한다.
  • 명령어 레지스터(IR, Instruction Register): 현재 실행 중인 명령어를 저장한다.
  • 메모리 주소 레지스터(MAR, Memory Address Register): 메모리에 접근할 때 사용하는 주소를 저장한다.
  • 메모리 버퍼 레지스터(MBR, Memory Buffer Register): 메모리에 접근할 때 사용하는 데이터를 저장한다.
  • 플래그 레지스터(FR, Flag Register): 연산 결과에 대한 상태 정보를 저장한다.
  • 범용 레지스터(AX, BX, CX, DX): 연산에 사용되는 데이터를 저장한다.
  • 스택 포인터(SP, Stack Pointer): 스택의 최상위 주소를 저장한다.
  • 베이스 포인터(BP, Base Pointer): 스택의 최하위 주소를 저장한다.(기준 주소)

특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식

스택 주소 지정 방식은 스택 포인터(SP) 레지스터를 이용하여 스택의 주소를 지정하는 방식이다.

특정 레지스터 이용한 주소 지정 방식(2): 변위 주소 지정 방식

오퍼랜드 필드 값(변위)을 이용하여 유효 주소를 계산하는 방식이다.

  • 변위 주소 지정 방식은 오퍼랜드 필드값(변위)과 특정 레지스터를 이용하여 유효 주소를 지정한다.
  • 상대 주소 지정 방식은 오퍼랜드 필드값(변위)과 프로그램 카운터(PC) 레지스터를 이용하여 유효 주소를 지정한다
  • 베이스 레지스터 주소 지정 방식은 오퍼랜드 필드값(변위)과 베이스 레지스터(BP) 레지스터를 이용하여 유효 주소를 지정한다.

확인 문제

  1. 설명에 맞는 레지스터를 보기에서 찾아 빈칸을 채워보세요.

플래그 레지스터: 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터
프로그램 카운터: 메모리에서 가져올 명령어의 주소를 저장하는 레지스터
범용 레지스터: 데이터와 주소를 모두 저장할 수 있는 레지스터
명령어 레지스터: 해석할 명령어를 저장하는 레지스터

4.3 명령어 사이클과 인터럽트

명령어 사이클

하나의 명령어를 처리하는 과정을 명령어 사이클이라고 한다.

인출 사이클(Fetch Cycle): 명령어를 메모리에서 가져오는 과정
실행 사이클(Execute Cycle): 명령어를 실행하는 과정
간접 사이클(Indirect Cycle): 간접 주소 지정 방식을 사용하는 명령어를 처리하는 과정

인터럽트

인터럽트는 CPU의 작업을 방해하는 신호를 말한다.

동기 인터럽트(Synchronous Interrupt): CPU에 의해 발생하는 인터럽트. 예외라고도 한다. 폴트, 트랩, 중단, 소프트웨어 인터럽트 등이 있다.

비동기 인터럽트(Asynchronous Interrupt): 외부 장치에 의해 발생하는 인터럽트. 하드웨어 인터럽트라고도 한다.

하드웨어 인터럽트: 알림과 같은 역할을 하는 인터럽트. 예를 들어, 타이머 인터럽트, 키보드 인터럽트 등이 있다.

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

  • 입출력 장치는 CPU에 인터럽트 요청 신호를 보낸다.
  • CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 요청 신호를 확인한다.
  • CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  • 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
  • CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
  • 인터럽트 서비스 루틴 실행이 끝나면 CPU는 백업한 작업을 복원한다.

인터럽트 요청 신호: 인터럽트 요청을 CPU에 알리는 신호. 플래그 레지스터의 인터럽트 플래그를 통해 인터럽트 요청을 확인한다.

하드웨어 인터럽트에는 인터럽트 플래그로 막을 수 있는 인터럽트(maskable interrupt)와 막을 수 없는 인터럽트(non-maskable interrupt)가 있다.

인터럽트 서비스 루틴: 인터럽트가 발생했을 때 실행되는 루틴으로 메모리에 저장된다. 인터럽트 벡터를 참조하여 실행된다.

인터럽트 벡터: 인터럽트 서비스 루틴의 주소를 저장한 테이블. 각각의 인터럽트를 구분하기 위한 정보를 가지고 있다.

인터럽트 벡터 테이블: 인터럽트 벡터를 모아놓은 테이블. 인터럽트 벡터 테이블은 메모리에 저장된다.

0개의 댓글