- CPU의 구성요소 ALU와 제어장치의 역할
-명령어 사이클과 그 흐름을 방해하는 인터럽트
※책 '혼자공부하는컴퓨터구조+운영체제'의 내용을 바탕으로 정리한 공부내용입니다.※
⚙️4-1 ALU와 제어장치
🔍 ALU
- CPU = ALU + 제어장치 + 레지스터
- ALU
- 레지스터에서 피연산자 + 제어장치에서 제어신호 (수행할 연산) -> 연산 수행
- 결괏값 레지스터에 우선 일시 저장 (메모리 접근시 실행 속도 감소)
- 연산 결과에 대한 추가적 상태 정보인 플래그 -> 플래그 레지스터에 저장
🔍 제어장치
: 제어 신호를 내보내고, 명령어를 해석하는 부품
제어장치가 받아들이는 값들
- 클럭 신호
: 컴퓨터의 부품을 움직이는 시간단위
- 해석해야 할 명령어
: 명령어 레지스터의 명령어를 해석 -> 제어신호 발생
- 플래그
: 플래그 값을 참고, 제어신호 발생
- 시스템 버스 中 제어 버스의 제어 신호
: 외부로부터 전달 된 제어 신호를 받아들임
내보내는 정보
- 외부에 전달하는 제어 신호 (제어버스로)
- 메모리에 전달
- 입출력 장치(보조기억장치 포함)에 전달
- 내부에 전달하는 제어 신호
🚵♂️ 4-3 명령어 사이클과 인터럽트
🔍 명령어 사이클
: 프로그램 속 하나의 명령어가 처리되는 주기
- 인출사이클
: 메모리의 명령어를 CPU로 가지고 오는 단계
- 실행사이클
: CPU로 가져온 명령어를 실행하는 단계
- 간접사이클
: 메모리 접근이 더 필요한 경우 거치는 단계 (EX. 간접 주소 지칭)
🔍 인터럽트
: CPU의 작업을 방해하는 신호
(통일된 구분 기준은 없음. 이하 내용은 인텔의 공식문서 기준)
- 동기 인터럽트 (Synchronous interrupt)
- CPU에의해 발생
- 예외(exception)라고 부름
- 비동기 인터럽트 (Asynchronous interrupts)
- 입출력장치에 의해 발생 (입출력 장치의 작업 완료/요청 알림)
- 하드웨어 인터럽트라고 부름
- 막을 수 있는 인터럽트
- 막을 수 없는 인터럽트 (우선1순위 ex. 정전, 하드웨어 고장 등)
🔍 하드웨어 인터럽트 처리 순서
- 입출력 장치 -인터럽트 요청 신호-> CPU
- CPU - 실행 사이클이 끝나고 명령어를 인출하기 전, 인터럽트 여부 확인
- 인터럽트 요청 확인 -> 인터럽트 플래그를 통해 인터럽트 수용 가능 여부 확인 (중요 작업일 시 플래그=불가능 / 그러나 막을 수 없는 인터럽트도 존재)
- 수용 가능 하다면 지금까지의 작업 백업 (스택영역)
- 인터럽트 벡터를 참조 -> 인터럽트 서비스 루틴실행
인터럽트 서비스 루틴 (ISR) : 인터럽트를 처리하기 위한 프로그램, 여러개 존재
(=인터럽트 핸들러 interrupt handler)
인터럽트 벡터 (interrupt vector) : 인터럽트 서비스 루틴을 식별하기 위한 정보 (인터럽트 서비스 루틴의 시작 주소)
-> 인터럽트 요청 대상으로부터 데이터 버스를 통해 전달받음
- 4에서 백업해 둔 작업 복구, 실행 재개
🔍 예외의 종류
- 폴트 (fault)
: 예외를 처리한 직후 예외가 발생한 명령어부터 실행 재개
(ex. 보조기억장치로부터 메모리 가져올 경우)
- 트랩 (trap)
: 예외를 처리한 직후 예외가 발생하 명령어의 다음 명령어부터 실행 재개
(ex. 디버깅)
- 중단 (abort)
: CPU가 실행 중인 프로그램을 강제 중단 시킬 수 밖에 없는 심각한 오류를 발견했을 때 발생
- 소프트웨어 인터럽트
: 시스템 호출이 발생했을 때
🤓💭
레지스터 스택만 계속 보다가 CPU에 대한 전체적인 역할을 알아가는 느낌
그래도 아직 레지스터랑 스택 공부를 작동원리 위주로 더 해봐야겠다.