
혼공컴운 4~5장
CPU는 계산담당 ALU, 명령어 읽기/해석 담당 제어장치, 임시 저장장치 레지스터로 크게 구분한다고 했음. ALU와 제어장치가 무엇을 내보내고 무엇을 받아들이는 지 알아볼 것.
ALU가 내보내는 플래그
1. 부호 플래그 - 마이너스가 있는가
2. 제로 플래그 - 연산결과가 0인가
3. 캐리 플래그 - 올림수나 빌림수가 발생하였는가
4. 오버플로우 플래그 - 오버플로우가 발생했는가
5. 인터럽트 플래그 - 인터럽트가 가능한가
6. 슈퍼바이저 플래그 - 커널모드로 실행중인가
위 각각에 해당하면 플래그가 1로 켜진다🚩
제어장치가 받아들이는 정보
- 클럭 신호
- 해석해야 할 명령어
- 플래그 레지스터 속 플래그 값
- 시스템 버스 중 제어 버스로 전달 된 제어 신호
제어장치가 내보내는 정보
- CPU 외부에 전달하는 제어 신호
=> 제어 버스에 보내는 신호. 메모리에 전달 / 입출력장치에 전달- CPU 내부에 전달하는 제어 신호
=> ALU에 전달 / 레지스터에 전달
명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨. 상용화 PC의 레지스터들은 CPU마다 이름, 크기, 종류가 다 다름. 주요 부속품인 8가지 레지스터를 짚고 넘어갈 것.
8가지 대표적 레지스터
- 프로그램 카운터
- 명령어 레지스터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
- 플래그 레지스터
- 범용 레지스터
- 스택 포인터
- 베이스 레지스터
명령어 사이클
- 인출 사이클
- 실행 사이클
- 간접 사이클
- 동기 인터럽트: CPU에 의해 발생하는 인터럽트. 예외라고 부르는 것들이 이것.
- 비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트. 알림 역할을 함. 프린터같은 입출력 장치에 작업을 부탁하면 입출력장치가 CPU에 완료 알림(인터럽트)을 보냄.
입출력장치는 CPU보다 속도가 현저히 느리기 때문에 CPU가 결과를 바로 받아볼 수 없음. 그렇다고 CPU가 주기적으로 결과를 확인하는 건 리소스 낭비. 이때 하드웨어 인터럽트를 이용하면 완료 시점에 인터럽트를 보내 그 사이 CPU는 다른 일을 할 수 있고, 완료 시 바로 결과를 받아볼 수 있다.
하드웨어 인터럽트 처리 순서
1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인
4. 인터럽트를 받아들일 수 있다면 지금까지의 작업을 백업
5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
6. 인터럽트 서비스 루틴이 끝나면 4번에서 백업한 작업 복구하여 다시 수행
인터럽트 요청 신호
인터럽트 플래그
인터럽트 벡터
인터럽트 서비스 루틴