본문 바로가기
CS/컴퓨터구조

컴퓨터 구조 | CPU 작동 원리

by 개발송이 2025. 7. 30.

 

4. CPU 작동 원리

 

4.1 ALU와 제어장치 

ALU : 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들임

         계산결과와 플래그를 내보냄

플래그 : 연산 결과에 대한 추가적인 상태 정보

     ex ) 부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 인터럽트 플래그, 슈퍼바이저 플래그

 

제어장치

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

- 제어신호 : 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호

 

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

1) 제어장치는 클럭 신호를 받아들임

  - 클럭 : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위

2) 제어장치는 '해석해야 할 명령어'를 받아들임

3) 제어장치는 플래그 레지스터 속 플래그 값을 받아들임

4) 제어장치는 시스템 버스, 그중에서 제어 버스로 전달된 제어 신호를 받아들임

 

제어장치가 내보내는 정보

- 제어장치가 CPU 외부에 제어 신호를 전달한다 > 제어 버스로 제어 신호를 내보낸다

- 제어신호는 크게 메모리에 전달하는 제어 신호/ 입출력장치에 전달하는 제어 신호로 나뉨

 

4.2 레지스터

프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장

 

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

1. 프로그램 카운터(PC)

- 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장함

- 명령어 포인터라고 부르는 CPU도 있음

2. 명령어 레지스터(IR)

- 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명렁어를 저장하는 레지스터

- 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어 신호를 내보냄

3. 메모리 레지스터(MAR)

- 메모리의 주소를 저장하는 레지스터

- CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 됨

4. 메모리 버퍼 레지스터

- 메모리와 주고받을 값을 저장하는 레지스터

- 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거침

- CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터로 거침

5. 범용 레지스터

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

- 데이터와 주소 모두 저장할 수 있음

- 현재 대다수 CPU는 모두 범용 레지스터 가짐

6. 플래그 레지스터

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

7. 스택포인터

8. 베이스 레지스터

 

 

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

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

- 스택 포인터 : 스택 꼭대기를 가리키는 레지스터

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

 

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

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

- 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정방식, 베이스 레지스터 주소 지정 방식 등으로 나뉨

 

상대 주소 지정 방식

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

 

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

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

- 베이스 레지스터 : 기준 주소로서의 역할을 함

 

 

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

명령어 사이클 : 하나의 명령어를 처리하는 정형화된 흐름

인터럽트 : 그 흐름이 끊어지는 상황

 

 

명령어 사이클

- 하나의 명령어가 처리되는 주기로 인출, 실행, 간접, 인터럽트 사이클로 구성

 

- 인출 사이클 : 메모리에 있는 명령어를 CPU로 가지고 오는 단계

- 실행 사이클 : CPU로 가져온 명령어를 실행하는 단계

- 간접 사이클 : 메모리 접근이 더 필요한 경우 실행하는 단계

- 인터럽트 사이클 : 인터럽트가 발생한 경우

 

인터럽트

- CPU의 정상적인 작업을 방해하는 신호

- 예외(동기 인터럽트) : CPU에 의해 발생하는 인터럽트

- 하드웨어 인터럽트(비동기 인터럽트) : 입출력장치에 의해 발생하는 인터럽트

ex) 전자레인지 조리 완료 알림

 

하드웨어 인터럽트

- 알림과 같은 인터럽트

 

- 처리순서

1) 입출력장치는 CPU에 인터럽트 요청 신호를 보냄

2) CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인함

3) CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인함

4) 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업함

5) CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행함

6) 인터럽트 서비스 루틴 실행이 끝나면 4)에서 백업해 둔 작업을 복구하여 실행을 재개함

 

- 인터럽트 요청 신호 : CPU의 작업을 방해하는 인터럽트에 대한 요청

- 인터럽트 플래그 : 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트

- 인터럽트 벡터 : 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보

- 인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램

 

예외

- 예외 발생 시 CPU는 하던 일을 중단하고 해당 예외를 처리함. 처리 후 다시 본래 하던 작업으로 돌아와 실행 재개함.

- 폴트 : 예외 처리 직후 예외가 발생한 명령어부터 실행을 재개하는 예외

- 트랩 : 예외 처리 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외

           주로 디버깅할 때 사용

- 중단 : CPU가 실행 중인 프로그램을 중단시킬 수밖에 없는 심각한 오류 발생 시 발생

- 소프트웨어 인터럽트 : 시스템 호출이 발생했을때 발생