728x90
반응형
ALU : 산술 및 논리 연산 수행
- [input] 레지스터에서 피연산자 받기 + 제어장치에서 제어신호 받기
- [output] 연산 결과와 플래그를 내보내기
- 플래그는 플래그 레지스터에 저장 → 플래그의 종류 { 부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 인터럽트 플래그, 슈퍼바이저 플래그 }
제어장치 : 명령어 해석 및 제어신호 출력
- [input] 클럭이라는 입력 신호 읽기 → 클럭 단위로 제어 신호 전달
- [input] 명령어 레지스터에서 해석해야 할 명령어 읽기
- [input] 플래그 레지스터에서 플래그 값 읽기
- [output] 제어 신호를 메모리와 입출력 장치에 제어버스를 통해 전달
레지스터 : CPU 내의 임시저장장치
- 프로그램 카운터: 메모리에서 가져올 명령어가 저장된 주소를 저장
- 명령어 레지스터: 방금 메모리에서 가져와서 해석할 명령어를 저장
- 메모리 레지스터: 메모리 주소를 저장
- 메모리 버퍼 레지스터: 메모리에 저장하거나 읽어올 값(데이터, 명령어)를 저장
- 플래그 레지스터: ALU에서 전달받은 부가적인 정보인 플래그 값을 저장
- 범용 레지스터: 데이터와 주소를 모두 저장하고 여러 개가 있으며 범용적으로 사용
- 스택 포인터: 스택에 마지막으로 저장된 값의 위치를 저장하는 레지스터
- 스택 주소 지정 방식: 스택 포인터에 따라 다음 주소 지정
- 베이스 레지스터: 기준 주소로써 역할
- 변위 주소 지정 방식
- 상대 주소 지정 방식 : 프로그램 카운터 + 오퍼랜드 값에 따라 다음 유효주소 산출
- 베이스 레지스터 주소 지정 방식 : 베이스 레지스터 + 오퍼랜드 값에 따라 다음 유효주소 산출
- 변위 주소 지정 방식
명령어 사이클
명령어 사이클: 일정한 주기에 따라 각각의 명령어를 반복하는 것
- 인출 사이클: 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클: 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계
- 간접 사이클: CPU가 간접 주소 지정 방식과 같이 명령어 값을 가져가기 위해 메모리 접근을 한 번 더 하는 단계
- 인터럽트 사이클: 인터럽트 요청에 의해서 기존 작업이 백업되고 인터럽트 서비스 프로그램을 실행하는 단계
인터럽트
- 동기 인터럽트 (예외)
- 폴트(Fault): 예외가 발생한 명령어부터 실행을 재개
- 트랩: 예외가 발생한 명령어의 다음 명령어부터 실행을 재개 (예: 디버깅)
- 중단: 프로그램을 강제로 중단시키는 예외
- 소프트웨어 인터럽트: 시스템 호출이 발생했을 때 나타나는 예외
- 비동기 인터럽트 (하드웨어 인터럽트)
- 입출력 장치가 인터럽트 요청 신호를 보냄
- CPU는 인터럽트 플래그를 확인 (1이면 인터럽트 수락)
- 기존에 하던 작업을 메모리의 스택 영역에 백업
- 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
- 인터럽트 작업이 끝나면 다시 기존 작업을 스택 영역에서 불러와 실행
추가 참고자료: https://github.com/kangtegong/self-learning-cs/blob/main/registers/registers.md#대표적인-arm-레지스터
728x90
반응형