[컴퓨터 공학 기초 강의] 9강. CPU의 내부 구성 - ALU와 제어장치 01:10
플래그
: 연산 결과에 대한 부가 정보 제공, 플래그 레지스터에 저장
- 플래그 예시
플래그 조건 내용 (1일 경우 true, 0일 경우 false) 부호 플래그 연산 결과 < 0 1일 경우 계산 결과가 음수, 0일 경우 양수 제로 플래그 연산 결과 == 0 1일 경우 계산 결과가 0, 0일 경우 0이 아님 캐리 플래그 연산 결과에 올림수나 빌림수 발생 여부 1일 경우 발생, 0일 경우 발생하지 않음 오버플로우 플래그 오버플로우 발생 여부 1일 경우 발생, 0일 경우 발생하지 않음 인터럽트 플래그 인터럽트 가능 여부 1일 경우 인터럽트 가능, 0일 경우 불가능 슈퍼바이저 플래그 현재 실행중인 모드의 커널 모드 판단 1일 경우 커널 모드, 0일 경우 커널 모드가 아님 (사용자 모드)
제어 신호 발생 및 명령어 해석
제어 신호
: 컴퓨터 부품 관리 및 작동 신호
(1) 클럭 신호 수신
클럭
: 컴퓨터 부품의 시간 단위 (2) 해석할 명령어 수신
(3) 플래그 레지스터의 플래그 값 수신
(4) 시스템 버스 중 제어 버스로 전달된 제어 신호 수신
제어 장치에서 발생하는 제어 신호
(1) 프로그램 카운터, PC, Program Counter
(2) 명령어 레지스터, IR, Instruction Register
(3) 메모리 주소 레지스터, MAR, Memory Address Register
(4) 메모리 버퍼 레지스터, MBR, Memory Buffer Register
< 레지스터들의 작동 과정 예시 >
메모리 주소 1101 1000 1111 1001 1101 1002 : : 1000 1500 주소 1000 ~ 1500에 저장된 프로그램 실행 시
1) PC에 메모리 주소 '1000' 저장
2) 1000번지에 가기 위해 MAR에 1000 저장
3) '읽기' 제어 신호가 제어버스로, 주소 레지스터 값이 주소버스로 전달
4) 메모리에서 1000번지에 저장된 값을 데이터 버스를 통해 MBR 전달
5) PC값 증가
6) MBR에 저장된 값이 IR로 전달
7) 제어장치에서 IR의 명령어 해석 및 제어 신호 발생
- 프로그램 종료까지 프로그램 카운터가 지속적으로 증가하여 프로그램을 차례로 실행
- JUMP, CONDITIONAL JUMP, CALL, RET 등 특정 메모리 주소로 실행 흐름 이동 시 변경된 주소 저장
- 인터럽트 발생 시에도 실행 흐름 중단
(5) 플래그 레지스터
(6) 범용 레지스터
(7) 스택 포인터
(8) 베이스 레지스터
스택 포인터 (Stack Pointer)
사용스택 영역
존재 ARM 모드에 따라 사용할 수 있는 레지스터 구분 (프로세서 모드에 대한 매뉴얼)
범용 레지스터 (General Purpose Register)
특수 목적 레지스터 (Special Purpose Register)
명령어 길이(16, 32, 64bi)에 따라 사용되는 이름에 차이
이름 | 16 | 32 | 64 | 용도 |
---|---|---|---|---|
Accumulator register | AX | EAX | RAX | 산술 연산에 사용 |
Counter register | CX | ECX | RCX | 시프트/회전 연산과 루프에서 사용 |
Data register | DX | EDX | RDX | 산술 연산과 I/O 명령에서 사용 |
Base register | BX | EBX | RBX | 데이터의 주소를 가리키는 포인터로 사용 |
Stack Pointer register | SP | ESP | RSP | 스택의 최상단을 가리키는 포인터로 사용 |
Stack Base Pointer register | BP | EBP | RBP | 스택의 베이스(최하단)을 가리키는 포인터로 사용 |
Source Index register | SI | ESI | RSI | 스트림 명령에서 소스를 가리키는 포인터로 사용 |
Destination Index register | DI | EDI | RDI | 스트림 명령에서 도착점을 가리키는 포인터로 사용 |
현재 상태를 담는 레지스터
예외
하드웨어 인터럽트
하드웨어 인터럽트 처리 과정
(1) 입출력장치 >> CPU :인터럽트 요청 신호
(2) CPU : 실행 사이클 종료 후 명령어 인출 전에 항상 인터럽트 확인(폴링, Polling)
(3) 인터럽트 요청 확인 :인터럽트 플래그
를 통해 현재 인터럽트 허용 여부 확인
(4) 인터럽트 허용 시 : CPU 작업 백업
(5) CPU :인터럽트 벡터
를 참조하여인터럽트 서비스 루틴
실행
(6) 인터럽트 서비스 루틴 종료시 : 4의 백업 작업 복구 및 실행 재개
fault
: 예외 처리를 위한 인터럽트로 CPU 작업 중단 이후 예외가 발생한 명령어부터 실행 재개trap
: 예외 처리 이후 예외가 발생한 다음 명령어부터 실행을 재개, 디버깅 시 중단점 역할abort
: CPU가 실행 중인 프로그램을 강제로 중단시키는 오류 발견참고자료
📚강민철, 『혼자 공부하는 컴퓨터 구조 + 운영체제』, 한빛미디어, 2022.
📹유튜브 공식 강의 9, 10, 11강
🐈⬛책 부록 GitHub
🖥️ARM Developer Manual - ARM Registers
🖥️x86 Architecture Registers