인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약
CPU는 메모리 안에 있는 프로그램을 어떤 정해진 흐름대로 처리하게 되는 데 이 때 정해진 흐름, 주기를 명령어 사이클이라고 한다. (즉, 프로그램 속 명령어들은 일정한 주기가 반복되며 실행된다. 이 주기가 명령어 사이클이다.)
- 하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다. 그래서 메모리 접근이 더 필요한 경우에는 간접 사이클을 이용하기도 한다.
- 어떤 명령어는 인출과 실행 사이클만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행된다.
간혹 정해진 흐름을 방해하는 신호가 CPU한테 올 수 있는데 정해진 흐름을 끊는 신호를 인터럽트라고 한다.
CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생!!!!
인터럽트의 종류
1. 동기 인터럽트(예외)
CPU가 예기치 못한 상황을 접했을 때 발생
폴트, 트랩, 중단, 소프트웨어 인터럽트
2. 비동기 인터럽트(하드웨어 인터럽트)
주로 입출력장치에 의해 발생, 알림과 같은 역할
입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용
- 입출력장치는 CPU에 비해 느리기 때문에 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다.
- 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있다.
막을 수 있는 인터럽트 | 막을 수 없느 |
하트웨어 인터럽트의 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인한다.
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 스택에 백업한다.
- CPU는 인터럽트 벡터를 참조해 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구해 실행을 재개한다.
인터럽트 요청 신호 |
|
CPU의 작업을 방해하는 인터럽트에 대한 요청 | |
인터럽트 플래그 |
|
인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트 | |
플래그 레지스터 안에 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지에 대한 여부 확인(0과 1로 표기) | |
하지만 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아니다. 그래서 막을 수 있는 인터럽트(maskable Interrupt)와 막을 수 없는 인터럽트(non maskable interrupt)로 나뉜다. (하드웨어 고장이나, 정전 같이 긴급한 상황일 때) |
|
인터럽트 서비스 루틴 | 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램 |
CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행 | |
"키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다." "마우스가 인터럽트 요청을 보내면 이렇게 행동해야 한다." |
|
인터럽트 서비스 루틴도 프로그램이기에 메모리에 저장 | |
인터럽트 벡터 |
각각의 인터럽트를 구분(식별)하기 위한 정보 |
인터럽트마다 고유한 인터럽트 서비스 루틴의 시작주소를 포함한다. | |
인터럽트 벡터 테이블 : 인터럽트 벡터들을 표처럼 모아놓은 것(메모리에 있음) | |
CPU가 각각의 인터럽트 서비스 루틴의 시작 주소를 알기위해서 필요하다. 입출력장치가 CPU에게 인터럽트 요청 신호 + 인터럽트 벡터 함께 보낸다. |
CPU가 인터럽트를 처리한다.
== 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 되돌아온다.
'
'cs' 카테고리의 다른 글
[혼공운영체제] 5.CPU의 성능 향상 기법(2) : 명령어 병렬 처리 기법 (0) | 2023.04.17 |
---|---|
[혼공운영체제] 4. 빠른 CPU를 위한 설계 기법 (0) | 2023.04.16 |
[혼공운영체제] 2. CPU의 작동원리(ALU와 제어장치, 레지스터) (0) | 2023.04.13 |
방화벽(Firewall)의 동작 원리 (0) | 2023.04.10 |
CORS (0) | 2023.04.08 |