본문 바로가기

컴퓨터구조, 운영체제

CPU 작동 원리

728x90
반응형
SMALL

ALU와 제어장치

ALU는 계산하는 부품이고, 따라서 피연산자와 수행할 연산이 필요로 합니다.

피연산자는 레지스터를 통해, 수행할 연산은 제어장치로부터 제어신호로 받아 들입니다.

 

그리고, ALU는 연산한 결괏값과 플래그를 내보냅니다. 플래그에는 결과값의 음수 여부 혹은 연산결과의 상태 정보 플래그 정보를 담습니다.

부호 플래그: 연산한 결과의 부호를 나타냅니다.

제로 플래그 : 연산 결과가 0인지 여부를 나타냅니다.

캐리 플래그 : 연산 결과 올림수나 빌림수가 발생했는 지를 나타냅니다.

오버플로우 : 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황인지를 나타냅니다.

인터럽트 플래그 : 인터럽트가 가능한지를 나타냅니다.

슈퍼바이저 플래그 : 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타냅니다.

 

플래그는 플래그 레지스터에 담기며, CPU가 프로그램 실행 도중 반드시 기억해야 하는 일종의 참고 정보 입니다.

 

제어장치 ( 명령어를 해석하는 부품 )

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

 

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

클럭 : 컴퓨터의 부품의 시간 단위. 클락의 주기에 맞춰 레지스터 간 데이터 이동, 연산 수행, CPU가 메모리에 저장된 명령어를 읽어 들임.

해석해야 할 명령어 : 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려줌

플래그 값 : 연산에 대한 추가적인 상태정보를 받아들이고 제어 신호를 발생시킴

제어 버스로 전달된 제어 신호 : 입출력 장치(보조기억장치를 포함)를 비롯한 CPU 외부 장치에서 발생된 제어 신호

 

레지스터

1. 프로그램 카운터 ( 명령어 포인터 )

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

 

2. 명령어 레지스터

해석할 명령어, 명령어를 저장하는 레지스터

 

3. 메모리 주소 레지스터

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

 

4. 메모리 버퍼 레지스터

메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터

 

5. 플래그 레지스터

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

 

6. 범용 레지스터

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

 

7. 스택 포인터

스택의 꼭대기를 가리키는 레지스터 ( 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터 )

 

8. 베이스 레지스터

오퍼랜드오나 베이스 레지스터의 값을 더한 유효 주소 저장

 

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

1.상대 주소 지정 방식

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

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

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

 

명령어 사이클과 인터럽트

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

1. 인출 사이클

메모리에 있는 명령어를 CPU로 가지고 오는 단계

2. 실행 사이클

CPU로 가져온 명령어를 실행하는 단계

3. 간접 사이클

간접 주소 지정 방식의 경우 오퍼랜드 필드에 유효 주소의 주소를 명시해야 햐기 때문에, 명령어를 실행하기 위해서 메모리 접근을 한 번 더 해야함. 이 단계를 간접 사이클이라고 함

 

인터럽트 : 명령어 사이클의 흐름이 끊어지는 상황

1. 동기 인터럽트 ( 예외 )

    1. 폴트 : 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개

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

 

2. 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생하는 인터럽트로 알림과 같음.

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

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

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

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

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

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

 

인터럽트 요청 신호 : CPU에게 작업 처리 중 끼어들어도 될 지 물어봄

인터럽트 플래그 : CPU의 작업 중요도에 따라 ‘가능’, ‘불가능’ 판별함. 불가능 일경우 인터럽트 요청 신호를 무시, 가능 일 경우 CPU는 인터럽트를 처리하기 위한 인터럽트 서비스 루틴(인터럽트 핸들러)을 실행. 

 

인터럽트 벡터 : 각기 다른 인터럽트 서비스 루틴을 식별하기 위한 정보

 

디버깅 : 프로그램 개발 중 발생한 문제를 진단하고 해결하기 위한 작업

 

중단 : CPU 실행 중인 프로그램을 강제로 중단시킬 밖에 없는 심각한 오류를 발견했을 발생하는 예외

728x90
반응형
LIST

'컴퓨터구조, 운영체제' 카테고리의 다른 글

메모리와 캐시메모리  (0) 2023.03.23
CPU 향상 기법  (0) 2023.03.23
명령어  (0) 2023.03.20
데이터  (0) 2023.03.12
컴퓨터 구조 시작하기  (1) 2023.03.11