Interrupt
- 현대의 운영체제는 인터럽트에 의해 구동된다라는 말이 있을 정도이다.
- 프로그램을 실행하는 도중에 예기치 않은 상황이 발생하는 경우, 실행을 중단하고 발생한 상황에 대한 처리가 먼저 필요하다고 CPU에게 요청하는 것이다.
CPU는 Interrupt line 을 통해 Interrupt가 발생되었는지에 대해 안다. CPU는 한 명령을 수행한 후 interrupt line을 확인한다.
Timer Interrupt
한 프로그램이 CPU를 독점하는 것을 방지하기 위해서 Timer라는 하드웨어는 Timer Interrupt를 사용한다. 예를들어 무한루프, while문과 같은 경우 프로그램이 종료되지 않을 것이고, I/O를 하지도 않을 것이다. 이렇게 한 프로그램이 CPU를 독점하게 된다면 다른 프로그램으로 넘어가 처리를 할 수 없다.
따라서 Timer는 정해진 시간이 흐른 뒤 사용자 프로그램에서 운영체제로 CPU 제어권이 넘어가도록 Interrupt를 발생시킨다. Timer는 매 Clock의 tick 할 때마다 1씩 감소한다. 그리고 Timer 값이 0이되면 Interrupt를 발생시킨다.
I/O를 위한 Interrupt의 종류
우선, 넓은 의미의 인터럽트로 하드웨어 인터럽트와 Trap을 포함하여 부르기도 한다. 보통은 Interrupt란 것은 하드웨어 인터럽트를 의미한다.
1) Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
ex) 전원이상, 기계착오, 외부신호, 입출력장치에 의해 발생한다.
2) Trap (소프트웨어 인터럽트)
- Exception : 프로그램이 오류를 범한 경우 ex) 0으로 나누기, 오버플로우, 명령어 잘못 사용
- System call : 프로그램이 커널 함수를 호출한 경우이다. 사용자 프로그램이 직접 요청하여 CPU에 인터럽트를 거는 것을 의미한다.
Interrupt 발생 과정 예시
- Disk I/O 를 요청하는 사용자 프로그램이 있다고 하자.
프로그램이 실행 중에 disk 에서 읽어오는 요청(= System Call) 을 하기 위해서 CPU에 인터럽트를 걸 수 있다. → mode bit 가 1에서 0으로 바뀐다. (즉, 사용자모드에서 커널모드로 전환된다.) → CPU제어권이 OS로 넘어간다.(커널모드) → disk device controller에게 요청한다 → I/O 장치에서 작업이 다 끝났으면, 일을 완료했음을 CPU에 알리기 위해서 하드웨어 인터럽트가 발생한다.
즉, I/O 요청을 위해서는 소프트웨어 인터럽트 (Trap) 이 필요하고, I/O 장치의 작업이 완료했다는 것을 CPU에 알리기 위해서는 하드웨어 인터럽트가 필요하다.
여기서 mode bit란, CPU 제어권을 OS(운영체제)가 가지고 있는지, 사용자 프로그램이 가지고 있는지 표시한다. 하드웨어 적으로 두가지 모드의 operation을 지원한다.
1 사용자 모드 : 사용자 프로그램 실행 0 커널 모드 (= 모니터 모드): OS
그리고 Device Controller 라는 것은 I/O 장치를 관리하는 일종의 작은 CPU이다. 예를 들어, 사용자 프로그램이 실행될 때 I/O장치에 직접 요청을 할 수 없고 OS를 통해 요청을 하게 되며, OS는 Device Controller 에게 요청을 한다. 요청을 받은 Device Controller는 직접 I/O장치에 대해 처리하게 된다.
- Device Controller : 각 device를 통제하는 작은 CPU (hardware) *** Device Driver** : 각 device에 접근할 수 있게 해주는 모듈이다. 하드웨어를 붙이면 device driver를 설치 해야 한다. (software)
인터럽트 관련 용어
- 인터럽트 처리 루틴 (= Interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수. 인터럽트 종류마다 운영체제가 해야할 일이 다를 것이다. 각각의 인터럽트 종류마다 무슨일을 해야 하는지 운영체제에 코드로 정의되어 있는 것이 인터럽트 처리 루틴이다.
- 인터럽트 벡터 : 인터럽트 처리 루틴 함수가 있는 주소를 정의해놓은 테이블이다.
사진 출처 : 반효경 교수님 kowc 운영체제 강의
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] Process와 Thread의 차이 (0) | 2023.03.30 |
---|---|
[운영체제] 세마포어와 뮤텍스 알고리즘 (1) | 2023.01.16 |
[운영체제] CPU 스케줄링 & 선점/비선점 스케줄링 알고리즘 (0) | 2023.01.08 |
[운영체제] 용어 정리 Multitasking/Multiprocess/Time sharing/Multiprocess /Multiprocessor (0) | 2023.01.01 |
[운영체제] 운영체제의 뜻, 목적, 분류 (0) | 2023.01.01 |