CPU는 컴퓨터에서 가장 핵심적인 역할을 수행하는 부분. '인간의 두뇌'에 해당
CPU는 프로세서라고도 불리며, 컴퓨터 시스템에서 가장 중요한 부분 중 하나
제어 유닛은 CPU의 다른 부분들을 조정하고 제어하는 역할을 합니다.
명령어를 해석하고 실행하는 작업을 담당합니다.
제어 유닛은 CPU의 주변 장치와 연결하여 데이터와 명령어를 주고 받을 수 있도록 합니다.
명령어 레지스터에서 해석할 명령어를 받아온다
제어장치는 그 명령어들을 받아 해석해서 제어 신호를 내보낸다.
플래그 레지스터에서 플래그 값도 받아들인다.
제어신호도 받는다. ex 입출력장치 같은것들
제어신호는 cpu 내부와 외부로 나눔
제어 신호를 발생시키고 명령어를 해석하는 장치
산술 논리 유닛은 산술 연산과 논리 연산을 수행하는 부분입니다.
숫자를 더하거나 빼는 등의 산술 연산과 AND, OR, NOT 등의 논리 연산을 처리합니다.
계산하는 장치
계산을 하기 위해서는 피연산자와 수행할 연산이 필요
피연산자는 레지스터로 부터, 수행할 연산은 제어장치로 부터 받아온다.
결괏값을 레지스터에 저장 ex. 숫자, 문자, 주소...0과 1로 표현된 것들
메모리대신 레지스터에 저장하는 이유 : cpu가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 빠름
플래그 레지스터 : 연산 결과에 대한 부가 정보를 저장
레지스터는 cpu 내부의 작은 임시저장장치
프로그램 속 명령어, 데이터는 실행 전후로 레지스터에 저장
row 레벨 개발자들은 레지스터 안에 어떤 값이 담기는지 관찰하는 일이 생길수있음
cpu 내부에는 다양한 레지스터들이 있고 각기 다른 역할을 가진다.
cpu 마다 레지스터 종류는 다를수 있지만 공통적인 사항을 다뤄보자
순차적인 실행 흐름이 끊기는 경우
- 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시 ex. jump
- 인터럽트 발생 시
스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
(스택 포인터 : 스택의 꼭대기를 가리키는 레지스터)
변위 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소 얻기
레지스터는 CPU 내부의 작은 기억 공간으로, 매우 빠른 데이터 접근이 가능합니다.
중앙 처리 장치는 데이터를 레지스터에 가져와서 처리하고, 다시 레지스터에 저장합니다.
레지스터는 CPU 성능에 매우 중요한 역할을 합니다.
CPU(중앙 처리 장치)는 컴퓨터의 핵심 구성 요소로서, 프로그램의 명령어를 해석하고 실행하여 모든 계산과 데이터 처리를 담당합니다.
컴퓨터에서 모든 연산은 CPU를 통해 이루어진다.
인출-실행-인출-실행 계속 반복됨
간접 사이클 : 바로 실행이 안되고 메모리에 접근이 더 하고 실행하는 사이클이 있음
CPU는 프로그램이 저장된 메모리에서 다음에 실행해야 할 명령어를 가져옵니다.
CPU 내부에는 프로그램 카운터(Program Counter, PC)라는 레지스터가 있으며, 이는 다음에 실행할 명령어의 주소를 가리킵니다.
PC는 메모리에서 명령어를 가져오기 위해 사용되는 주소 포인터 역할을 합니다.
CPU는 인출한 명령어를 이해하고 해석합니다.
명령어는 CPU가 인식하는 특정한 형식과 규칙에 따라 구성되어 있습니다. 이 형식에 따라 어떤 작업을 수행해야 하는지를 결정합니다.
CPU는 해석된 명령어를 바탕으로 실제 작업을 수행합니다.
산술 논리 연산(ALU, Arithmetic Logic Unit)이 이 단계에서 중요한 역할을 합니다.
덧셈, 뺄셈, 곱셈, 논리 연산 (AND, OR, NOT 등), 시프트 연산 등이 이루어집니다.
데이터를 메모리에서 로드하거나 저장하는 등의 메모리 접근도 이 단계에서 처리됩니다.
실행 단계에서 계산된 결과를 레지스터나 메모리에 저장합니다.
레지스터는 CPU 내부의 작은 기억 공간으로, 연산 중간 결과를 저장하거나 다음 명령어에 필요한 데이터를 보관하는 역할을 합니다.
메모리에 결과를 저장하면 나중에 필요할 때 다시 사용할 수 있습니다.
인터럽트는 동기 인터럽트와 비동기 인터럽트로 나눈다.
명령어 사이클을 방해하는 요소
알림(세탁기 완료 알림, 전자레인지 조리 알림)과 같은 역할
입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용함
입출력 장치는 CPU에 비해 느리다
인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다.
CPU가 인터럽트 요청을 받아들이려면? 인터럽트 플래그를 확인하면 된다.
정전같은 무조건 실행해야하는 막을 수 없는 인터럽트도 존재
CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행한다.
인터럽트 서비스 루틴이란, 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램이다.
ex.키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다.
인터럽트 서비스 루틴도 프로그램이기에 메모리에 저장한다.
인터럽트 백터 : 각각의 인터럽트를 구분하기 위한 정보
인터럽트 서비스마다 인터럽트 시작주소 가짐
CPU가 인터럽트를 처리한다는 말은 "인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다."는 말이다.
그리고 인터럽트의 시작 주소는 인터럽트 백터를 통해서 알 수 있다.
그럼 인터럽트 날때 원래 실행중인 프로그램의 레지스터 정보들은 어떻게 되나? -> 인터럽트 나기 전까지 작업내용을 스택에 저장한다.