💻 CPU의 작동 원리

ALU와 제어장치
ALU
- ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들임
- 피연산자와 제어 신호로 산술연산, 논리 연산 등 다양한 연산을 수행함
- 계산결과와 더불어 플래그를 내보냄
- 플래그 : 연산 결과에 대한 추가적인 상태 정보
- 부호 플래그 : 부호 플래그가 1이면 연산 결과는 음수다.
- 제로 플래그 : 제로 플래그가 1이면 연산 결과는 0이다.
- 캐리 플래그
- 오버플로우 플래그
- 인터럽트 플래그
- 슈퍼바이저 플래그
- 플래그 레지스터 : 플래그들이 저장되는 레지스터
- 플래그 : 연산 결과에 대한 추가적인 상태 정보
제어장치
- 제어장치
- 제어 신호를 보내고 명령어를 해석하는 부품
- 제어 신호
- 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
- 제어 장치가 받아들이는 정보
- 클럭 신호
- 클럭 : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
- 해석해야 할 명령어
- 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려줌
- 플래그 레지스터 속 플래그 값을 받아들임
- 플래그 값을 받아들이고 이를 참고하여 제어 신호를 발생시킴
- 시스템 버스, 그중에서 제어 버스로 전달된 제어신호
- 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들임
- 클럭 신호
- 제어장치가 내보내는 정보
- CPU 외부에 전달하는 제어 신호
- 제어 버스로 제어 신호를 내보낸다는 말
- 메모리에 전달하는 제어신호
- 입출력 장치(보조 기억 장치) 에 전달하는 제어 신호
- CPU 내부에 전달하는 제어 신호
- ALU에 전달하는 제어 신호
- ALU에는 수행할 연산을 지시하기 위해 신호를 내보냄
- 레지스터에 전달하는 제어 신호
- 레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위해 신호를 내보냄
- ALU에 전달하는 제어 신호
- CPU 외부에 전달하는 제어 신호
레지스터
반드시 알아야 할 레지스터
- 프로그램 카운터 (PC : Program Counter)
- 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장
- 명령어 포인터 (IP : Instruction Pointer) 라고 부르기도 함
- 명령어 레지스터 (IR : Instruction Register)
- 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터
- 메모리 주소 레지스터 (MAR : Memory Address Register)
- 메모리의 주소를 저장하는 레지스터
- CPU가 읽어 들이고자 하는 주소의 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 됨
- 메모리 버퍼 레지스터 (MBR : Memory Buffer Register)
- 메모리와 주고 받을 값 (데이터와 명령어) 을 저장하는 레지스터
- 메모리에 쓰고 싶을 값이나 메모리부터 전달 받은 값은 메모리 버퍼 레지스터를 거침
- 플래그 레지스터
- 연산결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
- 범용 레지스터
- 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
- 데이터와 주소 모두 저장할 수 있음
- 스택 포인터
- 스택 주소 지정 방식이라는 주소 지정 방식에 사용
- 베이스 레지스터
- 변위 주소 지정 방식이라는 주소 지정 방식에 사용
특정 레지스터를 이용한 주소 지정 방식 (1) : 스택 주소 지정 방식
- 스택 주소 지정 방식
- 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터
- 스택의 꼭대기를 가리키는 레지스터
- 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
- 스택 포인터
- 스택은 메모리 안에 있음
- 스택 영역
- 메모리 안에 스택처럼 사용할 영역이 정해져 있음
- 스택과 스택 포인터를 이용한 주소 지정 방식
특정 레지스터를 이용한 주소 지정 방식 (2) : 변위 주소 지정 방식
- 변위 주소 지정 방식
- 오퍼랜드 필드의 값 (변위) 과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
- 연산 코드 필드, 레지스터 필드 (어떤 값과 더할지 나타내는 필드), 오퍼랜드 (주소를 담고있음)
- 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식으로 나뉨.
- 상대 주소 지정 방식
- 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
- 베이스 레지스터 주소 지정 방식
- 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
- 베이스 레지스터 : 기준 주소
- 오퍼랜드 : 기준 주소로부터 떨어져 있는 거리
- 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근 할 것인지 연산하여 유효 주소를 얻어내는 방식
- 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
- 상대 주소 지정 방식
명령어 사이클과 인터럽트
명령어 사이클
- 명령어 사이클
- 프로그램 속 각각의 명령어들이 일정한 주기가 반복되어 실행되는 것
- 인출 사이클
- 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클
- CPU로 가져온 명령어를 실행하는 단계
- 제어 장치가 명령어 레지스터에 담긴 값을 해석하고 제어 신호를 발생 시키는 단계
- 간접 사이클
- 명령어를 인출하여 메모리 접근을 한 번 더 하는 것
인터럽트
- 인터럽트
- CPU의 작업을 방해하는 신호
- 동기 인터럽트
- CPU 에 의해 발생하는 인터럽트
- CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때, CPU가 실행하는 프로그래밍 상의 오류와 같은 예외적인 상황에 마주쳤을때 발생하는 인터럽트
- 예외라고도 부름
- 비동기 인터럽트
- 입출력 장치에 의해 발생하는 인터럽트
- 하드웨어 인터럽트라고도 부름
- 하드웨어 인터럽트
- 알림과 같은 인터럽트
- 입출력 작업 중에도 CPU로 하여금 효율적으로 명령어를 처리 할 수 있게 함
- 하드웨어 인터럽트 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
- 인터럽트 요청 신호 : CPU의 작업을 방해하는 인터럽트에 대한 요청
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인함
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
- 인터럽트 플래그 : 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업함
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행함
- 인터럽트 벡터
- 수많은 인터럽트 서비스 루틴을 구분하기 위해 사용하는 정보
- 인터럽트 서비스 루틴
- CPU가 인터럽트 요청을 받아들이기로 했다면 CPU는 인터럽트 서비스 루틴이라는 프로그램을 실행함
- 인터럽트 핸들러라고도 함
- 인터럽트 벡터
- 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개
- 예외의 종류
- 폴트
- 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외
- 트랩
- 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외
- 주로 디버깅할 때 사용
- 중단
- CPU가 실행 중인 프로그램을 강제로 중단시킬 수 밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
- 소프트웨어 인터럽트
- 시스템 호출이 발생했을 때 나타남
- 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
참고 자료
혼자 공부하는 컴퓨터구조 + 운영체제
'CS > Computer Architecture' 카테고리의 다른 글
| 💻 메모리와 캐시 메모리 (0) | 2025.02.11 |
|---|---|
| 💻 CPU 성능 향상 기법 (0) | 2025.02.11 |
| 💻 명령어 (0) | 2025.02.10 |
| 💻 데이터 (0) | 2025.02.10 |
| 💻 컴퓨터 구조의 기초 (0) | 2025.02.10 |