이 글은 "혼자 공부하는 컴퓨터 구조 + 운영체제"를 읽고 이해한 내용을 복습하기 위해 작성하는 글입니다.
이미지 출처 : 혼자 공부하는 컴퓨터 구조 + 운영체제
ALU : 레지스터를 통해 피연산자를 받아들이고, 제어신호를 받아들인다.
결괏값을 메모리가 아닌 레지스터에 저장한다.
결과 계산 값과 플래그를 내보낸다 ( 플래그 : 연산 결과에 대한 추가적인 정보상태)
플래그 들은 플래그 레지스터라는 레지스터에 저장된다.
제어장치 : 제어신호를 내보내고 명령어를 해석하는 부품
클럭 신호를 받아들인다
해석해야 할 명령어를 받아들인다
플래그 레지스터 속 플래그 값을 받아 들인다.
시스템 버스(제어버스)로 전달된 제어신호를 받아들인다.
프로그램 명령어와 데이터가 실행 전/후로 저장되는 곳
레지스터의 종류
각각의 레지스터가 어떤 역할을 하는지 이해하고 암기할 필요는 없다.
프로그램 카운터
메모리에서 가져올 명령어(메모리에서 읽어들일 명령어)의 주소
"명령어 포인터" 라고도 부른다
명령어 레지스터
메모리에서 읽어들인 명령어를 저장하는 레지스터
제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한 뒤 제어신호를 보낸다.
메모리 주소 레지스터
메모리 버퍼 레지스터
범용 레지스터
플래그 레지스터
스택 주소 지정 방식
스택 포인터 : 스택의 꼭대기를 가르키는 레지스터
변위 주소 지정 방식
오퍼랜드 : 연산에 사용될 데이터가 저장된 위치
명령어 사이클
- 프로그램 속 명령어 들은 일정한 주기를 반복하며 실행되는데, 이 주기를 일컫는 말
인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
실행 사이클 : CPU로 가져온 명령어를 실행하는 단계 (제어신호 발생)
간접 사이클 : 인출 사이클 후에 바로 명령어를 실행할 수 없을때 실행 (ex:간접 주소 지정 방식)
인터럽트
동기 인터럽트
CPU에 의해 발생하는 인터럽트 (ex : 프로그래밍 오류)
"예외"라고도 부른다.
비동기 인터럽트
주로 입/출력 장치에 의해 발생하는 인터럽트
"하드웨어 인터럽트" 라고도 부른다.
CPU가 효율적으로 명령어를 처리하기 위해 사용한다.
인터럽트 처리 순서
1. 입출력장치가 CPU에 인터럽트 요청신호 발신
2. 실행 사이클이 끝나고 명령어 인출 전, 인터럽트 확인
3. CPU가 인터럽트 요청 확인 후, 인터럽트 플래그를 통해 인러텁트 수신 여부 확인
4. 인터럽트를 받을수 없다면 현재까지의 작업 백업
5. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
6. 루틴 실행이 끝나면 백업한 작업을 복구하여 실행 재개
- 인터럽트 요청신호 : CPU작업을 방해하는 인터럽트에 대한 요청
- 인터럽트 플래그 : 인터럽트 요청 신호를 수용할지/무시할지 결정하는 비트
- 인터럽트 벡터 : 인터럽트 서비스 루틴의 시작 주소르 포함하는 식별정보
- 인터럽트 서비스 루틴 : 인터럽트를 처리하는 프로그램