💡
ALU와 제어장치
레지스터의 종류와 역할
명령어 사이클의 이해
인터럽트의 개념
1) ALU와 제어장치
ALU
받는 정보
- 레지스터를 통해 피연산자
- 제어장치로부터 수행할 연산을 알려주는 제어 신호
내보내는 정보
- 연산 수행 결과
- 연산 수행 결괏값 → 일시적으로 레지스터에 저장 (프로그램 실행 속도를 위해)
- 플래그
- 연산 결과에 대한 추가적인 상태 정보
- 플래그 레지스터에 저장
-
- 부호 플래그
- 제로 플래그
- 캐리 플래그
- 오버플로우 플래그
- 인터럽트 플래그
- 슈퍼바이저 플래그
-
제어장치
제어 신호를 내보냄, 명령어 해석 부품
제어 신호: 컴퓨터 부품들을 관리/작동시키는 일종의 전기 신호
받는 정보
- 클럭 신호
- 클럭: 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
- 해석해야 할 명령어
- 명령어 레지스터로부터 받아 해석 → 제어 신호 발생시킴
- 플래그 레지스터 속 플래그 값
- 플래그 값을 참고하여 제어 신호 발생시킴
- 시스템 버스 중 제어 버스로 전달된 제어 신호
- 외부로부터 전달된 제어 신호 받음
내보내는 정보
- CPU 외부에 전달
- CPU 내부에 전달 = 제어 버스로 내보냄
- 메모리에 전달
- 입출력장치에 전달
2) 레지스터
반드시 알아야 할 레지스터
- 프로그램 카운터
- 명령어 레지스터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
- 플래그 레지스터
- 범용 레지스터
- 스택 포인터
- 베이스 레지스터
1. 프로그램 카운터
메모리에서 읽어 들일 명령어의 주소 저장
명령어 포인터라고 부르는 CPU도 있음
2. 명령어 레지스터
방금 메모리에서 읽어 들인 명령어를 저장 → 제어장치가 받아 해석 → 제어 신호
3. 메모리 주소 레지스터
메모리 주소를 저장
CPU가 읽을 주소 값을 주소 버스로 보낼 때 거침
4. 메모리 버퍼 레지스터
메모리와 주고받을 값(데이터와 명령어) 저장
데이터 버스로 주고받을 값이 거침
(흐름)
프로그램 카운터의 메모리 주소→ 메모리 주소 레지스터 → 제어 버스&주소 버스 → 메모리
→ 저장된 값 → 데이터 버스 → 메모리 버퍼 레지스터 → 명령어 레지스터&프로그램 카운터 증가
→ 제어장치가 명령어 해석 후 제어 신호 발생
→ 증가한 프로그램 카운터의 메모리 주소로 과정 반복
위 흐름이 끊기는 경우? 특정 메모리 주소로 이동하는 명령어 실행 / 인터럽트 발생 시
5. 플래그 레지스터
연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장
6. 범용 레지스터
범용적인 레지스터
스택 포인터: 스택 주소 지정 방식에 사용
프로그램 카운터, 베이스 레지스터: 변위 주소 지정 방식
특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식
스택 주소 지정 방식: 스택&스택 포인터를 이용한 주소 지정 방식
스택 포인터: 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
스택 영역: 메모리 내의 스택처럼 사용할 지정된 영역
특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식
변위 주소 지정 방식: 오퍼랜드 필드의 값(변위) + 특정 레지스터의 값으로 유효 주소를 얻어내는 주소 지정 방식
변위 주소 지정 방식을 사용하는 명령어: 연산 코드 필드, 레지스터 필드, 오퍼랜드 필드 존재
(오퍼랜드 필드의 주소 + 어떤 레지스터) 조합에 따라 → 상대 주소 지정 방식/베이스 레지스터 주소 지정 방식 나뉨
상대 주소 지정 방식
(오퍼랜드 + 프로그램 카운터의 값)으로 유효 주소를 얻는 방식
프로그램 카운터에 저장된 주소로부터 오퍼랜드만큼 이동한 주소 명령어를 실행
if문과 유사. 특정 주소의 코드 실행할 때 사용
→ 현재 명령어 포인터로부터 오퍼랜드만큼 이동한 주소
베이스 레지스터 주소 지정 방식
(오퍼랜드 + 베이스 레지스터 값)으로 유효 주소를 얻는 방식
→ 프로그램의 첫 물리 주소로부터 이동한 주소
❓
프로그램 카운터 vs 베이스 레지스터
베이스 레지스터는 프로그램의 첫 물리 주소 저장
→ 프로그램에 할당된 고정 주소가 저장
프로그램 카운터는 명령어의 포인터로 이동하는 주소 값 저장
혼공컴운 6-2, 아래 링크 참고
https://en.wikipedia.org/wiki/Base_and_bounds#:~:text=In computing base and bounds,contiguous segment of main memory.
명령어 사이클과 인터럽트
CPU가 하나의 명령어를 처리하는 정형화된 흐름: 명령어 사이클
흐름이 끊어지는 상황: 인터럽트
명령어 사이클
CPU가 프로그램 속 명령어들을 실행하는 일정한 주기
1. 인출 사이클
메모리의 명령어를 CPU로 가져오는 단계
2. 실행 사이클
명령어를 실행하는 단계
제어장치가 명령어 레지스터에 담긴 값 해석, 제어 신호 발생
3. 간접 사이클
간접 주소 지정 방식을 사용하여 추가 메모리 접근이 필요한 경우
4. 인터럽트
CPU의 작업을 방해하는 신호
- 동기 인터럽트 = 예외
- CPU에 의해 발생하는 인터럽트
- 비동기 인터럽트 = 하드웨어 인터럽트
- 주로 입출력장치에 의해 발생 → 작업 완료 시 완료 알림
하드웨어 인터럽트
명령어를 효율적으로 처리하기 위한 알림.
처리 순서
- 입출력장치 → CPU에 인터럽트 요청 신호
- CPU가 실행 사이클이 끝나고 명령어 인출 전, 항상 인터럽트 여부 확인
- CPU가 인터럽트 요청 확인 후, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인
- 받아들일 수 있다면, CPU는 지금까지 작업 백업
- CPU는 인터럽트 백터를 참조하여 인터럽트 서비스 루틴 실행
- 실행이 끝나면 백업 작업 복구하여 실행 재개
인터럽트 플래그가 불가능이어도 무시할 수 없는 요청 → 정전/하드웨어 고장으로 인한 인터럽트
인터럽트 서비스 루틴 = 인터럽트 핸들러
: 인터럽트 발생 시 메뉴얼
인터럽트 벡터
: 인터럽트 서비스 루틴을 식별하기 위한 정보, 인터럽트 서비스 루틴의 시작주소를 알 수 있음
‘CPU가 인터럽트를 처리한다’ → ‘인터럽트 서비스 루틴을 실행하고, 본래의 작업으로 되돌아온다’
인터럽트 서비스 루틴도 프로그램과 마찬가지로 명령어와 데이터로 이루어져 레지스터를 사용하며 실행
→ 기존 작업 재개를 위한 모든 내용을 스택에 백업
- 예외의 종류
- 폴트
- 예외가 발생한 명령어부터 실행 재개
- 트랩
- 예) 디버깅
- 예외가 발생한 명령어의 다음 명령어부터 실행 재개
- 중단
- 심각한 오류 발견 시
- 소프트웨어 인터럽트 (9장에서 자세히..)
- 시스템 호출 발생 시
- 폴트
'스터디 > 컴퓨터구조' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조와 운영체제] 6_메모리와 캐시 메모리 (0) | 2025.04.18 |
---|---|
[혼자 공부하는 컴퓨터구조와 운영체제] 5_CPU 성능 향상 기법 (0) | 2025.04.04 |
[혼자 공부하는 컴퓨터구조와 운영체제] 3_명령어 (0) | 2025.03.07 |
[혼자 공부하는 컴퓨터구조와 운영체제] 2_데이터 (0) | 2025.03.05 |
[혼자 공부하는 컴퓨터구조와 운영체제] 1_컴퓨터 구조 시작하기 (0) | 2025.03.05 |