CPU 작동방식

augusstt·2022년 10월 16일
0

CS

목록 보기
1/11
post-thumbnail

이 글은 "혼자 공부하는 컴퓨터 구조 + 운영체제"를 읽고 이해한 내용을 복습하기 위해 작성하는 글입니다.

이미지 출처 : 혼자 공부하는 컴퓨터 구조 + 운영체제

CPU 작동원리

1. ALU와 제어장치

  • ALU : 레지스터를 통해 피연산자를 받아들이고, 제어신호를 받아들인다.

    • 결괏값을 메모리가 아닌 레지스터에 저장한다.

    • 결과 계산 값과 플래그를 내보낸다 ( 플래그 : 연산 결과에 대한 추가적인 정보상태)

    • 플래그 들은 플래그 레지스터라는 레지스터에 저장된다.

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

    1. 클럭 신호를 받아들인다

    2. 해석해야 할 명령어를 받아들인다

    3. 플래그 레지스터 속 플래그 값을 받아 들인다.

    4. 시스템 버스(제어버스)로 전달된 제어신호를 받아들인다.

2. 레지스터

프로그램 명령어와 데이터가 실행 전/후로 저장되는 곳

  • 레지스터의 종류

    각각의 레지스터가 어떤 역할을 하는지 이해하고 암기할 필요는 없다.

    1. 프로그램 카운터

      • 메모리에서 가져올 명령어(메모리에서 읽어들일 명령어)의 주소

      • "명령어 포인터" 라고도 부른다

    2. 명령어 레지스터

      • 메모리에서 읽어들인 명령어를 저장하는 레지스터

      • 제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한 뒤 제어신호를 보낸다.

    3. 메모리 주소 레지스터

      • 메모리의 주소를 저장하는 레지스터
    4. 메모리 버퍼 레지스터

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

      • 일반적인 상황에 자유롭게 사용 할 수 있는 레지스터
    6. 플래그 레지스터

      • 연산 결과 및 CPU상태에 대한 부가적인 정보를 저장하는 레지스터

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

  1. 스택 주소 지정 방식

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

      스택 포인터 : 스택의 꼭대기를 가르키는 레지스터

    • 스택에 데이터가 추가 될때마다 스택 포인터의 값이 달라진다.
      stack
  2. 변위 주소 지정 방식

    • 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 주소를 얻어내는 방식
    • 연산 코드 필드 / 레지스터 필드 / 오퍼랜드 필드로 구성

      오퍼랜드 : 연산에 사용될 데이터가 저장된 위치

    1. 상대 주소 지정방식
      • 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는다.
      • if문과 비슷하게 특정 주소의 코드를 실행시 사용
    2. 베이스 레지스터 지정 방식
      • 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식

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

  1. 명령어 사이클
    - 프로그램 속 명령어 들은 일정한 주기를 반복하며 실행되는데, 이 주기를 일컫는 말
    사이클

    인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
    실행 사이클 : CPU로 가져온 명령어를 실행하는 단계 (제어신호 발생)
    간접 사이클 : 인출 사이클 후에 바로 명령어를 실행할 수 없을때 실행 (ex:간접 주소 지정 방식)

  2. 인터럽트

    • CPU가 수행중인 작업이 방해되는 신호
    1. 동기 인터럽트

      • CPU에 의해 발생하는 인터럽트 (ex : 프로그래밍 오류)

      • "예외"라고도 부른다.

    2. 비동기 인터럽트

      • 주로 입/출력 장치에 의해 발생하는 인터럽트

      • "하드웨어 인터럽트" 라고도 부른다.

      • CPU가 효율적으로 명령어를 처리하기 위해 사용한다.

      • 인터럽트 처리 순서
        1. 입출력장치가 CPU에 인터럽트 요청신호 발신
        2. 실행 사이클이 끝나고 명령어 인출 전, 인터럽트 확인
        3. CPU가 인터럽트 요청 확인 후, 인터럽트 플래그를 통해 인러텁트 수신 여부 확인
        4. 인터럽트를 받을수 없다면 현재까지의 작업 백업
        5. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
        6. 루틴 실행이 끝나면 백업한 작업을 복구하여 실행 재개

		- 인터럽트 요청신호 : CPU작업을 방해하는 인터럽트에 대한 요청
        - 인터럽트 플래그 : 인터럽트 요청 신호를 수용할지/무시할지 결정하는 비트
        - 인터럽트 벡터 : 인터럽트 서비스 루틴의 시작 주소르 포함하는 식별정보
        - 인터럽트 서비스 루틴 : 인터럽트를 처리하는 프로그램
profile
https://augusstt-note.gitbook.io/aug-note 로 블로그 이전했습니다!

0개의 댓글