4-1. ALU와 제어장치
1. ALU
-
레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들임.
-
ALU는 레지스터와 제어장치로부터 받아들인 피연산자와 제어 신호로 산술연산, 논리 연산 등 다양한 연산을 수행
-
ALU의 결괏값을 메모리가 아닌 레지스터에 우선 저장하는 이유 : CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느림. ALU가 연산할 때마다 결과를 메모리에 저장하면 당연하게 CPU는 메모리에 자주 접근하게 되고, 이로 CPU는 프로그램 실행 속도를 늦출 수 있기 때문.
-
ALU는 계산 결과와 함께 플래그를 내보냄
-
플래그 레지스터 : 플래그가 저장되는 레지스터
2. 제어장치
- 제어 장치 : 제어 신호 내보내고, 명령어 해석한느 부품
- 제어 신호 : 컴퓨터 부품 관리, 작동시키기 위한 일종의 전기 신호
-
제어장치가 받아들이는 정보
[1] 클럭 신호
-
클럭(clock) : 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
[2] 해석해야 할 명령어
-
명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려줌
[3] 플래그 레지스터 속 플래그 값
-
플래그 값을 받아들이고 참고해 제어 신호를 발생시킴
[4] 시스템 버스 중에서 제어 버스로 전달된 제어 신호
-
제어 장치는 CPU 내/외부로 제어 신호를 내보냄
- 제어 신호에는 메모리에 전달하는 신호와 입출력장치에 전달하는 신호가 있음
4-2. 레지스터
1. 반드시 알아야 할 레지스터
1) 프로그램 카운터(PC, Program Counter)
- 메모리에서 가져올 명령어의 주소(명령어에서 읽어 들일 명령어의 주소) 저장. 명령어 포인터(IP, Instruction Pointer)라고도 함
2) 명령어 레지스터(IR, Instruction Register)
- 해석할 명령어(방금 메모리에서 읽어들인 명령어)를 저장
3) 메모리 주소 레지스터(MAR, Memory Address Register)
- 메모리의 주소 저장. CPU가 읽어들이고자 하는 주소 값을 주소 버스로 보낼 때 거침
4) 메모리 버퍼 레지스터(MBR, Memory Buffer Register)
- 메모리와 주고받을 값(데이터, 명령어)을 저장. 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값이 거치게 됨
- CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 ㅂ스로 주고 받을 값은 메모리 버퍼 레지스터를 거침
5) 범용 레지스터(general purpose register)
- 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
- 데이터와 주소를 모두 저장할 수 있음
6) 플래그 레지스터(flag register)
- ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장
- 연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장
/
2. 특정 레지스터를 이용한 주소 지정 방식(1) : 스택 주소 지정 방식
1) 주소 지정 방식 종류
- 스택 포인터는 스택 주소 지정 방식이라는 주소 지정 방식에 사용
- 프로그램 카운터, 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정 방식에 사용
2) 스택 주소 지정 방식
- 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터, 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터. 스택의 어디까지 데이터가 채워져 있는지에 대한 표시
- 스택 영역 : 메모리 안에 스택처럼 사용할 영역. 다른 주소 공간과는 다르게 스택처럼 사용하기로 암묵적으로 약속된 영역
3. 특정 레지스터를 이용한 주소 지정 방식(2) : 변위 주소 지정 방식
1) 변위 주소 지정 방식(displacement addressing mode)
- 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더해 유효 주소를 얻어내는 방식
- 명령어 : 연산 코드, 레지스터, 오퍼랜드 필드
- 이 때, 오퍼랜드 필드 주소와 어떤 레지스터를 더하느냐에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등으로 나뉨
(1) 상대 주소 지정 방식(relative addressing mode)
(2) 베이스 레지스터 주소 지정 방식(base-register addressing mode)
- 오퍼랜드 + 베이스 레지스터 = 유효 주소
(베이스 레지스터 : 기준 주소, 오퍼랜드 : 기준 주소로부터 떨어진 거리)
4-3. 명령어 사이클과 인터럽트
1. 명령어 사이클
- 명령어 사이클(instruction cycle) : 프로그램 속 각각의 명령어들이 일정한 주기를 반복하며 실행되는 사이클
- 인출 사이클(fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클(execution cycle) : CPU로 가져온 명령어를 실행하는 단계
- 간접 사이클(indirect cycle) : 명령어를 바로 인출할 수 없을 때 메모리 접근을 더 하는 방식
2. 인터럽트
- 인터럽트(interrupt) : CPU의 작업을 방해하는 신호
- 인터럽트의 종류 : 동기 인터럽트, 비동기 인터럽트
- 동기 인터럽트 : CPU에 의해 발생하는 인터럽트. 예상치 못한 상황에 마주쳤을 때 발생. 예외(exception)라고 부름
- 비동기 인터럽트 : 입출력장치에 의해 발생하는 인터럽트. 알림 역할. (교재에서는 하드웨어 인터럽트 용어 사용)
/
- 하드웨어 인터럽트 처리 순서
(1) 입출력 장치는 CPU에 인터럽트 요청 신호 보냄
(2) CPU는 실행 사이클 끝나고 명령어 인출 전 항상 인터럽트 여부 확인
(3) 인터럽트 여부 확인하고 CPU는 인터럽트 플래그 통해 인터럽트 받아 들일 수 있는지 상태 확인
(4) 인터럽트 받아들일 수 있으면 CPU는 지금까지의 작업 백업
(5) CPU는 인터럽트 벡터 참조해 인터럽트 서비스 루틴 실행
(6) 인터럽트 서비스 루틴 실행 끝나면 (4)에 백업해둔 작업 복구해 실행 재개
+) 용어
- 인터럽트 요청 신호
- 인터럽트 플래그
- 하드웨어 인터럽트를 받을지 무시할지 결정
- 설정이 '불가능'(방해 받지 않아야 할 때) : 인터럽트 요청와도 무시
- 설정이 '가능' : 인터럽트 요청 수락
- 막을 수 있는 인터럽트, 막을 수 없는 인터럽트가 있음
- 인터럽트 서비스 루틴
- 인터럽트를 처리하기 위한 프로그램. 인터럽트 핸들러라고도 부름
- 인터럽트 벡터
- 인터럽트 서비스 루틴을 식별하기 위한 정보. 인터럽트 서비스 루틴의 시작 주소를 알 수 있음
/
예외의 종류
1. 폴트
- 예외를 처리한 직후 예외가 발생한 명령어부터 실행 재개
2. 트랩
- 예외 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행 재개. 디버깅할 때 사용(디버깅 : 프로그램 개발 중 발생한 문제를 진단하고 해결하기 위한 작업)
3. 중단
- CPU가 실행 중인 프로그램을 강제로 중단시킬 수 밖에 없는 심각한 오류 발견했을 때
4. 소프트웨어 인터럽트
/
2주차 기본 과제
Q. 설명에 맞는 레지스터를 보기에서 찾아 빈칸을 채워라.
A.
1) 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보 저장하는 레지스터
2) 프로그램 카운터 : 메모리에서 가져올 명령어의 주소 저장하는 레지스터
3) 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터
4) 명령어 레지스터 : 해석할 명령어를 저장하는 레지스터