사용자와 컴퓨터 하드웨어 사이의 인터페이스 역할을 하는 프로그램이다.

컴퓨터 시스템은 다음 4가지 요소로 구성된다.
컴퓨터의 물리적 장치
예)
하드웨어 사용을 제어하고 조정하는 역할
예)
사용자가 사용하는 프로그램
예)
컴퓨터를 사용하는 주체
예)
운영체제는 관점에 따라 다음 두 가지 방식으로 정의할 수 있다.
자원이란 프로그램, 데이터 등 컴퓨터 시스템의 모든 것을 의미한다.
운영체제는 이러한 자원을 효율적이고 공평하게 사용할 수 있도록 관리한다.
운영체제는 다음과 같은 역할도 수행한다.
운영체제의 정의는 관점에 따라 달라질 수 있다.
운영체제를 제공할 때 그 안에 들어간 모든 것이 운영체제라고 볼 수도 있다.
(예: Windows 10)
Kernel만 운영체제라고 정의하기도 한다.
Kernel을 제외한 프로그램은

컴퓨터 시스템은 다음 요소들로 구성된다.
I/O device와 CPU는 동시에 실행될 수 있다. 즉 CPU가 어떤 프로그램을 실행하는 동안 disk는 disk대로 데이터를 읽고 쓸 수 있다.
각각의 controller 안에는 local buffer라는 작은 메모리가 있다.
I/O 작업은 device → device controller의 local buffer 로 이루어진다.
CPU는 memory와 local buffer 사이에서 데이터를 이동시킨다. 이때 데이터 이동은 shared bus를 통해 이루어진다.
device controller는 작업이 끝나면 interrupt를 발생시켜 CPU에게 알린다.
모든 데이터 전송은 shared bus라는 공용 통로를 통해 이루어진다.
'A' 키 입력'A' 데이터를 읽어옴즉 CPU 작업은 기본적으로
CPU ↔ Memory
간 이루어지는 작업이다.
인터럽트를 이해하기 위해 먼저 CPU가 프로그램을 실행하는 과정을 알아야 한다.
CPU는 프로그램을 한 번에 실행하는 것이 아니라 명령어 하나씩 실행한다.
이때 명령어 하나를 실행하는 단위를
Instruction Cycle
이라고 한다.
Instruction cycle은 다음 단계로 이루어진다.
Fetch
→ memory에서 명령어 가져옴
Decoding
→ 명령어 해석
Execution
→ 명령 실행
Instruction cycle이 끝나면 다음 instruction cycle로 들어가기 전에 항상 interrupt check를 수행한다.
즉 CPU 동작 흐름은 다음과 같다.
Fetch → Decode → Execute
↓
Interrupt Check
↓
Interrupt 존재 → Interrupt Cycle
Interrupt 없음 → 다음 Instruction Cycle
CPU가 명령어를 실행하려면 다음 정보가 필요하다.
다음에 실행할 명령어가 메모리 어디에 있는지 알려주는 값
계산 중인 값들을 저장하는 공간
특별한 종류의 레지스터이며
다음에 실행할 명령어의 주소가 들어 있다.
CPU 내부에 있는 아주 작은 초고속 저장공간
RAM은 CPU보다 훨씬 느리기 때문에 CPU는 계산을 할 때 메모리에서 바로 계산하지 않는다.
따라서 CPU 안에 register라는 작은 저장공간을 두고 여기에 데이터를 가져와 계산한다.

인터럽트가 발생했을 때 어떤 장치에서 발생했는지 확인하는 방법은 두 가지가 있다.
인터럽트 원인을 CPU가 직접 조사하는 방식
동작 방식
인터럽트 발생 시 해당 device가 자신의 고유 번호 (vector) 를 함께 보낸다.
CPU는
Interrupt Vector Table
을 조회하여 해당 ISR 주소를 찾는다.
각 인터럽트에 맞는 실제 처리를 담당하는 코드
예시 상황
인터럽트 발생 시 흐름
PC = 100
↓
Fetch 100 → PC = 101
Execute 100
↓
Interrupt 발생
↓
Stack ← 101
PC ← 3000
↓
Fetch 3000 → PC = 3001
Execute ISR
↓
...
↓
ISR 종료
↓
PC ← 101
↓
Fetch 101

위 그림의 시나리오는 다음과 같다.
명령을 받은 I/O 장치는 CPU가 다른 일을 하는 동안 데이터 전송 작업을 수행한다. 즉 이때 CPU 작업과 I/O 작업이 동시에 진행된다.
I/O 장치가 일을 다 마치면 CPU에게 신호를 보낸다. = Interrupt
CPU는 해당 ISR로 점프하여 인터럽트 처리를 수행한다. 처리가 끝나면 다시 멈췄던 사용자 프로세스 위치로 돌아가 작업을 계속한다.
이후 두 번째 I/O request가 발생하면서 위 과정이 반복된다.