혼공컴운 챕터 4. CPU

김민영·2023년 1월 13일
0

혼공학습단

목록 보기
2/22
post-thumbnail

4-1 ALU와 제어장치

ALU

  • ALU : 연산 수행
  • 레지스터를 통해 피연산자를 받고, 제어장치로부터 제어 신호 받음.
  • 결과는 레지스터에 일시적으로 저장, 플래그 레지스터에 플래그 보냄
    • 플래그 레지스터에 저장

플래그 종류 ( 연산 결과 - 플래그 )

  • 부호 플래그 : 연산 결과의 부호. 음수면 1, 양수면 0.
  • 제로 플래그 : 연산 결과 0 여부. 0이면 1, 0이 아니면 0.
  • 캐리 플래그 : 올림수, 내림수 발생 여부. 올림수, 내림수 발생시 1, 아니면 0.
  • 오버플로우 플래그 : 오버플로우 발생 여부. 발생시 1, 아니면 0.
    (오버플로우 : 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황)
  • 인터럽트 플래그 : 인터럽트 가능 여부. 가능시 1, 아니면 0.
  • 슈퍼바이저 플래그 : 커널 모드인지 사용자 모드인지. 커널 모드면 1, 사용자 모드면 0.

제어장치

  • 제어장치 : 제어 신호 내보내고, 명령어 해석.

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

  1. 클럭 신호
    • 클럭 : 컴퓨터 부품들이 동작하는 시간 단위.
  2. 해석해야 할 명령어
    • 명령어 레지스터 : CPU가 해석해야할 명령어 있음.
    • 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석, 제어신호 발생 - 컴퓨터 부품들이 수행해야 할 내용 전달.
  3. 플래그 레지스터 속 플래그 값
    • 제어신호 발생 시 참고.
  4. 시스템 버스 - 제어 버스로 전달된 제어 신호
    • CPU 외에도 CPU 외부 장치 (입출력장치) 등 외부러부터 전달된 제어신호 받아들임.

제어장치가 내보내는 정보

  1. CPU 외부에 전달하는 제어 신호 == 제어 버스로 제어 신호 내보냄.
    • 메모리에 전달하는 제어 신호
    • 입출력장치(보조기억장치)에 전달하는 제어 신호
  2. CPU 내부에 전달하는 제어 신호
    • ALU에 전달하는 제어 신호 : 연산 수행 지시
    • 레지스터에 전달하는 제어 신호 : 레지스터 간 데이터 이동, 레지스터에 저장된 명령어 해석

4-2 레지스터

레지스터 종류

  • 프로그램 카운터
  • 명령어 레지스터
  • 메모리 주소 레지스터
  • 메모리 버퍼 레지스터
  • 플래그 레지스터
  • 범용 레지스터
  • 스택 포인터
  • 베이스 레지스터

프로그램 카운터 Program Counter

  • 명령어 포인터 Instruction Pointer.
  • 메모리에서 가져올 명령어의 주소를 저장.

명령어 레지스터 Instrction Register

  • 해석할 명령어 ( 방금 메모리에서 읽어들인 명령어 ) 저장.
  • 제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한 후 제어신호 내보냄.

메모리 주소 레지스터

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

메모리 버퍼 레지스터

  • 메모리 데이터 레지스터
  • 메모리와 주고받을 값(데이터, 명령어)를 저장.

범용 레지스터

  • 데이터와 주소 모두 저장 가능.
  • 일반적으로 다양하고 자유롭게 사용.

플래그 레지스터

  • 연산결과, CPU 상태에 대한 부가적인 정보 저장

메모리에 저장된 프로그램을 실행하는 과정

  • CPU의 메모리에 실행할 프로그램이 각 주소에 담겨있음.(1101이 1000번지에 저장되어있다고 가정)
  • 프로그램 카운터에 실행할 명령어의 주소가 담겨있음. (1000번지)
  • 프로그램 카운터에서 메모리 주소 레지스터로 명령어 주소가 이동. (1000번지)
  • 제어장치로부터 메모리 읽기라는 제어 신호와 메모리 주소 레지스터가 주소 버스를 통해 메모리의 1000번지에 도착
  • 메모리의 1000번지에 있는 1101 데이터는 데이터 버스를 통해 메모리 버퍼 레지스터로 전달
  • 프로그램 카운터는 1000에서 1001로 증가
  • 메모리 버퍼 제니스터에 저장된 값인 1101은 명령어 레지스터로 이동
  • 제어장치는 명령어 레지스터의 명령어를 해석하고 제어신호 발생

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

스택 주소 지정 방식

  • 스택 포인터 : 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터

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

상대 주소 지정 방식

  • 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
  • if문 처럼 분기하여 특정 주소의 코드를 실행할 때 사용.
  • 프로그램 카운터에 읽어들일 명령어의 주소가 있음. 만일 오퍼랜드가 -3이면, 명령어 주소의 -3 위치에 있는 메모리 주소에 있는 명령어 실행

베이스 레지스터 주소 지정 방식

  • 오퍼렌드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
  • 베이스 레지스터 : 기준 주소
  • 오퍼랜드 : 기준 주소로부터 떨어진 거리
  • 베이스 레지스터에 200이 있으면 200이 기준이 되어서 오퍼랜드 값만큼 떨어진 주소의 명령 실행.

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

명령어 사이클

  • 명령어 사이클 : 프로그램 속 명령어들이 일정한 주기로 반복하며 실행되는 것. 하나의 명령어가 처리되는 주기.
  • 인출 사이클 : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클 : CPU로 가져온 명령어를 실행하는 단계. 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어신호를 발생. CPU 실행!
  • 간접 사이클 : 간접 주소 지정 방식에서 명령어를 실행하기 위해 다시 메모리 접근하는 단계
    • 간접 주소 지정 방식 : 오퍼랜드 필드에 유효 주소의 주소를 명시. 가져온 값 (주소) 에 있는 값을 가져와야 하므로 다시 메모리 접근 필요.

인터럽트

  • 인터럽트 : CPU의 작업을 방해하는 신호
  • 동기 인터럽트 ( 예외 ) - 폴트, 트랩, 중단, 소프트웨어 인터럽트
    • 프로그래밍 상 오류. CPU는 하던 일을 중단하고 해당 예외 처리. 예외를 처리하면 다시 본래 하던 작업으로 돌아와 실행 재개.
    • 종류
      • 폴트 : 예외 처리 직후, 예외가 발생한 명령어부터 실행 재개.
      • 트랩 : 예외 처리 직후, 예외가 발생한 명령어 다음부터 실행 재개. 디버깅 시 사용.
      • 중단 : 실행 중인 프로그램을 강제로 중단시키는 오류 발견시 발생.
      • 소프트웨어 인터럽트 : 시스템 호출 발생 시.
  • 비동기 인터럽트 ( 하드웨어 인터럽트 )
    • 과정
      • 키보드, 마우스와 같은 입출력장치가 입력을 받아들이면 CPU에 인터럽트 요청 신호를 보냄
      • CPU는 실행 사이클이 끝나고 명령어를 인출하기 전, 항상 인터럽트 여부를 확인
      • CPU가 인터럽트 여부를 확인하면, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인
      • 인터럽트를 받아들일 수 있으면, CPU는 현재까지 작업을 백업
      • CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
        • CPU는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달 받음.
      • 인터럽트 서비스 루틴 실행이 끝나면 백업해둔 작업 복구하고 실행 재개
    • 인터럽트 서비스 루틴 == 인터럽트 핸들러. 인터럽트를 처리하기 위한 프로그램. ex) 마우스가 어떤 인터럽트 요청을 보내면, 어떻게 작동한다.
    • 인터럽트 벡터 : 인터럽트 서비스 루틴을 식별하기 위한 정보. 인터럽트에 해당하는 인터럽트 서비스 루틴의 시작 주소를 찾아가도록 함.

미션
p.125 2번

profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글