본문 바로가기

CS/컴퓨터 구조

[ 컴퓨터 구조 ] CPU 내부

[ 출처 ]

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

https://www.youtube.com/watch?v=kFWP6sFKyp0

[ ALU와 제어 장치 ]

ALU

= 계산을 하기 위해서는 피연산자와 제어 신호가 필요함

= 피연산자 ( by. 레지스터 ) + 제어 신호 ( by. 제어장치 ) 받아들임

= 결괏값 ( to. 레지스터) + 플래그 ( to. 플래그 레지스터 ) 내보냄

 

플래그

= 연산 결과에 대한 부가 정보

 

1. 부호 플래그             = 연산 결과의 부호

2. 제로 플래그             = 연산 결과가 0인지 여부

3. 캐리 플래그             = 연산 결과 올림수나 빌림수 발생 여부

4. 오버플로우 플래그  = 오버플로우 발생 여부

5. 인터럽트 플래그      = 인터럽트 가능 여부

6. 슈퍼바이저 플래그  = 커널 모드 or 사용자 모드 실행 여부

 

제어 장치

= 클럭 신호 + 해석할 명령어 ( by. 명령어 레지스터 ) + 플래그 ( by. 플래그 레지스터 ) + 제어 신호 받아들임

= 제어 신호 ( to. CPU 내부 = 레지스터 + ALU) + 제어 신호 ( to. CPU 외부 = 메모리 + 입출력장치) 내보냄

 

클럭

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

[ 레지스터 ]

레지스터

= CPU 내부의 작은 임시저장장치

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

 

중요한 레지스터 종류

1. 프로그램 카운터          = 메모리에서 가져올 다음 명령어의 주소

2. 명령어 레지스터          = 해석할 명령어 (제어장치가 해석)

3. 메모리 주소 레지스터  = 메모리와 주고받을 주소 (CPU가 주소를 주소 버스로 주고 받을 때 사용)

4. 메모리 버퍼 레지스터  = 메모리와 주고받을 데이터와 명령어 (CPU가 값을 데이터 버스로 주고 받을 때 사용)

5. 플래그 레지스터          = 연산 결과 또는 CPU 상태에 대한 부가 정보

6. 범용 레지스터              = 다양하고 일반적인 상황에서 자유롭게 사용

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

8. 베이스 레지스터          = 변위 주소 지정 방식에 사용

 

스택 주소 지정 방식

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

 

변위 주소 지정 방식

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

= 상대 주소 지정 방식 (변위 + 프로그램 카운터) or 베이스 레지스터 주소 지정 방식 (변위 + 베이스 레지스터)

[ 명령어 사이클과 인터럽트 ]

명령어 사이클

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

= 어떤 명령어는 인출과 실행 사이클만으로 실행

= 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행

 

인출 사이클 = 먼저 CPU로 갖고 오기

실행 사이클 = 갖고 왔으면 실행하기

간접 사이클 = 추가적인 메모리 접근 필요 (ex. 간접 주소 지정 방식)

 

인터럽트

= 명령어 사이클을 방해할 때 발생

= 동기 인터럽트 (예외) + 비동기 인터럽트 (하드웨어 인터럽트)

 

동기 인터럽트 (예외)

= CPU가 예기치 못한 상황을 접했을 때 발생

= 폴트 + 트랩 + 중단 + 소프트웨어 인터럽트

 

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

= 주로 입출력장치에 의해 발생

= 알림과 같은 역할

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

= 막을 수 있는 인터럽트(대부분 인터럽트 플래그로 막을 수 있음) + 막을 수 없는 인터럽트(ex. 하드웨어 고장, 정전)

 

인터럽트 처리 순서

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

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

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

4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업 (메모리의 스택 영역에 백업)

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

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

 

인터럽트 요청 신호

= CPU의 작업을 방해하는 인터럽트에 대한 요청

 

인터럽트 플래그

= 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트

 

인터럽트 서비스 루틴

= 인터럽트가 발생했을 때 해당 인터럽트를 처리하기 위한 프로그램

= 프로그램이기에 메모리에 저장

 

인터럽트 벡터

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

 

CPU가 인터럽트를 처리한다

= 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다

   ( + 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다 )

'CS > 컴퓨터 구조' 카테고리의 다른 글

[ 컴퓨터 구조 ] 메모리 종류  (1) 2025.03.21
[ 컴퓨터 구조 ] 명령어  (0) 2025.02.05
[ 컴퓨터 구조 ] 명령어  (0) 2025.01.22
[ 컴퓨터 구조 ] 전체적인 컴퓨터 구조  (0) 2025.01.14