[혼공컴운]2주차_Chap04 | CPU의 작동원리

곽나현·2024년 1월 9일
0

혼공컴운

목록 보기
3/16
post-thumbnail
post-custom-banner

⚪학습목표

  • ALU와 제어장치에 대해 학습한다.
  • 레지스터의 종류와 역할에 대해 학습한다.
  • 명령어 사이클을 이해한다.
  • 인터럽트 개념을 이해한다.

🎇 ALU와 제어장치

CPU 내부에는 계산을 담당하는 ALU, 명령어를 읽고, 해석하고, 실행하는 제어장치, 작은 임시 저장 장치인 레지스터가 있다.
➡ 그 중 ALU와 제어장치에 대해 알아보자

🔗ALU

받아들이는 정보
피연산자레지스터를 통해 피연산자를 받아들인다.
수행할 연산제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다.

내보내는 정보
특정 숫자나 문자, 메모리 주소바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장된다.
플래그연산 결과에 대한 추가적인 상태 정보

➡ ALU가 연산할 때 마다 결과를 메모리에 저장한다면 CPU는 메모리에 자주 접근하게 되고, 이는 프로그램 속도를 늦추기 때문이다.

➡ 대표적인 플래그
부호플래그 : 연산한 결과의 부호를 나타낸다.

  • 부호플래그가 1일 경우: 연산 결과가 음수
  • 부호플래그가 0일 경우: 연산 결과가 양수

제로 플래그 : 연산 결과가 0인지 여부를 나타낸다.

  • 제로 플래그가 1일 경우: 연산 결과가 0
  • 제로 플래그가 0일 경우: 연산 결과가 0이 아님

캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.

  • 캐리 플래그가 1일 경우: 올림수나 빌림수가 발생
  • 캐리 플래그가 0일 경우: 올림수나 빌림수가 발생하지 않음

오버플로우 플래그 : 오버플로우가 발생했는지를 나타낸다.

  • 오버플로우 플래그가 1일 경우: 오버플로우가 발생
  • 오버플로우 플래그가 0일 경우: 오버플로우가 발생하지 않음

인터럽트 플래그 : 인터럽트가 가능한지를 나타낸다.

  • 인터럽트 플래그가 1일 경우: 인터럽트 가능
  • 인터럽트 플래그가 0일 경우: 인터럽트 불가능

슈퍼바이저 플래그 : 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다.

  • 슈퍼바이저 플래그가 1일 경우: 커널 모드로 사용 중
  • 슈퍼바이저 플래그가 0일 경우: 사용자 모드로 사용 중

➡ 이러한 플래그들은 플래그 레지스터에 저장된다.

🔗 제어장치

제어장치제어 신호를 내보내고, 명령어를 해석하는 부품이다. 여기서 제어 신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호이다.

받아들이는 정보
클럭 신호클럭이란 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위이다.
명령어명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.
플래그플래그 값을 받아들이고 이를 참고하여 제어 신호를 발생시킨다.
제어 신호제어 버스를 통해 외부로부터 전달된 제어신호를 받아들이기도 한다.

내보내는 정보
CPU 외부로 내보내는 정보메모리에 저장된 값을 읽거나 새로운 값을 쓰기 위해 메모리에 전달하는 제어신호, 입출력장치의 값을 읽거나 새로운 값을 쓰기 위해 입출력장치(보조기억장치 포함)에 전달하는 제어신호
CPU 내부로 내보내는 정보수행할 연산을 지시하기 위해 ALU에 전달하는 제어신호, 레지스터 간 데이터 이동이나 레지스터에 저장된 명령어 해석을 위해 레지스터에 전달하는 제어신호

🎇 레지스터

◼ 반드시 알아야 할 8개의 레지스터

프로그램 카운터 (PC: Program Counter)메모리에서 읽어 들일 명령어의 주소 저장. 명령어 포인터(IP: Intruction Pointer)라고 부르는 CPU도 있다.
명령어 레지스터 (IR: Instruction Register)방금 메모리에서 읽어 들인 명령어 저장. 제어 장치는 명령어 레지스터 속 명령어를 받아 들이고 이를 해석한 뒤 제어 신호를 내보낸다.
메모리 주소 레지스터 (MAR: Memory Address Register)메모리의 주소를 저장. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 MAR을 거치게 된다.
메모리 버퍼 레지스터 (MBR: Memory Buffer Register)메모리와 주고받을 값(데이터와 명령어)를 저장. 메모리에 쓰고 싶은 값이나 메모리로부터 전달 받은 값은 MBR을 거치게 된다.
범용 레지스터 (General Purpose Register)다양하고 일반적인 상황에서 자유롭게 사용 가능한 레지스터. 데이터와 주소 모두 저장 가능. CPU에는 여러 개의 범용 레지스터들이 있다.
플래그 레지스터 (Flag Register)연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장
스택 포인터 (SP: Stack Pointer)스택의 최상위 주소를 저장
베이스 레지스터베이스 레지스터에 저장된 값은 기준 주소로 사용

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

스택 주소 지정 방식

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

변위 주소 지정 방식

변위 주소 지정방식을 사용하는 명령어는 연산코드 필드, 레지스터 필드, 오퍼랜드 필드로 구성된다.

변위 주소 지정 방식_상대 주소 지정 방식

오퍼랜드프로그램 카운터(PC)의 값을 더하여 유효 주소를 얻는 방식

상대 주소 지정 방식분기하여 특정 주소의 코드를 실행할 때 사용된다.

변위 주소 지정 방식_베이스 레지스터 주소 지정 방식

오퍼랜드베이스 레지스터의 값을 더하여 유효주소를 얻는 방식

베이스 레지스터기준 주소로, 오퍼랜드기준 주소로부터 떨어진 거리로서의 역할을 한다.

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

🔗 명령어 사이클

프로그램 속 각각의 명령어들은 일정한 주기가 반복되어 실행되는데 이 주기를 명령어 사이클이라고 한다.

🔗 명령어 사이클의 첫 번째 과정_ 인출 사이클

메모리에 있는 명령어를 CPU로 가지고 오는 단계

🔗 명령어 사이클의 두 번째 과정_ 실행 사이클

CPU로 가져온 명령어를 실행하는 단계

➡ 프로그램을 이루는 수많은 명령어는 일반적으로 인출 사이클실행 사이클반복하며 실행되지만, 모든 명령어가 그런 것은 아님
➡ 예로, 간접 주소 지정 방식은 메모리에 유효 주소의 주소가 저장되어 있기 때문에 유효 주소를 알아 내려면 메모리 접근이 한 번 더 필요함

🔗 간접 사이클

메모리 접근이 더 필요한 경우 실행되는 사이클

🔗 인터럽트 사이클

◼ 인터럽트란?
CPU의 작업을 방해하는 신호

◼ 인터럽트의 2가지 종류

  • 동기 인터럽트(예외) : CPU에 의해 발생하는 인터럽트
  • 비동기 인터럽트(하드웨어 인터럽트) : 입출력장치에 의해 발생하는 인터럽트
    하드웨어 인터럽트는 입출력 작업 중에도 CPU로 하여금 효율적으로 명령어를 처리할 수 있게 함(완료 여부 확인을 할 필요가 없으므로)

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

  1. 입출력장치CPU인터럽트 요청 신호를 보낸다.
  2. CPU실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
  3. CPU인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 스택백업한다.
  5. CPU인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해둔 작업을 복구하여 실행을 재개한다.
인터럽트 요청 신호CPU의 작업을 방해하는 인터럽트에 대한 요청
인터럽트 플래그인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트. 플래그 레지스터의 인터럽트 플래그가 활성화 되어있어야 인터럽트 실행이 가능
인터럽트 서비스 루틴 (ISR: Interrupt Servise Routine)인터럽트를 처리하는 프로그램. 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램
인터럽트 벡터인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별정보

post-custom-banner

0개의 댓글