- ALU와 제어장치에 대해 학습한다.
- 레지스터의 종류와 역할에 대해 학습한다.
- 명령어 사이클을 이해한다.
- 인터럽트 개념을 이해한다.
CPU 내부에는 계산을 담당하는 ALU, 명령어를 읽고, 해석하고, 실행하는 제어장치, 작은 임시 저장 장치인 레지스터가 있다.
➡ 그 중 ALU와 제어장치에 대해 알아보자
받아들이는 정보 | |
---|---|
피연산자 | 레지스터 를 통해 피연산자를 받아들인다. |
수행할 연산 | 제어장치 로부터 수행할 연산을 알려주는 제어 신호 를 받아들인다. |
내보내는 정보 | |
---|---|
특정 숫자나 문자, 메모리 주소 | 바로 메모리에 저장되지 않고 일시적으로 레지스터 에 저장된다. |
플래그 | 연산 결과에 대한 추가적인 상태 정보 |
➡ ALU가 연산할 때 마다 결과를 메모리에 저장한다면 CPU는 메모리에 자주 접근하게 되고, 이는 프로그램 속도를 늦추기 때문이다.
➡ 대표적인 플래그
◼ 부호플래그
: 연산한 결과의 부호를 나타낸다.
◼ 제로 플래그
: 연산 결과가 0인지 여부를 나타낸다.
◼ 캐리 플래그
: 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.
◼ 오버플로우 플래그
: 오버플로우가 발생했는지를 나타낸다.
◼ 인터럽트 플래그
: 인터럽트가 가능한지를 나타낸다.
◼ 슈퍼바이저 플래그
: 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다.
➡ 이러한 플래그들은 플래그 레지스터
에 저장된다.
◼ 제어장치
는 제어 신호
를 내보내고, 명령어를 해석하는 부품이다. 여기서 제어 신호
는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
이다.
받아들이는 정보 | |
---|---|
클럭 신호 | 클럭이란 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위이다. |
명령어 | 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다. |
플래그 | 플래그 값을 받아들이고 이를 참고하여 제어 신호를 발생시킨다. |
제어 신호 | 제어 버스를 통해 외부로부터 전달된 제어신호를 받아들이기도 한다. |
내보내는 정보 | |
---|---|
CPU 외부로 내보내는 정보 | 메모리 에 저장된 값을 읽거나 새로운 값을 쓰기 위해 메모리 에 전달하는 제어신호, 입출력장치 의 값을 읽거나 새로운 값을 쓰기 위해 입출력장치 (보조기억장치 포함)에 전달하는 제어신호 |
CPU 내부로 내보내는 정보 | 수행할 연산 을 지시하기 위해 ALU 에 전달하는 제어신호, 레지스터 간 데이터 이동 이나 레지스터에 저장된 명령어 해석 을 위해 레지스터 에 전달하는 제어신호 |
◼ 반드시 알아야 할 8개의 레지스터
프로그램 카운터 (PC: Program Counter) | 메모리에서 읽어 들일 명령어의 주소 저장. 명령어 포인터(IP: Intruction Pointer)라고 부르는 CPU도 있다. |
명령어 레지스터 (IR: Instruction Register) | 방금 메모리에서 읽어 들인 명령어 저장. 제어 장치는 명령어 레지스터 속 명령어를 받아 들이고 이를 해석한 뒤 제어 신호를 내보낸다. |
메모리 주소 레지스터 (MAR: Memory Address Register) | 메모리의 주소를 저장. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 MAR을 거치게 된다. |
메모리 버퍼 레지스터 (MBR: Memory Buffer Register) | 메모리와 주고받을 값(데이터와 명령어)를 저장. 메모리에 쓰고 싶은 값이나 메모리로부터 전달 받은 값은 MBR을 거치게 된다. |
범용 레지스터 (General Purpose Register) | 다양하고 일반적인 상황에서 자유롭게 사용 가능한 레지스터. 데이터와 주소 모두 저장 가능. CPU에는 여러 개의 범용 레지스터들이 있다. |
플래그 레지스터 (Flag Register) | 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장 |
스택 포인터 (SP: Stack Pointer) | 스택의 최상위 주소를 저장 |
베이스 레지스터 | 베이스 레지스터에 저장된 값은 기준 주소로 사용 |
스택
과스택 포인터
를 이용한 주소 지정 방식
변위 주소 지정방식을 사용하는 명령어는
연산코드 필드
,레지스터 필드
,오퍼랜드 필드
로 구성된다.
오퍼랜드
와프로그램 카운터(PC)
의 값을 더하여유효 주소
를 얻는 방식
➡ 상대 주소 지정 방식
은 분기
하여 특정 주소
의 코드를 실행할 때 사용된다.
오퍼랜드
와베이스 레지스터
의 값을 더하여유효주소
를 얻는 방식
➡ 베이스 레지스터
는 기준 주소
로, 오퍼랜드
는 기준 주소로부터 떨어진 거리
로서의 역할을 한다.
프로그램 속 각각의 명령어들은 일정한 주기가 반복되어 실행되는데 이 주기를 명령어 사이클이라고 한다.
메모리에 있는 명령어를 CPU로 가지고 오는 단계
CPU로 가져온 명령어를 실행하는 단계
➡ 프로그램을 이루는 수많은 명령어는 일반적으로 인출 사이클
과 실행 사이클
을 반복
하며 실행되지만, 모든 명령어가 그런 것은 아님
➡ 예로, 간접 주소 지정 방식
은 메모리에 유효 주소의 주소가 저장되어 있기 때문에 유효 주소
를 알아 내려면 메모리 접근이 한 번 더 필요함
메모리 접근이 더 필요한 경우 실행되는 사이클
◼ 인터럽트란?
CPU의 작업을 방해하는 신호
◼ 인터럽트의 2가지 종류
동기 인터럽트(예외)
: CPU
에 의해 발생하는 인터럽트비동기 인터럽트(하드웨어 인터럽트)
: 입출력장치
에 의해 발생하는 인터럽트하드웨어 인터럽트
는 입출력 작업 중에도 CPU로 하여금 효율적으로 명령어를 처리할 수 있게 함(완료 여부 확인을 할 필요가 없으므로)입출력장치
는 CPU
에 인터럽트 요청 신호
를 보낸다. CPU
는 실행 사이클
이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부
를 확인한다. CPU
는 인터럽트 요청
을 확인하고 인터럽트 플래그
를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다. 스택
에 백업
한다. CPU
는 인터럽트 벡터
를 참조하여 인터럽트 서비스 루틴
을 실행한다. 인터럽트 서비스 루틴
실행이 끝나면 백업해둔 작업을 복구
하여 실행을 재개한다. 인터럽트 요청 신호 | CPU의 작업을 방해하는 인터럽트에 대한 요청 |
인터럽트 플래그 | 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트. 플래그 레지스터의 인터럽트 플래그가 활성화 되어있어야 인터럽트 실행이 가능 |
인터럽트 서비스 루틴 (ISR: Interrupt Servise Routine) | 인터럽트를 처리하는 프로그램. 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램 |
인터럽트 벡터 | 인터럽트 서비스 루틴의 시작 주소 를 포함하는 인터럽트 서비스 루틴의 식별정보 |