CS 공부

[CS] {컴퓨터 구조} CPU 구조

ogh4554 2025. 4. 8. 21:37

1. ALU와 제어장치

1) ALU가 받아들이는 정보

계산을 하기 위해서는 피연산자와 수행할 연산이 필요

- 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들임.

** 플래그 : 연산결과에 대한 부가정보

(이진법 음수 표현할 때, 연산결과가 0인지, 오버플로우가 발생했는지 확인할 때 사용)

 

2) 제어장치

(1) 받아들이는 정보

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

 

b. 해석할 명령어 : 명령어 레지스터에서 이번에 해석할 명령어를 받아옴

c. 플래그

d. 제어신호 : 입출력장치 또한 제어신호를 발생시킬 수 있음

 

(2) 내보내는 정보

a. CPU 내부에 전달하는 제어신호( 레지스터, ALU )

b. CPU 외부에 전달하는 제어신호( 메모리, 입출력장치 )


2. 레지스터

- 프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장

1) ★반드시 알아야 할 레지스터

(1) 프로그램 카운터 : 메모리에서 가져올 다음 명령어의 주소를 저장

(2) 메모리 주소 레지스터 : 메모리의 주소를 저장. CPU가 읽고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터

(3) 메모리 버퍼 레지스터 : 메모리와 주고받을 값(데이터 & 명령어)을 저장. CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터

(4) 명령어 레지스터 : 해석할 명령어 ( 방금 메모리에서 읽어 들인 명령어 )

(5) 플래그 레지스터 : 연산결과 또는 CPU 상태에 대한 부가적인 정보

(6) 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용(여러개 있음)

(7) 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터. 스택 주소 지정 방식에 사용됨.

(8) 베이스 레지스터 :  기준 주소 저장. 변위 주소 지정 방식에 사용.

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

a. 상대 주소 지정 방식 : 오퍼랜드 필드의 값과 프로그램 카운터의 값을 더하여 유효 주소 얻기

b. 베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값과 베이스 레지스터의 값을 더하여 유효 주소 얻기

 


 

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

1) 명령어 사이클 

: 프로그램 속 명령어들은 일정한 주기가 반복되며 실행. 주기 == 명령어 사이클

 

(1) 메모리의 값을 CPU 내부 or 레지스터로 갖고 옴. => 인출

(2) 갖고온 값을 실행 => 실행

 

인출 -> 실행 -> 인출 -> 실행... = 보편적인 명령어 사이클

 

but, CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다 (ex. 간접 주소 지정 방식)

이럴때는 인출 -> 간접 -> 실행

 

2) 인터럽트

: 정해진 흐름을 방해하는 신호

 

- CPU가 얼른 처리해야 할 작업이 생겼을 때, CPU가 집중해야 할 때

 

(1) 동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생

 

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

- 알림(세탁기 완료, 밥솥 완료 알림)과 같은 역할

- 입출력 잡업 도중에도 효율적으로 명령어를 처리하기 위해 사용

-> 입출력장치는 CPU에 비해 느리다

     인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다

 

(3) 인터럽트의 처리 순서

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

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

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

d. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업 백업

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

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