Book/혼자 공부하는 컴퓨터구조+운영체제

Chapter 4. CPU의 작동 원리

DongHo 2024. 1. 1. 21:32

ALU와 제어장치

ALU

먼저, ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들입니다.
ALU : 연산한 결과값과 플래그를 내보냅니다.

 

플래그 종류 의미 사용 예시
부호 플래그 연산한 결과의 부호를 나타냅니다. 부호 플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미합니다.
제로 플래그 연산결과가 0인지 여부를 나타냅니다. 제로 플래그가 1일 경우 연산 결과는 0, 0일 경우 연산 결과는 0이 아님을 의미합니다.
캐리 플래그 연산 결과 올림수나 빌림수가 발생했는지를 나타냅니다. 캐리 플래그가 1일 경우 올림수나 빌리수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미합니다.
오버플로우 플래그 오버플로우가 발생했는지를 나타냅니다. 오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미합니다.
인터럽트 플래그 인터럽트가 가능한지를 나타냅니다. 인터럽트 플래그가 1일 겨우 인터럽트가 가능함을 의미하고, 0일 경우 인터럽트가 불가능함을 의미합니다.
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타냅니다. 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중임을 의미하고, 0일 경우 사용자 모드로 실행 중임을 의미합니다.

 

제어장치

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

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

  1. 제어장치는 클럭 신호를 받아들입니다.
  2. 제어장치는 '해석해야 할 명령어'를 받아들입니다.
  3. 제어장치는 플래그 레지스터 속 플래그 값을 받아들입니다.
  4. 제어장치는 시스템 버스, 그중에서 제어 버스로 전달된 제어 신호를 받아들입니다.

클럭(Clock) : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위입니다.
플래그(Flag) : ALU 연산에 대한 추가적인 상태 정보 라고 보면됩니다.

제어장치가 내보내는 정보

먼저, 크게 'CPU 외부에 전달하는 제어 신호'와 'CPU 내부에 전달하는 제어 신호'가 있습니다.

'CPU 외부에 전달하는 제어 신호' : 제어 버스로 제어 신호(ex. 메모리에 전달하는 제어 신호와 입출력장치에 전달하는 제어 신호)
'CPU 내부에 전달하는 제어 신호' : ALU에 전달하는 제어 신호(ex. 수행할 연산을 지시), 레지스터에 전달하는 제어 신호(ex. 레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위한 제어 신호)

 

 

레지스터

레지스터(Register) : CPU 내부의 작은 임시저장장치(프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장)
CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 합니다.

 

프로그램 카운터(PC : Program Counter)

메모리에서 가져올 명령어의 주소입니다.(명령어 포인터 IP : Instruction Pointer라고 부르기도 합니다.)

명령어 레지스터(IR : Instruction Register)

방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터입니다.(해석할 명령어)

메모리 주소 레지스터(MAR : Memory Address Register)

메모리의 주소를 저장하는 레지스터입니다.

메모리 버퍼 레지스터(RBR : Memory Buffer Register)

메모리와 주고받을 값(데이터&명령어)을 저장하는 레지스터입니다.
메모리에 쓰고 싶은 값이나 메모리로부터 전달 받은 값은 메모리 버퍼 레지스터를 거칩니다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거칩니다.
(메모리 데이터 레지스터(MDR : Memory Data Register)라고 부르기도 합니다.)

범용 레지스터(General Purpose Register)

다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터입니다.

플래그 레지스터

연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터 입니다.

 

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

스택 주소 지정 방식

스택과 스택 포인터를 이용한 주소 지정 방식
스택 포인터 : 스택의 어디까지 데이터가 채워져 있는지에 대한 표시

변위 주소 지정방식

오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소 얻는 방식

상대 주소 지정 방식

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

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

오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효 주소 얻는 방식

 

 

명령어 사이클과 인터럽트

 

명령어 사이클(Instruction Cycle)

프로그램 속 명령어들은 일정한 주기가 반복되며 실행됩니다. 이 주기를 명령어 사이클 이라고 합니다.

명령어 사이클에는 인출 사이클(Fetch Cycle)과 실행 사이클(Execution Cycle)이 있습니다.
인출 사이클(Fetch Cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
실행 사이클(Execution Cycle) : CPU로 가져온 명령어를 실행하는 단계

 

인터럽트(Intrrupt)

동기 인터럽트(예외(소프트웨어적 인터럽트))

CPU가 예기치 못한 상황을 접했을 때 발생합니다.

비동기 인터럽트(하드웨어 인터럽트)

주로 입출력 장치에 의해 발생합니다.

 

하드웨어 인터럽트

알림과 같은 인터럽트, 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용합니다.

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

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냅니다.
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트를 받아들일 수 있는지 여부를 확인합니다.
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일수 있는지 여부를 확인합니다.
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업합니다.
  5. CPU는  인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
  6. 인터럽트 서비스 루틴이 실행이 끝나면 [4]에서 백업해 둔 작업을 복구하여 실행을 재개합니다.

 

인터럽트 요청 신호

인터럽트는 CPU의 정상적인 실행 흐름을 끊는 것이기에 다른 누군가가 인터럽트하기 전에는 "지금 끼어들어도 되나요?"하고 CPU에 물어봐야합니다.

인터럽트 플래그

위 상황에서, CPU가 인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 활성화되어있어야 합니다.
하지만, 인터럽트 플래그가 활성화되어 있어도 막을 수 있는 인터럽트(Maskable Interrupt)와 막을 수 없는 인터럽트(Non Maskable Interrupt)가 있습니다.

인터럽트 서비스 루틴(ISR : Interrupt Service Routine(인터럽트 핸들러 : Interrupt Handler))

인터럽트를 처리하기 위한 프로그램입니다.
인터럽트 서비스 루틴은 '키보드가 어떤 인터럽트 요청을 보냈을 때는 어떻게 작동한다', '마우스가 어떤 인터럽트 요청을 보냈을 때는 어떻게 작동한다', '프로그램에 어떤 문제가 생겼을 때는 어떻게 작동한다'와 같이 어떤 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보를 이루어진 프로그램입니다.

인터럽트 벡터

인터럽트 서비스 루틴을 식별하기 위한 정보입니다.(각각의 인터럽트를 구분하기 위한 정보)

 

 

Reference
Book<혼자공부하는 컴퓨터구조+운영체제>
Image(https://www.youtube.com/watch?v=lehWiAsIDrQ&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=11),(https://www.youtube.com/watch?v=fSCHizcezTs&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=12),(https://www.youtube.com/watch?v=3Yz7OnVUM28&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=13)