1. 명령어 사이클
- 프로그램 속 각 명령어들은 일정 주기 반복하며 실행함
- 이 주기가 곧 명령어 사이클!
명령어를 메모리에서 CPU로 가져온다(인출 사이클 == Fetch Cycle)
-> 명령어 실행한다 (실행 사이클 == Execution Cycle)
간접 사이클(Indirect Cycle)?
- 바로 실행 사이클 돌입할 수 없을 때가 있는 사이클임
- 예) 간접주소지정방식에서 명령어 실행하려면 메모리 접근 한 번 더 해야 함!
2. 인터럽트?
- 방해하다, 중단시키다
- CPU의 작업을 방해하는 신호
- CPU가 수행 중인 작업은 방해를 받으면 중단될 수 있음
동기 인터럽트?
- CPU에 의해 발생하는 인터럽트
- 예외라고도 부름(Exception)
비동기 인터럽트? (asynchronous interrupts)
- 주로 입출력장치에 의해 발생하는 인터럽트
- 인터럽트, 하드웨어 인터럽트라고 부름
-> 동기 인터럽트는 예외, 비동기 인터럽트는 하드웨어 인터럽트라고 부름
하드웨어 인터럽트?
- 알림과 같은 인터럽트임
- 예시) CPU가 프린터에 출력을 명령-> 프린터는 CPU속도 보다 훨씬 느림 -> CPU가 계속 프린터에게 다 됐냐고 물어보면 낭비임 -> 프린터가 출력 다하면 CPU에게 완료여부 알려주는 게 하드웨어 인터럽트
하드웨어 인터럽트 순서
- 입출력 장치가 CPU에게 인터럽트 요청 신호를 보냄
- CPU는 싱행사이클이 끝나고 명령어 인출 전 항상 인터럽트 여부 확인
- CPU는 인터럽트 요청 확인 후 인터럽트 플래그를 통해 현재 인터럽트 받을 수 있는지 확인
- 인터럽트 받을 수 있으면 CPU는 지금까지 작업 백업함
- CPU는 인터럽트 벡터 참조해서 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴 실행 종료하면 4번에서 백업한 작업 보구해서 실행 재개함
인터럽트 요청 신호
- ex) : 지금 끼어들어도 되나여?(프린터가 CPU에게)
인터럽트 플래그
- CPU가 인터럽트 요청 수용하려면 플래그레지스터의 인터럽트 플래그가 활성화 되어있어야 함
BUT, 모든 하드웨어 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아님
왜냐?
-> 가장 우선순위가 높은 인터럽트가 있기 때문. 정전, 하드웨어 고장 같은..
인터럽트 서비스 루틴(ISR : Interrupt Service Routine)
- 인터럽트 핸들러라고도 부름
- CPU가 인터럽트 요청 받아들이면 인터럽트 서비스 루틴을 실행함
- 이게 뭐냐? 인터럽트를 처리하는 프로그램임
인터럽트 벡터?
- 인터럽트 서비스 루틴을 식별하기 위한 정보
- 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있음
요약하자면
CPU가 인터럽트를 처리한다는 말은 인터럽트 서비스 루틴을 실행하고 본래 수행하던 작업으로 다시 되돌아간다는 말임!
'운영체제' 카테고리의 다른 글
[컴퓨터 구조] 클럭, 스레드, 코어 (0) | 2024.08.12 |
---|---|
[컴퓨터 구조] 레지스터 (0) | 2024.08.08 |
[컴퓨터 구조] CPU 작동 원리1 : ALU (1) | 2024.08.06 |
[컴퓨터 구조] 명령어와 명령어의 구조 (0) | 2024.08.03 |
[컴퓨터 구조] 2진수, 16진수, 인코딩 (0) | 2024.07.31 |