KR20080013914A - 인터럽트를 처리하는 장치 독립형 방법 및 사용자 모드드라이버에 인터럽트를 전달하기 위한 방법 - Google Patents

인터럽트를 처리하는 장치 독립형 방법 및 사용자 모드드라이버에 인터럽트를 전달하기 위한 방법 Download PDF

Info

Publication number
KR20080013914A
KR20080013914A KR1020077026790A KR20077026790A KR20080013914A KR 20080013914 A KR20080013914 A KR 20080013914A KR 1020077026790 A KR1020077026790 A KR 1020077026790A KR 20077026790 A KR20077026790 A KR 20077026790A KR 20080013914 A KR20080013914 A KR 20080013914A
Authority
KR
South Korea
Prior art keywords
interrupt
user mode
driver
device driver
mode device
Prior art date
Application number
KR1020077026790A
Other languages
English (en)
Inventor
매드허서드한 탤루리
프레데릭 제이. 4세 스미쓰
제프 엘. 해븐스
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20080013914A publication Critical patent/KR20080013914A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)
  • Stored Programmes (AREA)

Abstract

장치 드라이버가 사용자 모드 레벨에서 실행될 수 있는 프레임워크를 제공하기 위한 시스템 및 방법이 개시된다. 플랫폼(예를 들어, ASIC) 또는 버스(PCI 버스) 일반 특징은 사용자 레벨 드라이버가 장치 인터럽트를 클리어하기 위해 대기할 필요 없이 인터럽트 모드에서 CPU를 벗어나도록 하는데 이용된다. 이로 인해, 사용자 공간에서 완전한 장치 드라이버를 기입할 수 있다. 장치 드라이버는 계속 인터럽트에 관한 알림을 받지만, 인터럽트 우선순위에 따라서는 아니다. 동일 방식은 다수의 장치들이 단일 인터럽트 라인을 공유하는 공유된 인터럽트로 확장될 수 있다.
인터럽트, 사용자 모드, 드라이버, 커널 모드, 인터럽트 라인

Description

인터럽트를 처리하는 장치 독립형 방법 및 사용자 모드 드라이버에 인터럽트를 전달하기 위한 방법{METHOD FOR DELIVERING INTERRUPTS TO USER MODE DRIVERS}
본 발명은 일반적으로 컴퓨터 하드웨어 장치 드라이버 분야에 관한 것이다. 더욱 상세하게는, 본 발명은 커널 모드보다는 사용자 모드에서 인터럽트를 제공 및 처리하는 시스템 및 방법에 관한 것이다.
MICROSOFT WINDOWS 운영 체제와 기타 운영 체제에서의 드라이버는 사용자 모드나 커널 모드에서 실행될 수 있다. 사용자 모드 드라이버는 피보호 서브시스템 코드를 비롯한 기타 애플리케이션 코드가 실행되는 비권한 프로세서 모드에서 실행될 수 있다. 사용자 모드 드라이버는 API(이 API는 또한 시스템 서비스를 호출함)를 호출하는 경우를 제외하면 시스템 데이터에 액세스할 수 없다. 커널 모드 드라이버는 하나 이상의 피보호 서브시스템을 지원하는 기초적인 운영 체제 컴포넌트인 운영 체제 실행기(executive)의 일부로서 실행될 수 있다.
사용자 모드 및 커널 모드 드라이버는 상이한 구조, 상이한 입력 포인트 및 상이한 시스템 인터페이스를 갖는다. 장치가 사용자 모드 또는 커널 모드 드라이버를 필요로 하는지는 운영 체제에 있어서 장치 타입 및 장치에 이미 제공된 지원에 따라 다르다. 대부분의 장치 드라이버는 커널 모드에서 실행된다. 커널 모드 드라이버는 일정 피보호 동작을 수행할 수 있고, 사용자 모드 드라이버가 액세스할 수 없는 시스템 구조에 액세스할 수 있다.
하드웨어 장치가 CPU를 인터럽트할 때, CPU는 (CPU 레벨에서) 내부적으로 모든 인터럽트를 마스킹하고, 인터럽트를 서비스하도록 설계된 루틴을 처리하는 운영 체제 예외를 호출함으로써 응답한다. 통상, 이러한 루틴은 현재 인터럽트 레벨에서 및 그 레벨 아래에서 인터럽트를 마스킹하도록 APIC를 프로그램한 다음에, CPU 레벨에서 인터럽트를 다시 이네이블할 것이다. 다음으로, 인터럽트를 생성한 장치를 서비스하는 드라이버에 대해 인터럽트 서비스 루틴(interrupt service routine; ISR)이 호출될 것이다. 인터럽트를 공유하는 경우에, ISR들은 ISR들 중 하나가 인터럽트를 처리한 것을 표시할 때까지 차례대로 호출될 것이다. 이때, 인터럽트는 처리되었어야 하고, OS 루틴은 APIC 레벨에서 인터럽트를 클리어하고 반환한다. 이러한 전체 프로세스는 인터럽트 발생 시 실행 중이었던 스레드의 환경에서 실행되고, 상승된 IRQL에서 실행된다. 따라서, ISR 코드는 단지 커널 모드 코드에 적합한 잘 제어된 환경에서 실행된다(즉, 실행된 코드, 및 그 코드에 의해 액세스된 데이터는 비페이징(non-paged)이어야 한다. 코드는 차단할 수 없다, 등등). 인터럽트를 처리할 필요가 있는 장치 드라이버는 사용자 모드에서 인터럽트를 처리하기 위한 지원 부족 때문에 통상 커널 모드에서 실행된다.
따라서, 추가적인 클래스의 장치들이 사용자 모드 드라이버를 이용할 수 있도록, 운영 체제 메커니즘이 사용자 모드에서 인터럽트를 전달할 필요가 있다. 본 발명은 그러한 해결책을 제공한다.
본 발명은 장치 드라이버가 사용자 모드 레벨에서 실행될 수 있도록 하기 위한 시스템 및 방법에 관한 것이다. 플랫폼(예를 들어, ASIC) 또는 버스(PCI 버스)의 일반적인 특징은 사용자 모드 ISR이 장치 인터럽트를 클리어하도록 스케줄링될 수 있을 때까지 인터럽트를 마스킹하는데 이용된다. 따라서, 인터럽트 처리기는 표준 사용자 모드 환경에서 사용자 모드 코드로서 기입될 수 있다. 이로 인해, 오로지 인터럽트를 처리할 목적으로, 이전에는 커널 모드 드라이버로서 기입되어야 했던 드라이버의 클래스가 사용자 모드로 이식(port)될 수 있다. 장치 드라이버는 인터럽트에 관한 알림을 계속 수신하지만, 인터럽트 우선 순위에 따라 수신하는 것은 아니다. 이와 동일한 방식은 다수의 장치들이 단일 인터럽트 라인을 공유하는 공유된 인터럽트에 확장될 수 있다.
본 발명의 일 특징에 따르면, 일반 인터럽트 기능으로서 동작하는 커널 서비스가 제공된다. IPC 메커니즘은 컴포넌트들이 서로 통신할 수 있도록 한다. I/O 관리자는 컴포넌트들의 자원 할당/부트스트랩/오케스트레이션을 수행한다. 인터럽트 서비스는 I/O 관리자에 팩토리(factory) 인터페이스를 제공하여, 드라이버에 전달될 인터럽트 개체를 할당한다. 인터럽트 서비스는 사용자 모드 드라이버가 인터럽트를 수신할 준비가 된 경우에 호출할 수 있는 보조 인터페이스를 노출시킨다. 이러한 호출로부터의 복귀는 하드웨어 인터럽트가 발생했고, 드라이버가 장치를 통신/조작해야 함을 의미한다.
본 발명의 추가적인 특징들과 이점들은 첨부된 도면들을 참조하여 진행되는 예시적인 실시예들의 다음 상세한 설명으로부터 명확해 질 것이다.
상술한 발명의 상세한 설명뿐만 아니라, 바람직한 실시예의 다음 상세한 설명도 첨부된 도면을 참조하여 읽을 때 더 잘 이해된다. 본 발명을 도시할 목적으로, 본 발명의 예시적인 구성들이 도면들에 도시되어 있지만, 본 발명은 개시된 특정 방법과 수단들에 한정되는 것은 아니다.
도 1은 본 발명의 양태들이 구현될 수 있는 예시적인 컴퓨팅 환경을 도시한 블록도.
도 2는 도 1과 같은 컴퓨팅 장치 내의 통상적인 아키텍처를 도시한 도면.
도 3은 장치 드라이버가 커널 모드에 상주하는 경우에, 인터럽트를 처리하는 통상의 방법에 대한 타임라인을 도시한 도면.
도 4 및 도 5는 본 발명에 따른 인터럽트를 처리하기 위한 타임라인을 도시한 도면.
예시적인 컴퓨팅 환경
도 1은 본 발명이 구현되기에 적합한 컴퓨팅 시스템 환경(100)의 일례를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 적합한 컴퓨팅 환경의 일례에 불과하며, 본 발명의 용도 또는 기능성의 범위에 관해 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에 도시된 컴포넌트들 중 임의의 하나 또는 그 컴포넌트들의 임의의 조합과 관련하여 어떤 의존성 또는 요구사항 을 갖는 것으로 해석되어서는 안된다.
본 발명은 많은 기타 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성에서 동작할 수 있다. 본 발명에서 사용하는 데 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드-헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능한 가전제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템들이나 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만 이에 제한되는 것은 아니다.
본 발명은 일반적으로 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크 또는 기타 데이터 전송 매체를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시되도록 설계된다. 분산 컴퓨팅 환경에서, 프로그램 모듈 및 기타 데이터는 메모리 저장 장치를 비롯한 로컬 및 원격 컴퓨터 저장 매체 둘다에 위치할 수 있다.
도 1과 관련하여, 본 발명을 구현하는 예시적인 시스템은 컴퓨터(110) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들은 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결시키는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니 다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스, PCI-Express(Peripheral Component Interconnect Express), 그리고 SMBus(Systems Management Bus) 등을 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함한다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 1은 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장매 체를 포함한다. 단지 예로서, 도 1은 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(141), 이동식·비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 1에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)를 위해, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이들 컴포넌트가 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 이에 관해, 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(162) 및 보통 마우스, 트랙볼(trackball) 또는 터치 패드로서 지칭되는 포인팅 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속될 수 있다. 모니터 외에, 컴퓨터는 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함하지만, 도 1에는 메모리 저장 장치(181)만이 도시되어 있다. 도 1에 도시된 논리적 접속으로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적 인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속된다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
예시적인 실시예
본 발명은 사용자 모드 드라이버가 장치 인터럽트를 클리어하기 위해 대기할 필요 없이 CPU(120)를 인터럽트 모드에서 벗어나게 하도록 플랫폼(예를 들어, ASIC) 또는 버스(PCI 버스) 일반 특징을 이용하는 시스템 및 방법을 구현한다. 바람직하게도, 이로 인해 장치 드라이버는 사용자 모드에서 기입될 수 있다. 사용자 모드 장치 드라이버는 인터럽트에 관한 알림을 수신하지만, 높은 인터럽트 우선순위에 따라 수신하는 것은 아니다. 아래에서 설명하는 바와 같이, 본 발명은 다수의 장치들이 단일 인터럽트 라인을 공유하는 공유된 인터럽트로 확장될 수 있다.
이하, 도 2를 참조하면, 컴퓨팅 장치 내의 통상의 아키텍처가 도시되어 있다. 하나 이상의 CPU(120)는 I/O APIC(200; 즉, I/0 제어기) 및 PCI 버스/브리지(202)에 접속된다. INTEL 아키텍처의 경우에는, 시스템 상에 8개의 I/0 APIC가 존재할 수 있다. 이 APIC는 I/O 장치로부터 인터럽트 신호를 수집하고, 이들 장치가 인터럽트할 필요가 있을 때 로컬 APIC에 메시지를 전송한다. 각각의 I/O APIC는 임의 개수의 인터럽트 입력(또는 IRQ)을 갖는다.
장치(204)가 접속되는 PCI 버스(203)나 ISA 버스(201)와 같은 다양한 시스템 버스(121)가 제공된다. PCI 버스(203)에 접속되는 장치(204)는 당업자에게 공지되어 있는 PCI 레지스터(205)를 포함한다. 장치(204)에 의해 생성된 인터럽트는 인터럽트 제어기(200)로 라우팅되고, 결국 CPU(120)로 라우팅된다. CPU(120) 상에서 실행되는 드라이버가 하드웨어 장치(204)에 액세스/조작할 수 있도록, CPU로부터 장치(204)에 경로가 존재한다.
도 3을 참조하면, 장치 드라이버가 커널 모드에 상주하는 경우에 있어서, 인터럽트를 처리하는 통상의 방법에 대한 타임라인이 도시되어 있다. 우선, 장치 드라이버는 프리앰블 단계에서 자신의 인터럽트 서비스 루틴(interrupt service routine; ISR)을 등록한다. T0에서 인터럽트가 발생하면, 프로세서가 연속하여 인터럽트되지 않도록 T1에서 CPU에 의해 마스킹된다. T2에서, 운영 체제는 드라이버 ISR을 호출하고, 드라이버는 T3에서 인터럽트를 처리하여 인터럽트를 클리어한다. T4에서, 제어는 ISR로부터 반환되고, T5에서, 운영 체제는 필요에 따라 다음 인터럽트를 처리할 수 있도록 인터럽트의 마스킹을 정지한다.
도 3의 통상의 처리 때문에, 호출된 드라이버 ISR은 상승된 IRQL에서 일어나므로, 이 모델은 ISR 코드가 사용자 모드에서 기입되는 것을 허용하지 않는다. 사용자 모드 ISR을 제공하기 위해서는, 사용자 모드 ISR 코드를 스케줄링할 수 있을 때까지 (가능한 한 장치에 가까운 레벨에서) 인터럽트를 마스킹할 수 있는 것이 필요하다. 본 발명은 하나 이상의 장치 드라이버들이 사용자 모드 프로그램/프로세스로서 실행될 수 있도록 해준다. 일반 인터럽트 기능으로서 동작하는 커널 서비스가 제공된다. 사용자 모드 드라이버 내의 코드가 인터럽트를 웨이크업(wake up)하여 처리할 때까지 (아래에 설명하는 바와 같이, CPU 레벨 아래인) 하위 레벨에서 인터럽트가 마스킹된다.
본 발명의 인터럽트 서비스는 인터럽트를 수신할 준비가 되어 있을 때 사용자 모드 드라이버에 의해 호출되는 인터페이스(예를 들어, "wait_for_interrupt")를 노출시킨다. 인터럽트 서비스는 I/O 관리자에게 인터페이스를 제공하여 드라이버에 전달될 인터럽트 개체를 할당한다. 장치 드라이버를 시작할 때, I/O 관리자는 인터페이스를 이용하여 인터럽트 개체를 생성하고, 이를 장치 드라이버에 전달하여 특정 인터럽트 라인에 액세스한다. 드라이버는 인터럽트를 수신할 준비가 되어 있고/있거나 인터럽트를 예상할 때 wait_for_interrupt를 호출한다. 이 호출로부터의 복귀는 하드웨어 인터럽트가 발생했고 드라이버가 장치를 통신/조작해야 한다는 것을 의미한다.
다음 인터럽트를 대기하는 wait_for_interrupt를 호출하기 전에, 드라이버는 장치를 위해 수행 중인 활동이 무엇이든 완료하여 장치 인터럽트의 원인을 클리어 하는 것이 바람직하다. 다음 장치 인터럽트는 이러한 wait_for_interrupt가 반환되도록 할 것이다. (메인 스레드가 아닌 것이 바람직한) 전용 스레드는 이러한 대기 프로세스에 이용되고, 상승한 우선순위가 적용될 수 있다. 인터럽트 서비스는 사용자 모드 드라이버에 대해 장치 독립형 방식으로 인터럽트가 CPU에 도달하지 못하도록 마스킹한다. 예를 들어, 특정 인터럽트 라인은 통상의 APIC에서 마스킹될 수 있다. PCI 2.3과 같은 특정 버스는 버스 특정 방식으로 디세이블/이네이블될 수 있는 구성 공간에서 토글을 갖는다.
본 발명에 따르면, 장치 독립형 방법으로의 인터럽트 마스킹은 장치 특정 방식으로 장치를 프로그램하지 않고 장치 상의 인터럽트를 디세이블(또는 마스킹)하기 위한 메커니즘이다. 사용자 모드 ISR은 아래에 설명하는 바와 같이 사용자 모드 스레드의 환경에서 위치하거나 실행되는 인터럽트 서비스 루틴에 대한 코드이다. 도 4는 비공유 사용자 모드 인터럽트 메커니즘에 대한 타임라인을 도시한다. 이러한 메커니즘은, 인터럽트 라인을 공유하지 않는 장치에 대해, 메시지 신호 인터럽트를 이용하는 장치에 대해, 또는 (사용자 또는 커널 드라이버와) 인터럽트 라인을 공유하기는 하지만, 장치 인터럽트를 마스킹하기 위한 장치 독립형 메커니즘을 지원하는 버스 상에 있는 장치에 대해 작용한다.
이하, 도 4를 참조하면, 인터럽트 서비스는 프리앰블 단계에서 장치 독립형 방식으로 모든 인터럽트를 디세이블하거나 마스킹함으로써 시작한다. 드라이버가 T0에서 wait_for_interrupt를 호출하여 서비스 내에 스레드를 넣을 때, 그 특정 인터럽트는 T1에서 이네이블/언마스킹된다. 드라이버와 연관된 장치가 인터럽트를 일으키거나 T1에서 인터럽트가 이네이블되었을 때 진행 중에 있으면, 소정 이벤트가 일어나고, CPU는 T2에서 인터럽트된다. 이 이벤트를 자동 리셋하여 클리어할 수 있다.
T3에서 인터럽트에 대해 등록된 일반 커널 모드 인터럽트 핸들러가 호출되고, T4에서 인터럽트 라인을 디세이블/리마스킹한다. 이는 CPU(예를 들어, I/0 APIC(200), PCI 버스/브리지(202), 운영 체제 등)보다 낮은 레벨에서 행해진다. 즉, 장치 인터럽트는 T4에서 가능한 한 장치(204)에 가깝게 디세이블되는 것이 바람직하다. 그 다음에, T5에서 프로세서는 인터럽트 모드를 나가고, T6에서 사용자 모드 인터럽트 스레드를 스케줄링하여 그 인터럽트를 대기한 드라이버를 호출한다. 드라이버는 T7에서 인터럽트를 처리하고 리턴한다. 인터럽트 라인은 다음 인터럽트에 대해 다시 이네이블된다.
사용자 레벨 ISR에 대한 인터럽트 공유가 갖고 있는 문제는 대기 시간 문제이다. 일반적으로, 가능한 한 가장 짧은 시간 동안 인터럽트가 마스킹되도록 하는 것이 바람직하다. 사용자 모드 ISR의 경우, 인터럽트는 ISR이 실행될 때까지 마스킹된다. 이는 상당한 시간이 걸릴 수 있다. 동일 인터럽트 라인을 공유하는 장치는 라인에 대한 인터럽트가 다시 언마스킹될 때까지 자신의 인터럽트를 차단할 것이다. 따라서, 사용자 모드 ISR이 소정의 인터럽트 라인을 공유하고 있는 모든 드라이버가 인터럽트를 대기하지 않으면, 그 라인이 마스킹된다.
이하, 도 5를 참조하면, 장치에 대해 인터럽트 마스킹을 지원하지 않는 버스 상의 공유된 사용자 모드 인터럽트 메커니즘에 대한 예시적인 타임라인이 존재한 다. 우선, 인터럽트를 공유하는 각각의 장치에 대한 인터럽트는 버스 또는 장치 레벨에서 마스킹된다. 또한, 가능한 한 최저 레벨에서 인터럽트를 마스킹하는 것이 바람직하지만, 종종 한 레벨 또는 다른 레벨에서 마스킹하는 것이 더 편리하다. 이 경우, 본 발명은 장치 레벨 또는 버스 레벨에서 마스킹할 수 있다. 버스 레벨에서 마스킹하는 것은 소정의 장치에 의해 생성된 인터럽트를 마스킹하는 방법을 제공하는 특징이다. 이는 장치 레벨 입도(granularity)를 갖는 버스 특징이다. 이러한 방식으로 장치 인터럽트를 마스킹함으로써, 본 발명의 시스템은 사용자 모드 ISR 코드를 스케줄링하여 장치 특정 방식으로 장치 레벨에서 인터럽트를 클리어할 수 있을 때까지 계속 실행될 수 있다.
다음에, T0에서, 장치(들)에 대한 사용자 모드 드라이버(들)는 자신의 인터럽트 개체에 대한 WaitForInterrupt 메서드를 호출함으로써 인터럽트를 대기한다. 드라이버가 WaitForInterrupt 메서드를 호출할 때마다 감소하는 (초기에 인터럽트를 공유하는 드라이버 개수로 설정된) 카운터가 존재하고, 그 다음에, 스레드는 소정의 인터럽트 라인에 대한 이벤트 개체를 차단한다. 소정의 인터럽트 라인을 공유하는 모든 사용자 모드 장치 드라이버가 인터럽트를 대기 중인 것을 의미하는, 상술한 카운터가 영으로 되면, WaitForInterrupt 메서드는 제어 중인 장치에 대한 인터럽트를 언마스킹할 것이다(T1).
장치 인터럽트가 언마스킹된 후에, 인터럽트가 발생할 수 있다(T2). 인터럽트가 발생하면, 인터럽트에 대해 등록된 일반 커널 모드 인터럽트 서비스 루틴(interrupt service routine; IRS)이 호출될 것이다(T3). 시스템은 통상의 시스 템에서 커널 모드 인터럽트가 처리되는 것과 사실상 같은 방식으로 이러한 인터럽트를 처리한다. ISR은 우선 장치 인터럽트를 리마스킹할 것이고(T4), 그 다음에 사용자 모드 ISR이 차단되는 이벤트를 신호한다. 그 다음에, 퍼-인터럽트(per-interrupt) 라인 카운터는 인터럽트 라인을 공유하는 드라이버의 수로 리셋된다. 그 다음에, 프로세서는 인터럽트 모드를 빠져 나간다(T5). 이때, 사용자 모드 스레드(들)는 모두 웨이크업될 것이다(T6). 각각의 스레드는 제어 중인 하드웨어가 인터럽트를 생성했는지를 테스트하고, 생성한 경우, 인터럽트를 서비스한다(T7). 완료 시, WaitForInterrupt가 다시 호출된다.
본 발명에 따르면, 사용자 모드와 커널 모드 간의 인터럽트 공유는 단지 사용자 모드 컴포넌트와 인터럽트를 공유하는 것과 유사하다. 일반 커널 ISR이 작용하는 방법에 있어서 차이가 있다. 이러한 시나리오에서, 인터럽트 라인을 공유하는 커널 모드 드라이버에 대한 ISR 다음에, 일반 커널 모드 ISR이 호출된다. 이러한 방식으로, 인터럽트를 생성하는 장치가 커널 모드 장치이면, 커널 모드에서 빨리 서비스될 수 있고, 사용자 모드 ISR을 웨이크업하지 않을 것이다. 대기 시간이 증가하는 것을 제외하면, 인터럽트 라인이 보다 자주 마스킹되기 때문에, 커널 드라이버는 이러한 스킴에 의해 영향을 받지 않는다. 또한, 커널 모드 드라이버는 얼마나 많은 드라이버가 인터럽트 라인을 공유하고 있는지에 관한 카운트에는 포함되지 않는다.
상술한 바에 따르면, 본 발명은 장치에 대한 지식이 없더라도 임의의 장치 인터럽트를 디세이블할 수 있기 때문에 각각의 장치마다 특정 드라이버를 필요로 하지 않고 운영 체제 일반 방식으로 인터럽트를 처리할 수 있다. 이는, 일반적으로, 운영 체제가 I/O APIC(200)의 지식을 갖고, 적어도 그 레벨에서 인터럽트를 디세이블할 수 있기 때문이다. 상술한 바와 같이, 가능한 한 장치에 가까운 인터럽트를 처리하는 것이 바람직하다.
또한, 본 발명은 운영 체제에 등록되지 못한 드라이버를 위해 제공된다. 장치 드라이버가 등록하지 못한 장치에 의해 인터럽트가 생성되거나, 또는 알려지지 않으면, 인터럽트는 장치 레벨에서 턴 오프되고, 장치는 임의의 추가 인터럽트를 방지하도록 디세이블된다. 다른 방법으로는, 공통 제어 스킴하에서, 다른 등록된 드라이버가 인터럽트가 "자신의 것이 아닌 것"으로 보고할 때, 인터럽트는 장치를 효과적으로 턴 오프하도록 디세이블된다.
이상, 여러 도면들의 바람직한 실시예들을 참조하여 본 발명을 설명하였지만, 기타 유사한 실시예들이 이용될 수 있고, 또는 본 발명에서 일탈함이 없이 본 발명의 동일 기능을 수행하는 상술한 실시예를 수정 및 추가할 수 있다. 예를 들어, 당업자라면, 본원에서 설명된 것과 같은 본 발명은 유선 또는 무선에 관계없이 임의의 컴퓨팅 장치 또는 환경에 적용될 수 있고, 통신 네트워크를 통해 접속된 임의 개수의 그러한 컴퓨팅 장치에 적용될 수 있고, 네트워크에 걸쳐 상호 작용할 수 있다는 것을 알게 될 것이다. 또한, 무선 네트워크 장치의 수가 계속 증가하기 때문에, 핸드헬드 장치 운영 체제와 기타 애플리케이션 지정 운영 체제를 비롯한 다양한 컴퓨터 플랫폼이 고려되어야 한다는 것이 강조되어야 한다. 또한, 본 발명은 복수의 처리 칩 또는 장치 내에서 또는 복수의 처리 칩 또는 장치에 걸쳐서 구현될 수 있고, 이와 유사하게, 저장소는 복수의 장치에 걸쳐 달성될 수 있다. 따라서, 본 발명은 임의의 단일 실시예에만 한정되는 것이 아니라, 첨부된 청구항에 따른 범위에서 해석되어야 한다.

Claims (20)

  1. 인터럽트를 처리하는 장치 독립형 방법으로서,
    운영 체제에 장치 드라이버를 등록하는 단계;
    장치 독립형 인터럽트 서비스를 커널 서비스로서 제공하는 단계;
    상기 드라이버에 의해 호출되는 인터페이스를 노출시켜 인터럽트를 이네이블하는 단계;
    상기 인터럽트 수신 시, 일반 인터럽트 서비스 루틴을 실행시키는 단계; 및
    상기 장치 드라이버에 의해 상기 인터럽트를 처리하는 단계
    를 포함하는, 인터럽트를 처리하는 장치 독립형 방법.
  2. 제1항에 있어서, 상기 인터럽트 서비스 루틴을 실행시키기 전에 프로세서에서 상기 인터럽트를 마스킹하는 단계;
    상기 인터럽트가 상기 프로세서에 도달하는 것을 방지하도록 상기 프로세서보다 낮은 레벨에서 상기 인터럽트를 디세이블하는 단계;
    상기 프로세서에서 상기 인터럽트를 언마스킹하는 단계; 및
    상기 인터럽트를 처리한 후에 상기 프로세서보다 낮은 레벨에서 상기 인터럽트를 이네이블하는 단계
    를 더 포함하는, 인터럽트를 처리하는 장치 독립형 방법.
  3. 제2항에 있어서, 상기 인터럽트를 디세이블하는 단계는 APIC 또는 버스 제어기 중 하나에서 일어나는, 인터럽트를 처리하는 장치 독립형 방법.
  4. 제1항에 있어서, 상기 인터럽트를 공유하기 위한 스케줄링 메커니즘을 제공하는 단계;
    상기 인터럽트를 공유하는 모든 드라이버를 호출하는 단계; 및
    모든 드라이버가 상기 인터럽트를 처리하는 단계로부터 복귀할 때까지 상기 인터럽트를 디세이블하는 단계를 지속하는 단계
    를 더 포함하는, 인터럽트를 처리하는 장치 독립형 방법.
  5. 제4항에 있어서, 카운터를 상기 인터럽트를 공유하는 드라이버의 수로 설정하는 단계를 더 포함하는, 인터럽트를 처리하는 장치 독립형 방법.
  6. 제5항에 있어서, 상기 인터럽트를 이네이블하는 단계 전에 상기 카운터를 영으로 감소시키는 단계를 더 포함하는, 인터럽트를 처리하는 장치 독립형 방법.
  7. 제4항에 있어서, 제2 드라이버는 커널 모드 레벨에서 제공되고, 상기 방법은 사용자 모드와 커널 모드 드라이버 양쪽 모두에 대해 수행되는, 인터럽트를 처리하는 장치 독립형 방법.
  8. 제1항에 있어서, 상기 커널 서비스는 상기 드라이버에 의해 처리되는 장치에 독립적인 일반 서비스이고, 상기 드라이버는 사용자 모드 드라이버인, 인터럽트를 처리하는 장치 독립형 방법.
  9. 사용자 모드 장치 드라이버를 처리하기 위한 방법으로서,
    운영 체제에 상기 사용자 모드 장치 드라이버를 등록하는 단계;
    일반 인터럽트 서비스를 커널 서비스로서 제공하는 단계 - 상기 인터럽트 서비스는 상기 사용자 모드 장치 드라이버에 의해 호출되는 인터페이스를 노출시킴 - ;
    상기 일반 인터럽트 서비스 루틴을 실행시키기 전에 프로세서에서 상기 인터럽트를 마스킹하는 단계; 및
    상기 인터럽트가 상기 프로세서에 도달하는 것을 방지하도록 상기 프로세서보다 낮은 레벨에서 상기 인터럽트를 디세이블하는 단계
    를 포함하는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  10. 제9항에 있어서, 사용자 모드 장치 드라이버가 상기 인터페이스를 호출할 때 상기 인터럽트를 이네이블하는 단계; 및
    적당한 사용자 모드 장치 드라이버가 상기 인터럽트를 처리한 후에 상기 프로세서보다 낮은 레벨에서 상기 인터럽트를 이네이블하는 단계
    를 더 포함하는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  11. 제10항에 있어서, 상기 인터럽트를 디세이블하는 단계는 APIC 또는 버스 제어기 중 하나에서 일어나는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  12. 제10항에 있어서, 공유된 인터럽트에 대해 스케줄링 메커니즘을 제공하는 단계;
    상기 공유된 인터럽트와 연관된 모든 사용자 모드 장치 드라이버를 호출하는 단계; 및
    모든 사용자 모드 장치 드라이버가 상기 인터럽트의 처리로부터 복귀할 때까지 상기 인터럽트를 디세이블하는 단계를 지속하는 단계
    를 더 포함하는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  13. 제12항에 있어서, 등록되지 않거나 알려지지 않은 장치들에 대한 상기 스케줄링 메커니즘을 실행시키는 단계; 및
    상기 등록되지 않거나 알려지지 않은 장치를 디세이블하는 단계
    를 더 포함하는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  14. 제9항에 있어서, 커널 모드 장치 드라이버가 존재하고, 상기 방법은 상기 사용자 모드 장치 드라이버와 커널 모드 장치 드라이버 모두에 대해 수행되는, 사용자 모드 장치 드라이버를 처리하기 위한 방법.
  15. 사용자 모드 장치 드라이버를 처리하기 위한 명령어가 저장된 컴퓨터 판독 가능 매체로서, 상기 명령어는,
    운영 체제에 상기 사용자 모드 장치 드라이버를 등록하는 단계;
    인터럽트 서비스를 커널 서비스로서 제공하는 단계 - 상기 인터럽트 서비스는 상기 사용자 모드 장치 드라이버에 의해 호출되는 인터페이스를 노출시킴 - ; 및
    상기 사용자 모드 장치 드라이버와 연관된 장치에 독립적인 일반 인터럽트 서비스 루틴을 제공하는 단계
    를 포함한 방법을 수행하는 컴퓨터 판독 가능 매체.
  16. 제15항에 있어서, 사용자 모드 장치 드라이버가 상기 인터페이스를 호출할 때 상기 인터럽트를 이네이블하고,
    상기 인터럽트가 상기 프로세서에 도달하는 것을 방지하도록 상기 일반 인터럽트 서비스 루틴을 실행시킨 후에 프로세서보다 낮은 레벨에서 상기 인터럽트를 디세이블하며,
    상기 일반 인터럽트 서비스가 실행된 후에 상기 인터럽트를 이네이블하기 위한
    명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  17. 제16항에 있어서, 상기 인터럽트를 디세이블하는 것은 APIC 또는 버스 제어기 중 하나에서 일어나는 컴퓨터 판독 가능 매체.
  18. 제16항에 있어서, 공유된 인터럽트에 대해 스케줄링 메커니즘을 제공하고,
    상기 공유된 인터럽트와 연관된 모든 사용자 모드 장치 드라이버를 호출하며,
    모든 사용자 모드 장치 드라이버가 상기 인터럽트의 처리로부터 복귀할 때까지 상기 인터럽트를 디세이블하는 것을 지속하기 위한
    명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  19. 제18항에 있어서, 등록되지 않거나 알려지지 않은 장치에 대해 상기 스케줄링 메커니즘을 실행시키고,
    상기 등록되지 않거나 알려지지 않은 장치를 디세이블하기 위한
    명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  20. 제18항에 있어서, 커널 모드 장치 드라이버가 존재하고, 상기 명령어는 상기 사용자 모드 장치 드라이버와 커널 모드 장치 드라이버 양쪽 모두에 대해 수행되는 컴퓨터 판독 가능 매체.
KR1020077026790A 2005-05-16 2006-05-16 인터럽트를 처리하는 장치 독립형 방법 및 사용자 모드드라이버에 인터럽트를 전달하기 위한 방법 KR20080013914A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/129,802 2005-05-16
US11/129,802 US7581051B2 (en) 2005-05-16 2005-05-16 Method for delivering interrupts to user mode drivers

Publications (1)

Publication Number Publication Date
KR20080013914A true KR20080013914A (ko) 2008-02-13

Family

ID=37420515

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077026790A KR20080013914A (ko) 2005-05-16 2006-05-16 인터럽트를 처리하는 장치 독립형 방법 및 사용자 모드드라이버에 인터럽트를 전달하기 위한 방법

Country Status (13)

Country Link
US (1) US7581051B2 (ko)
EP (1) EP1889165B1 (ko)
JP (1) JP4840945B2 (ko)
KR (1) KR20080013914A (ko)
CN (1) CN101176084B (ko)
AT (1) ATE538436T1 (ko)
BR (1) BRPI0610159A2 (ko)
CA (1) CA2608081A1 (ko)
HK (1) HK1112305A1 (ko)
MX (1) MX2007014338A (ko)
NO (1) NO20075837L (ko)
RU (1) RU2417413C2 (ko)
WO (1) WO2006124905A2 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7950022B1 (en) * 2007-06-29 2011-05-24 Emc Corporation Techniques for use with device drivers in a common software environment
US7950025B1 (en) * 2007-06-29 2011-05-24 Emc Corporation Common software environment
US8434098B2 (en) * 2008-02-07 2013-04-30 Microsoft Corporation Synchronizing split user-mode/kernel-mode device driver architecture
US20090210888A1 (en) * 2008-02-14 2009-08-20 Microsoft Corporation Software isolated device driver architecture
US8387075B1 (en) * 2008-03-28 2013-02-26 Emc Corporation Common scheduling and synchronization primitives
US8356130B2 (en) * 2009-08-14 2013-01-15 Advanced Micro Devices, Inc. Mechanism for recording undeliverable user-level interrupts
US8806511B2 (en) 2010-11-18 2014-08-12 International Business Machines Corporation Executing a kernel device driver as a user space process
US9075985B2 (en) * 2013-05-31 2015-07-07 Microsoft Technology Licensing, Llc Restricted transmogrifying driver platform
US9921984B2 (en) * 2014-12-23 2018-03-20 Intel Corporation Delivering interrupts to user-level applications
US9672173B2 (en) * 2015-02-26 2017-06-06 Red Hat Israel, Ltd. Shared PCI interrupt line management
US9465617B1 (en) * 2015-06-29 2016-10-11 Vmware, Inc. Implementing upcall from secure to non-secure mode by injecting exception into non-secure mode
KR102085899B1 (ko) * 2018-12-10 2020-03-06 현대오트론 주식회사 자동차 전자제어장치의 사용량 모니터링 방법 및 모니터링 유닛
EP3819776B1 (en) * 2019-11-05 2021-12-29 Shenzhen Goodix Technology Co., Ltd. Method and apparatus for aborting blocked bus access between a master controller and connected peripherals

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IN171220B (ko) * 1987-07-01 1992-08-15 Digital Equipment Corp
JPH01145751A (ja) * 1987-12-01 1989-06-07 Pfu Ltd 入出力制御方式
JPH02170237A (ja) * 1988-12-23 1990-07-02 Fujitsu Ltd 割り込み制御方式
US5297282A (en) * 1991-05-29 1994-03-22 Toshiba America Information Systems, Inc. Resume processing function for the OS/2 operating system
US5469571A (en) * 1991-07-15 1995-11-21 Lynx Real-Time Systems, Inc. Operating system architecture using multiple priority light weight kernel task based interrupt handling
JPH05108507A (ja) * 1991-10-17 1993-04-30 Ricoh Co Ltd バスエラー処理回路
US5438677A (en) * 1992-08-17 1995-08-01 Intel Corporation Mutual exclusion for computer system
JP3242508B2 (ja) * 1993-11-05 2001-12-25 松下電器産業株式会社 マイクロコンピュータ
US5566346A (en) * 1993-12-21 1996-10-15 Taligent, Inc. System for constructing hardware device interface software systems independent of operating systems including capability of installing and removing interrupt handlers
US6732138B1 (en) * 1995-07-26 2004-05-04 International Business Machines Corporation Method and system for accessing system resources of a data processing system utilizing a kernel-only thread within a user process
US6412035B1 (en) * 1997-02-03 2002-06-25 Real Time, Inc. Apparatus and method for decreasing the response times of interrupt service routines
US6212574B1 (en) * 1997-04-04 2001-04-03 Microsoft Corporation User mode proxy of kernel mode operations in a computer operating system
US5926775A (en) * 1997-10-08 1999-07-20 National Instruments Corporation Mini driver software architecture for a data acquisition system
US6871350B2 (en) * 1998-12-15 2005-03-22 Microsoft Corporation User mode device driver interface for translating source code from the user mode device driver to be executed in the kernel mode or user mode
US6785894B1 (en) * 1999-04-09 2004-08-31 Sun Microsystems, Inc. Virtual device driver
US6598169B1 (en) * 1999-07-26 2003-07-22 Microsoft Corporation System and method for accessing information made available by a kernel mode driver
US6957432B2 (en) * 2000-03-21 2005-10-18 Microsoft Corporation Real-time scheduler
US6766398B2 (en) * 2001-04-17 2004-07-20 International Business Machines Corporation Method for processing PCI interrupt signals in a logically partitioned guest operating system
US7024672B2 (en) * 2002-06-26 2006-04-04 Microsoft Corporation Process-mode independent driver model
CN1208721C (zh) * 2003-09-19 2005-06-29 清华大学 基于PowerPC处理器结构的分级任务切换方法
US7149832B2 (en) * 2004-11-10 2006-12-12 Microsoft Corporation System and method for interrupt handling

Also Published As

Publication number Publication date
CN101176084B (zh) 2010-05-19
RU2417413C2 (ru) 2011-04-27
ATE538436T1 (de) 2012-01-15
CA2608081A1 (en) 2006-11-23
MX2007014338A (es) 2008-02-12
EP1889165A4 (en) 2009-09-16
JP2008541306A (ja) 2008-11-20
EP1889165B1 (en) 2011-12-21
JP4840945B2 (ja) 2011-12-21
EP1889165A2 (en) 2008-02-20
BRPI0610159A2 (pt) 2010-06-01
RU2007142279A (ru) 2009-05-27
WO2006124905A3 (en) 2007-06-07
WO2006124905A2 (en) 2006-11-23
NO20075837L (no) 2007-12-11
US7581051B2 (en) 2009-08-25
US20060259675A1 (en) 2006-11-16
CN101176084A (zh) 2008-05-07
HK1112305A1 (en) 2008-08-29

Similar Documents

Publication Publication Date Title
EP1889165B1 (en) Method for delivering interrupts to user mode drivers
US6957432B2 (en) Real-time scheduler
US6513057B1 (en) Heterogeneous symmetric multi-processing system
US20020116563A1 (en) Apparatus and method to reduce interrupt latency in shared interrupt systems
GB2531844B (en) Hardware-protective data processing systems and methods using an application executing in a secure domain
US7689749B2 (en) Interrupt control function adapted to control the execution of interrupt requests of differing criticality
US8135894B1 (en) Methods and systems for reducing interrupt latency by using a dedicated bit
US7103631B1 (en) Symmetric multi-processor system
KR100745888B1 (ko) 데이터 처리 시스템에서 스레드들을 핸들링하기 위한 방법및 장치
WO2016128443A1 (en) Method to isolate real-time or safety-critical software and operating system from non-critical software and operating system
US6694401B2 (en) Method and apparatus for executing real-mode interrupts from within extended SMRAM handler
US10241829B2 (en) Information processing device, information processing method, recording medium, calculation processing device, calculation processing method
US7716407B2 (en) Executing application function calls in response to an interrupt
US6990669B1 (en) Real-time scheduler
TWI676935B (zh) 處理中斷優先級的電路系統
JPH05324569A (ja) 割り込み制御方式
US20230305872A1 (en) Efficient central processing unit overcommit for virtual machines with symmetric multi-processing
Mejia-Alvarez et al. Interrupt handling in classic operating systems
US11385927B2 (en) Interrupt servicing in userspace
Cherepov et al. Hard Real-time with {RTX} on Windows {NT}
Rothberg Interrupt handling in Linux
JPH0496167A (ja) マルチプロセッサシステムの割込み方式
Cristian Types of Operating System kernels
Mejia-Alvarez et al. Interrupts Mechanism
US20110072247A1 (en) Fast application programmable timers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
SUBM Surrender of laid-open application requested