[Tistory] [OS] Interrupt와 Context Switching

원글 페이지 : 바로가기

인터럽트(Interrupt)란? CPU가 어떤 일을 수행하던 중, 예상치 못한 외부에서 발생한 이벤트로 인해 프로세스를 잠시 중단시키는 것 인터럽트가 발생하면 현재 실행 중인 프로세스나 프로그램이 멈추고, `해당 인터럽트를 처리하는 루틴(인터럽트 핸들러 루틴)`이 실행된다. 인터럽트는 키보드, 마우스 등 I/O 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생한다. 인터럽트의 종류 동기 인터럽트(예외) CPU에 의해 발생하는 인터럽트로, CPU가 예기치 못한 상황을 접했을 때 발생한다. 비동기 인터럽트(하드웨어 인터럽트) 주로 입출력 장치에 의해 발생하는 인터럽트로, 입출력 작업 도중에도 효율적으로 명령을 처리하기 위해 사용한다. 알림과 같은 인터럽트 명령어 사이클(Instruction Cycle) CPU가 하나의 명령어를 처리하는 흐름에는 정해진 흐름이 있고, CPU는 그 흐름을 반복하여 명령어들을 처리한다. 이렇게 하나의 명령어를 처리하는 정형화된 흐름을 `명령어 사이클`이라고 한다. 실행하는 프로그램은 수많은 명령어로 이루어져 있는데, CPU는 프로그램을 실행한 순간부터 프로그램이 중단될 때까지 명령어를 하나씩 수행해 나간다. 즉, 프로그램 속 각각의 명령어는 `인출`, `간접`, `실행`, `인터럽트` 사이클이 반복되며 실행된다. 인출(Fetch) 사이클 CPU는 메모리에서 다음에 실행할 명령어를 하나 읽어온다. 실행(Execute) 사이클 가져온 명령어를 실행하는 단계 CPU가 명령어 코드를 해독하고, 그 결과에 따라 필요한 연산을 수행한다. `명령어`는 `연산 코드`와 `오퍼랜드`로 구성된다. `연산 코드`: CPU가 수행할 연산의 종류 `오퍼랜드`: 명령어 실행에 필요한 데이터 또는 데이터의 주소 CPU가 수행하는 연산들의 종류 데이터 이동: CPU와 기억장치 간 혹은 I/O 장치 간에 데이터를 이동 데이터 처리: 데이터에 대하여 산술 혹은 논리 연산을 수행 데이터 저장: 연산 결과 데이터 혹은 입력장치로부터 읽어 들인 데이터를 기억장치에 저장 프로그램 제어: 프로그램의 실행 순서를 결정 프로그램을 이루는 수많은 명령어는 일반적으로 `인출`과 `실행` 사이클을 반복하여 실행한다. 간접(Indirect) 사이클 실행 사이클 전에 추가적인 메모리 접근이 필요할 경우 발생함 명령어의 `오퍼랜드(operand)`가 간접 주소 지정 방식인 경우에 유효 주소를 계산하기 위해서 메모리에 접근하는 단계 `간접 주소 지정 방식`은 오퍼랜드 필드에 유효 주소의 주소를 명시한다. 이런 경우 명령어를 인출하여 CPU를 가져왔다 하더라도 바로 실행 사이클에 돌입할 수 없다. 명령어에 실행하기 전에 메모리 접근을 한 번 더 해야하기 때문이다. 인터럽트(Interrupt) 사이클 CPU가 현재 실행 중인 프로그램을 중단하고 외부 이벤트에 대응하기 위해 인터럽트를 처리한다. CPU가 현재 실행 중인 작업을 중단하고 `인터럽트 서비스 루틴`으로 이동하여 해당 이벤트를 처리한다. `인터럽트 서비스 루틴(ISR)`은 `인터럽트 핸들러`라고도 하며, 인터럽트를 처리하기 위해 수행하는 프로그램 루틴이다. `CPU가 인터럽트를 처리한다`라는 말은, `인터럽트 서비스 루틴`을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다라는 것을 뜻한다. 인터럽트를 처리하는 방법은 입출력 장치마다 다르므로 각기 다른 서비스 루틴을 가지고 있다. CPU는 수많은 ISR을 구분하기 위해 `인터럽트 벡터`를 이용한다. `인터럽트 벡터`: ISR를 식별하기 위한 정보 인터럽트 벡터를 알면 ISR의 시작 주소를 알 수 있다. CPU는 인터럽트 벡터를 통해 특정 서비스 루틴을 처음부터 시작할 수 있다. CPU가 작업을 수행하는 도중 키보드 인터럽트가 발생한 경우라면, CPU는 인터럽트 벡터를 참조하여 키보드 ISR의 시작 주소를 알아내고, 시작주소부터 실행해 나가며 키보드 ISR를 실행한다. 컨텍스트 스위칭(Context Switching) 한 프로세스가 실행되는 도중에 다른 프로세스가 실행되도록 프로세스의 상태를 저장하고 복원하는 것 `Context`: CPU가 해당 프로세스를 실행하면서 가지는 정보 ➡️프로세스의 PCB에 저장된다. 인터럽트는 컨텍스트 스위칭을 트리거하고, CPU가 다른 프로세스로 전환되어 다음 작업을 수행하도록 한다. 너무 잦은 컨텍스트 스위칭은 오버헤드를 초래한다. 컨텍스트 스위칭이 발생하는 인터럽트 입출력 요청이 왔을 때 CPU 사용 시간이 만료되었을 때 자식 프로세스를 만들 때 인터럽트 처리를 기다릴 때 Ref https://nostressdev.tistory.com/17 https://www.youtube.com/watch?v=3Yz7OnVUM28 https://velog.io/@kikahy/%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9D%B4%ED%81%B4%EA%B3%BC-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8 https://yz-zone.tistory.com/66 https://rebugs.tistory.com/189

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다