logo

ISR과 함수 호출의 차이점

이번 글에서는 의 차이점에 대해 알아보겠습니다. ISR 그리고 함수 호출 , 그러나 차이점을 논의하기 전에 ISR 및 함수 호출에 대해 간략하게 알아야 합니다.

자바 문자열 비교

ISR이란 무엇입니까?

ISR(인터럽트 서비스 루틴)은 인터럽트에 대한 응답으로 하드웨어가 호출하는 소프트웨어 루틴입니다. ISR은 인터럽트를 검사하고, 이를 처리하는 방법을 결정하고, 실행하고, 논리적인 인터럽트 값을 반환합니다. 추가 처리가 필요하지 않으면 ISR은 반환 값을 커널에 알립니다. ISR은 장치의 작동 속도와 우선 순위가 낮은 모든 ISR의 작동 속도가 느려지는 것을 방지하기 위해 매우 빠르게 수행되어야 합니다.

ISR은 데이터를 CPU 레지스터나 하드웨어 포트에서 메모리 버퍼로 이동할 수 있지만 일반적으로 IST(인터럽트 서비스 스레드)라고 하는 전용 인터럽트 스레드(또는 작업)를 사용하여 필요한 대부분의 처리를 수행합니다. 추가 처리가 필요한 경우 ISR은 논리적 인터럽트 값을 커널에 반환합니다. 그런 다음 물리적 인터럽트 번호를 논리적 인터럽트 값에 매핑합니다.

인터럽트 처리 메커니즘

다음은 다음과 같은 단계의 인터럽트 처리 메커니즘입니다.

  • 인터럽트는 CPU가 현재 프로그램을 일시 중지하고 ISR을 실행하게 만드는 조건입니다. ISR은 인터럽트를 발생시킨 조건을 서비스하기 위해 특별히 작성된 프로그램입니다.
  • 인터럽트가 처리된 후 CPU는 정확히 다음 명령어에서 떠난 메인 프로그램으로 돌아갑니다.
  • 인터럽트 기반 데이터 전송에서는 I/O 장치가 데이터 전송 준비가 될 때마다 CPU를 인터럽트합니다. ISR에서는 CPU가 데이터 전송을 수행합니다.
  • 이 방법은 CPU가 I/O 장치의 상태를 확인하는 데 시간을 낭비할 필요가 없기 때문에 폴링보다 낫습니다. 키보드는 인터럽트 기반 I/O 액세스의 좋은 예입니다.
  • CPU를 확인하는 대신 키를 누를 때 키보드가 CPU를 중단해야 합니다. 따라서 사용자가 전혀 입력하지 않을 때 키보드를 반복적으로 확인하는 데 시간이 낭비되지 않습니다.
  • I/O 장치는 다음을 전송하여 인터럽트를 요청합니다. $overline{INTR}$ CPU에 신호를 보냅니다.
  • CPU가 수신할 때마다 $overline{INTR}$ 신호를 받으면 현재 명령어의 실행을 완료한 다음 ISR을 실행합니다. CPU가 준비되면 CPU는 다음을 통해 확인 신호를 보냅니다. 하는 동안 선.
  • ISR이 실행되고 CPU는 기본 프로그램으로 돌아갑니다.
  • I/O 장치는 $overline{INTR}$ 실행 후 신호.
ISR과 함수 호출의 차이점

예를 들어: 아래 예에서는 인터럽트 기반 I/O에 의한 I/O 전송입니다.

for 루프 bash
  • 프로세서와 데이터 전송을 수행하려는 I/O 장치가 프로세서를 중단해야 하는 경우.
  • 인터럽트는 프로세서가 인터럽트 서비스 루틴을 실행하게 만드는 조건입니다.
  • ISR에서 프로세서는 I/O 장치와 데이터 전송을 수행합니다.

이 예에서는 키보드 키를 눌러 요청을 중단하고,

  • 프로세서가 키를 눌렀는지 여부를 확인하는 대신 키를 누를 때 키보드가 프로세서를 중단합니다.
  • 키보드 드라이버 소프트웨어의 일부인 키보드의 ISR에서 프로세서는 키보드의 데이터를 읽습니다.
ISR과 함수 호출의 차이점

ISR의 장점

다음은 ISR의 다음과 같은 장점입니다.

  • ISR 비동기 이벤트는 프로그램 실행 중 언제든지 발생할 수 있습니다.
  • ISR은 PC, 플래그 및 레지스터를 스택에 저장하고 모든 인터럽트를 비활성화하며 ISR의 주소를 로드합니다.
  • ISR은 전달될 수 있는 인수를 가질 수 없습니다.
  • ISR은 값을 반환할 수 없습니다.
  • ISR은 인터럽트를 활성화합니다.
  • 일반적으로 ISR은 다른 프로세스의 시간이 걸리기 때문에 작습니다.
  • 일부 ISR에는 자체 스택이 있습니다.

함수 호출이란 무엇입니까?

함수 호출을 서브루틴 호출이라고도 합니다. 서브루틴은 프로그램에 반복적으로 필요한 명령어 세트입니다. 특정 작업을 수행하는 더 큰 프로그램의 일부입니다. 더 큰 프로그램은 과도한 작업량을 실행할 수 있으며, 서브루틴은 나머지 프로그램 코딩과 별개로 간단한 작업만 수행할 수도 있습니다.

함수는 여러 번 호출될 수 있고 다른 위치에서(심지어 다른 함수 내에서도) 호출될 수 있는 방식으로 코딩됩니다. 함수가 호출되면 프로세서는 함수에 대한 코드가 있는 곳으로 가서 함수의 명령을 하나씩 실행할 수 있습니다. 기능을 완료한 후 프로세서는 정확히 중단된 위치로 돌아가 다음 명령부터 실행을 계속합니다.

자바에서 문자열 뒤집기

함수는 코드 재사용을 위한 훌륭한 도구입니다. 많은 최신 프로그래밍 언어는 기능을 지원합니다. 함수 모음을 a라고 합니다. 도서관 . 라이브러리는 소프트웨어를 공유하고 거래하는 수단으로 자주 사용됩니다. 어떤 경우에는 전체 프로그램이 일련의 서브루틴일 수 있습니다.

8086 프로세서의 경우 서브루틴은 다음에 의해 호출됩니다. 부르다 명령 및 제어 반환은 다음과 같습니다. 오른쪽 지침. 프로그램의 크기를 줄여줍니다.

ISR과 함수 호출의 차이점

함수는 명시적으로 호출되어야 하며 호출자와 동일한 컨텍스트 및 실행 스레드의 일부입니다. 하드웨어 ISR은 명시적으로 호출되지 않고 일부 외부 이벤트에 의해 호출됩니다. 현재 스레드의 컨텍스트는 ISR로 컨텍스트를 전환하기 전에 인터럽트가 호출되면 자동으로 보존됩니다.

그 대가로 역방향 컨텍스트 전환이 발생하여 인터럽트 이전의 프로세서 상태를 복원하여 인터럽트 지점부터 실행이 계속됩니다. 다음은 ISR과 함수 호출 간의 몇 가지 차이점입니다.

ISR 함수 호출
인터럽트는 일반적으로 명령어 실행보다는 내부 또는 외부 신호 마이크로프로세서에 의해 시작됩니다. ISR은 프로그램의 현재 상태를 스택에 저장한 후 실행됩니다.
ISR은 인터럽트된 장치나 프로그래머가 작성한 명령에 따라 다른 작업을 수행합니다.
함수 호출은 특정 작업을 수행하고 프로그램 크기를 줄이는 명령을 실행하여 호출됩니다.
하드웨어는 ISR의 주소를 결정합니다.
ISR 주소는 인터럽트 벡터 테이블 내부에 기록되며 각 인터럽트의 ISR 주소는 고정되어 있습니다.
서브루틴의 주소는 명령어 내부에 기록되며, 이는 메인 프로그램 코드 내부에 기록됩니다.
ISR은 모든 범용 작업에 사용됩니다. 프로그램별 작업을 위해 함수 호출이 이루어집니다.
따라서 현재 프로그램을 실행하는 중에 인터럽트가 발생하면 프로세서는 현재 명령어를 실행한 후 ISR을 실행합니다. ISR 실행 후 프로세서는 인터럽트가 발생하기 전과 똑같이 프로그램을 재개해야 합니다.
이를 위해 PC 내용, µP 레지스터 및 일부 상태 조건이 저장됩니다. 마이크로프로세서의 모든 상태 비트 조건을 모아 놓은 것을 PSW(프로그램 상태 워드)라고 합니다.
  • 인터럽트 주기 동안 PC와 PSW의 내용이 스택으로 푸시됩니다. 그런 다음 특정 인터럽트에 대한 분기 주소가 PC로 전달되고 새 PSW가 상태 레지스터에 로드됩니다.
  • ISR의 마지막 명령어는 중단된 명령어로부터의 복귀입니다. 이 명령어가 실행되면 이전 PSW와 반환 주소가 스택에서 팝됩니다.
여기서는 메인 프로그램에서 다음 명령어의 주소를 얻기 위해 스택에 PC만 저장한다.
서브루틴은 호출 서브루틴의 데이터에 액세스할 수 있어야 하며 해당 서브루틴에 결과를 반환해야 합니다. 따라서 서브루틴 파라미터와 데이터 연동이 이루어집니다.
이는 다음을 통해 수행할 수 있습니다.
  • AC 레지스터는 단일 입력 매개변수와 단일 출력 매개변수에 사용할 수 있습니다. 다중 프로세서 레지스터가 있는 컴퓨터에서는 이 방법으로 더 많은 매개변수를 전달할 수 있습니다.
  • 서브루틴에 데이터를 전달하는 또 다른 방법은 메모리를 이용하는 것입니다.