1. ALU와 제어장치

ALU(산술 연산 장치)

  • CPU의 중요한 구성 요소 중 하나로, 다양한 산술 연산(덧셈, 뺄셈, 곱셈, 나눗셈 등)과 논리 연산(AND, OR, NOT 등)을 수행
  • 입력된 두 개의 데이터(피연산자)를 취해서 연산(제어신호)을 수행하고, 결과를 출력
  • 레지스터에서 데이터를, 제어장치로부터 제어신호를 받음
  • 연산을 수행한 결과는 일시적으로 레지스터에 저장됨
  • 연산 결과 외에 플래그를 레지스터에 저장함
    • 플래그 레지스터 : 연산 결과에 대한 추가적인 상태 정보

제어 장치

  • 제어 신호를 내보내고 명령어를 해석
    • 제어 신호 : 컴퓨터 부품을 관리하고 작동시키기 위한 전기 신호
    • 제조사마다 방식은 조금씩 다름
  • 제어 장치가 받는 정보들
    1. 클럭 신호를 받음
    2. 해석할 명령어를 받음
    3. 플래그 레지스터 속 플래그 값을 받음
    4. 시스템 버스(제어 버스)로부터 제어 신호 값을 받음
  • 제어 장치가 CPU외부로 제어 버스를 통해 내보내는 제어 신호
    1. 메모리에 전달하는 제어 신호
      메모리에 저장된 값을 읽거나 새로운 값을 쓰는 경우
    2. 입출력 장치에 전달하는 제어 신호
      입출력 장치의 값을 읽거나 새로운 값을 쓰는 경우
  • 제어 장치가 CPU 내부에 전달하는 제어 신호
    1. ALU에 전달하는 제어 신호
      수행할 연산을 지시
    2. 레지스터에 전달하는 제어 신호
      레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위해

2. 레지스터

프로그램 실행 전후로 명령어와 데이터가 레지스터에 저장되기 때문에 레지스터 값을 보고 실행 흐름을 알 수 있음

중요한 레지스터

프로그램 카운터(명령어 포인터)

  • 메모리에서 가져올 명령어의 메모리 주소를 저장함

명령어 레지스터

  • 프로그램 카운터에 있는 명령어의 메모리 주소에서 명령어를 읽어서 저장함
  • 제어장치는 명령어 레지스터의 명령어를 받아서 해석하고 제어신호 보냄

메모리 주소 레지스터

  • 메모리의 주소를 저장함

메모리 버퍼 레지스터

  • 메모리와 주고받을 값을 저장함

플래그 레지스터

  • ALU 연산 결과에 따른 플래그를 저장함
  • 또는 CPU 상태에 대한 부가 정보를 저장함

범용 레지스터

  • 다양한 상황에 자유롭게 사용하는 레지스터
  • 데이터와 주소 모두 저장할 수 있음
  • CPU에는 여러 개의 범용 레지스터가 있음

주소 지정 방식

1. 스택 주소 지정 방식

  • 스택 포인터를 이용해 주소를 지정하는 방식
  • 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
  • 아래서부터 차곡차곡 데이터를 저장하는데, 앞으로 데이터를 채울 주소를 스택 포인터가 가르키고 있음
  • 후입 선출 방식으로 데이터를 넣고 뺌
  • 스택은 메모리 영역에 있음(스택 영역)

2. 변위 주소 지정 방식

  • 베이스 레지스터를 이용해 주소를 지정하는 방식

  • 오퍼랜드 필드의 값과 특정 레지스터 값을 더해서 유효 주소를 얻어내는 방식

  • 이때 명령어는 연산 코드 필드, 레지스터 필드, 주소를 담은 필드가 있음

  • 상대 주소 지정 방식
    오퍼랜드와 프로그램 카운터를 더해서 유효주소를 얻는 방식
    실행할 명령어에서 오퍼랜드의 값을 더해서 유효주소 값을 얻는다.

  • 베이스 레지스터 주소 지정 방식
    오퍼랜드와 베이스 레지스터의 값을 더해서 유효주소를 얻는 방식
    베이스 레지스터의 값이 기준 주소, 오퍼랜드는 기준으로부터 떨어진 거리의 값을 가짐

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

명령어 사이클

  • CPU가 하나의 명령어를 처리하는 정형화된 흐름
  1. 인출 사이클 : 명령어를 메모리에서 CPU를 가져온다

    간접 주소 지정 방식이라면 유효 주소를 찾는 과정이 필요

    • 간접 사이클
  2. 실행 사이클 : CPU로 가져온 명령어를 실행한다.
    제어장치가 명령어 레지스터에 담긴 값을 해석하고 제어 신호를 발생시키는 단계

인터럽트

  • CPU의 명령어 사이클의 흐름을 끊는 신호

    인터럽트의 종류

    • 동기 인터럽트
      • CPU에 의해 발생하는 인터럽트(프로그래밍상의 오류, 예외)
    • 비동기 인터럽트
      • 입출력 장치에 의해 주로 발생하는 인터럽트
      • 프린터 등의 장치는 작업이 다 됐음을 알리는 인터럽트 발생
      • 키보드 등의 장치는 입력이 들어왔음을 알리는 인터럽트 발생
      • = 하드웨어 인터럽트

하드웨어 인터럽트

  • 알림과 같은 인터럽트
  • 입출력 과정 도중에서도 효율적으로 명령어를 처리하기 위한 인터럽트

처리 과정
1. 입출력장치가 CPU에 인터럽트 요청 신호를 보냄
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 (제어 신호를 발생시키기 전) 항상 인터럽트의 유무를 확인함
3. 요청이 들어왔으면 인터럽트 플래그를 통해서 현재 인터럽트를 받아들일 수 있는지 확인
4. 인터럽트를 받아들일 수 있다면 지금까지 실행한 작업을 백업해준다
5. 인터럽트 백터를 참조해서 인터럽트 서비스 루틴을 실행
6. 인터럽트 서비스 루틴이 끝나면 백업해둔 작업을 복구해서 다시 실행

  • 인터럽트 플래그
    플래그 레지스터의 플래그 중 하나
    플래그가 활성화되어 있어야 인터럽트를 받을 수 있음
    중요한 작업 중일 때는 불가능으로 설정되어 있음
    우선순위가 가장 높은 인터럽트는 제일 먼저 처리되어야 하기 때문에 불가능으로 설정되어 있어도 무시할 수 없음(정전이나 하드웨어 고장)

  • 인터럽트 서비스 루틴
    인터럽트를 처리하기 위한 프로그램
    인터럽트가 발생했을 때 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램
    = 인터럽트 핸들러

인터럽트 벡터

  • 입출력 장치마다 다른 서비스 루틴을 구분하기 위한 벡터
    인터럽트 서비스 루틴의 시작 주소를 알아내고 그 주소부터 실행해서 서비스 루틴을 실행함
  • 인터럽트 + 인터럽트 벡터
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글