php教程 PHP开发 Linux 장치 드라이버 인터럽트에 대한 심층 분석 (1) (2)

Linux 장치 드라이버 인터럽트에 대한 심층 분석 (1) (2)

Dec 23, 2016 pm 02:31 PM

4. 인터럽트 핸들러

Linux의 인터럽트 핸들러는 매우 독특합니다. 인터럽트 핸들러는 위쪽 부분과 아래쪽 부분으로 나뉩니다. 상하반이 있는 이유는 전적으로 인터럽트 처리의 효율성 때문이다.

상단의 기능은 "등록중단" 입니다. 인터럽트가 발생하면 장치 드라이버에 있는 인터럽트 루틴의 하위 절반을 장치 실행 큐의 하위 절반에 매달고 나면 괜찮습니다. 즉, 새 인터럽트가 도착할 때까지 기다리는 것입니다. 이런 식으로 상위 절반은 빠르게 실행될 것이며, 그는 그녀가 담당하는 장비로 인해 발생하는 더 많은 방해를 받아들일 수 있습니다. 윗부분이 더 빠른 이유는 인터럽트를 완전히 마스킹하기 때문이다. 실행이 끝나지 않으면 다른 인터럽트는 제때에 처리되지 못하고 인터럽트 핸들러가 실행될 때까지만 기다릴 수 있다. 따라서 장치에서 발생하는 인터럽트를 최대한 많이 서비스하고 처리하려면 인터럽트 핸들러가 빨라야 합니다.

그러나 일부 인터럽트 이벤트의 처리는 더 복잡하므로 인터럽트 핸들러는 작업을 완료하는 데 조금 더 시간을 소비해야 합니다. 그런데 복잡한 처리를 단시간에 완료해야 하는 모순을 어떻게 해결할 수 있을까? 이때 리눅스는 하반부라는 개념을 도입했다. 아래쪽 절반과 위쪽 절반의 가장 큰 차이점은 아래쪽 절반은 중단 가능하고 위쪽 절반은 중단 불가능하다는 것입니다.

하위 절반은 인터럽트 핸들러가 수행하는 거의 모든 작업을 수행합니다. 왜냐하면 상위 절반은 하위 절반을 자신이 담당하는 장치의 인터럽트 처리 대기열에 대기만 하고 아무 것도 신경 쓰지 않기 때문입니다. 하위 절반은 일반적으로 장치를 관찰하여 인터럽트를 생성하는 이벤트 정보를 얻고, 이 정보(보통 장치의 레지스터를 읽어 얻은 정보)를 기반으로 해당 처리를 수행하는 역할을 담당합니다. 후반이 어떻게 해야할지 모를 때가 있으면 유명한 타조 알고리즘을 사용하여 문제를 해결합니다. 직설적으로 말하면 이벤트를 무시합니다.

하반부는 인터럽트 가능하므로, 동작 중 다른 기기가 중단되면 해당 기기의 상단 실행이 끝날 때까지 하단이 일시적으로 중단될 수 있습니다. 그러나 한 가지 주의해야 할 점은 장치 인터럽트 핸들러가 실행 중인 경우 상위 절반 또는 하위 절반을 실행 중인지 관계없이 인터럽트 핸들러가 처리되지 않는 한 장치에서 새로운 인터럽트가 생성된다는 것입니다. 이 기간은 인터럽트가 무시됩니다. 인터럽트 핸들러는 재진입이 불가능하므로 동일한 인터럽트 핸들러를 병렬로 실행할 수 없습니다.

리눅스 커널 2.0 이전에는 인터럽트가 빠른 인터럽트와 느린 인터럽트로 구분되었습니다. (여기서는 의사 인터럽트에 대해서는 다루지 않겠습니다.) 빠른 인터럽트의 하위 절반도 인터럽트 불가능하므로 더 빠르게 실행됩니다. 그러나 하드웨어 수준이 계속 높아짐에 따라 빠른 인터럽트와 느린 인터럽트의 실행 속도에는 차이가 없습니다. 따라서 인터럽트 루틴 트랜잭션 처리의 효율성을 높이기 위해 Linux 커널 2.0부터 모든 인터럽트 핸들러가 포함됩니다. 느린 인터럽트의 형태 --하반부는 인터럽트될 수 있습니다.

그러나 후반부에는 특정 코드 부분을 중단할 수 없는 경우 중단을 마스크할 수도 있습니다. cti, sti 또는 save_flag, Restore_flag를 사용하여 아이디어를 실현할 수 있습니다. 사용법과 차이점은 본 글에서 지정한 참고서의 인터럽트 처리 부분을 참고하시기 바랍니다.

자세한 내용은 이 글에 명시된 참고서를 참조하시기 바랍니다. 여기서는 자세한 내용을 소개하는 것이 목적이 아닙니다.

5. 인터럽트 플래그 비트 설정

인터럽트를 처리할 때 인터럽트 컨트롤러는 보낸 마지막 인터럽트가 처리될 때까지 원래 인터럽트를 보낸 장치를 차단합니다. 따라서 인터럽트를 보낸 장치가 인터럽트 처리 중에 다른 인터럽트를 보내면 해당 인터럽트는 영원히 손실됩니다.

이런 현상이 발생하는 이유는 인터럽트 컨트롤러가 인터럽트 정보를 버퍼링할 수 없기 때문입니다. 따라서 현재 인터럽트가 처리되기 전에 새로운 인터럽트가 도착하면 반드시 새로운 인터럽트를 잃게 됩니다. 그러나 이 결함은 메인 프로세서(CPU)에 "set Interrupt Flag"(sti)를 설정하면 해결될 수 있습니다. 왜냐하면 메인 프로세서에는 인터럽트를 버퍼링하는 기능이 있기 때문입니다. "인터럽트 플래그 비트 설정"을 사용하면 sti 함수를 사용하여 인터럽트가 처리된 후 이전에 마스크된 인터럽트를 서비스할 수 있습니다.

위 내용은 Linux 장치 드라이버 인터럽트에 대한 심층 분석입니다(1)(2). 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux Architecture : 5 개의 기본 구성 요소를 공개합니다 Linux Architecture : 5 개의 기본 구성 요소를 공개합니다 Apr 20, 2025 am 12:04 AM

Linux 시스템의 5 가지 기본 구성 요소는 다음과 같습니다. 1. Kernel, 2. System Library, 3. System Utilities, 4. 그래픽 사용자 인터페이스, 5. 응용 프로그램. 커널은 하드웨어 리소스를 관리하고 시스템 라이브러리는 사전 컴파일 된 기능을 제공하며 시스템 유틸리티는 시스템 관리에 사용되며 GUI는 시각적 상호 작용을 제공하며 응용 프로그램은 이러한 구성 요소를 사용하여 기능을 구현합니다.

VSCODE 터미널 사용 튜토리얼 VSCODE 터미널 사용 튜토리얼 Apr 15, 2025 pm 10:09 PM

VSCODE 내장 터미널은 편집기 내에서 명령 및 스크립트를 실행하여 개발 프로세스를 단순화 할 수있는 개발 도구입니다. VSCODE 터미널 사용 방법 : 바로 가기 키 (CTRL/CMD)로 터미널을 엽니 다. 명령을 입력하거나 스크립트를 실행하십시오. 핫키 (예 : ctrl l)를 사용하여 터미널을 지우십시오). 작업 디렉토리 (예 : CD 명령)를 변경하십시오. 고급 기능에는 디버그 모드, 자동 코드 스 니펫 완료 및 대화식 명령 기록이 포함됩니다.

git의 창고 주소를 확인하는 방법 git의 창고 주소를 확인하는 방법 Apr 17, 2025 pm 01:54 PM

git 저장소 주소를 보려면 다음 단계를 수행하십시오. 1. 명령 줄을 열고 리포지토리 디렉토리로 이동하십시오. 2. "git remote -v"명령을 실행하십시오. 3. 출력 및 해당 주소에서 저장소 이름을 봅니다.

vScode 이전 다음 바로 가기 키 vScode 이전 다음 바로 가기 키 Apr 15, 2025 pm 10:51 PM

vs 코드 1 단계/다음 단계 바로 가기 키 사용 : 1 단계 (뒤로) : Windows/Linux : Ctrl ←; MACOS : CMD ← 다음 단계 (앞으로) : Windows/Linux : Ctrl →; MACOS : CMD →

Linux의 주요 목적은 무엇입니까? Linux의 주요 목적은 무엇입니까? Apr 16, 2025 am 12:19 AM

Linux의 주요 용도에는 다음이 포함됩니다. 1. 서버 운영 체제, 2. 임베디드 시스템, 3. 데스크탑 운영 체제, 4. 개발 및 테스트 환경. Linux는이 분야에서 뛰어나 안정성, 보안 및 효율적인 개발 도구를 제공합니다.

코드를 작성한 후 숭고한 실행 방법 코드를 작성한 후 숭고한 실행 방법 Apr 16, 2025 am 08:51 AM

Sublime에서 코드를 실행하는 6 가지 방법이 있습니다. 핫키, 메뉴, 빌드 시스템, 명령 줄, 기본 빌드 시스템 설정 및 사용자 정의 빌드 명령, 프로젝트/파일을 마우스 오른쪽 단추로 클릭하여 개별 파일/프로젝트를 실행합니다. 빌드 시스템 가용성은 숭고한 텍스트 설치에 따라 다릅니다.

Apr 16, 2025 pm 07:39 PM

메모장은 Java 코드를 직접 실행할 수는 없지만 다른 도구를 사용하여 명령 줄 컴파일러 (Javac)를 사용하여 Bytecode 파일 (filename.class)을 생성하면 달성 할 수 있습니다. Java Interpreter (Java)를 사용하여 바이트 코드를 해석하고 코드를 실행하고 결과를 출력하십시오.

Laravel 설치 코드 Laravel 설치 코드 Apr 18, 2025 pm 12:30 PM

Laravel을 설치하려면 다음 단계를 순서대로 수행하십시오. Composer 설치 (MacOS/Linux 및 Windows) 설치 LARAVEL 설치 프로그램 새 프로젝트 시작 서비스 액세스 애플리케이션 (URL : http://127.0.1:8000) 데이터베이스 연결 (필요한 경우)을 설정하십시오.

See all articles