Chapter.04 - CPU의 작동 원리
모든 이미지의 저작권은 [혼자 공부하는 컴퓨터 구조 + 운영체제] 도서의 저자 강민철님에게 있습니다.
ALU
- 입력받는 것
- 제어신호
- 피연산자
- 출력하는 것
- 결과값
- 플래그
대표적인 플래그
제어장치
- 클럭 : 컴퓨터의 모든 부품을 움직이게 하는 시간 단위 (모든 부품이 한 클럭마다 작동하는 뜻은 아니며, 한 동작이 여러클럭인 경우도 있다.)
- 외부장치가 발생한 제어신호를 제어버스를 통해 입력받는다.
주요 레지스터
레지스터 | 설명 |
---|---|
프로그램 카운터 | 메모리에서 읽어 들일 명령어의 주소를 저장 쉽게 말해, 현재 위치(포인터)의 역할을 함 |
명령어 레지스터 | 메모리에서 읽어 들인 명령어를 저장 |
메모리 주소 레지스터 | CPU 가 읽어 들이고자 하는 주소를 저장 쉽게 말해, 주소버스로 보낼 주소가 저장된다. |
메모리 버퍼 레지스터 | 메모리와 주고 받을 값(데이터 or 명령어)을 저장 데이터버스로 주고 받을 값이 저장된다. |
범용 레지스터 | 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터이며, 데이터와 주소 모두 저장할 수 있다. |
플래그 레지스터 | ALU 가 내보내는 플래그를 저장 |
스택 포인터 | 스택 주소 지정 방식에 사용되는 특수한 레지스터 |
베이스 레지스터 | 변위 주소 지정 방식에 사용되는 특수한 레지스터 |
스택 주소 지정 방식
메모리의 스택 영역과 스택 포인터를 이용한 주소 지정 방식이며, 스택 포인터는 스택 영역의 꼭대기 주소를 저장하는 레지스터이다.
변위 주소 지정 방식
레지스터의 값과 오퍼랜드의 값을 합쳐 명령어의 유효주소를 얻는 방식이다.
1. 상대 주소 지정 방식
프로그램 카운터
와 오퍼랜드
를 합쳐 유효주소를 얻는 방식.
프로그램 카운터의 값을 기준으로 오퍼랜드의 값 만큼 이동한 주소에 접근한다.
2. 베이스 레지스터 주소 지정 방식
베이스 레지스터
와 오퍼랜드
를 합쳐 유효주소를 얻는 방식.
베이스 레지스터에는 기준이 되는 값이 저장되어 있다.
명령어 사이클
사이클 | 설명 |
---|---|
인출 사이클 | 메모리에 있는 명령어를 CPU 로 가지고 오는 단계 |
실행 사이클 | 가져온 명령어를 실행하는 단계 |
간접 사이클 | 명령어를 실행하기 전 메모리 접근이 더 필요하여 메모리에 다시 접근하는 단계 |
인터럽트 사이클 |
인터럽트
인터럽트는 CPU의 작업을 방해하는 신호를 의미한다.
- 동기 인터럽트 (예외) : CPU에 의해 발생하는 인터럽트
- 폴트 : 예외가 발생한 명령어부터 실행을 재개
- 트랩 : 예외가 발생한 명령어의 다음 명령어부터 실행을 재개
- 중단 : 프로그램이 강제로 중단되는 예외
- 소프트웨어 인터럽트 : 시스템 호출이 발생했을 때 나타나는 에외
- 비동기 인터럽트 (하드웨어 인터럽트) : 주로 입출력 장치에 의해 발생하는 인터럽트
- 막을 수 있는 인터럽트
- 막을 수 없는 인터럽트 (정전, 하드웨어 고장 등)
비동기 인터럽트 처리 순서
- 입출력 장치가 CPU에
인터럽트 요청 신호
를 보냄 - CPU의 실행 사이클이 끝나고 명령어를 인출하기 전 인터럽트 여부를 확인
인터럽트 플래그
를 확인해 현재 인터럽트를 받아들일 수 있는지 확인- 인터럽트를 받을 수 있다면 진행 중이던 작업을 스택영역에 백업
- CPU는
인터럽트 벡터
를 참조하여인터럽트 서비스 루틴
을 실행 - 인터럽트 서비스 루틴 실행이 끝나면 백업해둔 작업을 복구하여 실행을 재개
- 인터럽트 서비스 루틴
- 어떤 인터럽트가 발생했을 때 해당 인터럽트를 처리하는 프로그램
인터럽트 서비스 루틴도 프로그램의 일종이므로 메모리에 저장되어 있다.- 인터럽트 벡터
- 수많은 인터럽트 서비스 루틴을 식별하기 위한 정보
인터럽트 서비스 루틴의 시작 주소를 알 수 있다.
인터럽트를 보낸 대상으로부터 데이터 버스를 통해 전달받는다.
This post is licensed under CC BY 4.0 by the author.