DE69936162T2 - Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem - Google Patents

Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem Download PDF

Info

Publication number
DE69936162T2
DE69936162T2 DE69936162T DE69936162T DE69936162T2 DE 69936162 T2 DE69936162 T2 DE 69936162T2 DE 69936162 T DE69936162 T DE 69936162T DE 69936162 T DE69936162 T DE 69936162T DE 69936162 T2 DE69936162 T2 DE 69936162T2
Authority
DE
Germany
Prior art keywords
interrupt
level
source
cpu
source tree
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
DE69936162T
Other languages
English (en)
Other versions
DE69936162D1 (de
Inventor
Sunil K. Sunnyvale Bopardikar
Thomas San Jose Saulpaugh
Gregory K. Palo Alto Slaughter
Xiaoyan Fremont Zheng
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69936162D1 publication Critical patent/DE69936162D1/de
Publication of DE69936162T2 publication Critical patent/DE69936162T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Description

  • ERFINDUNGSHINTERGRUND
  • Erfindungsgebiet
  • Die Erfindung betrifft im allgemeinen Vorrichtungen und Verfahren zum Bereitstellen von Unterbrechungen in Computersystemen und insbesondere Unterbrechungssystemen in Computersystemen, die objektorientierte Software einsetzen.
  • Beschreibung des Stands der Technik
  • Computersysteme arbeiten im allgemeinen, indem sie eine Abfolge von spezifischen Anweisungen ausführen, die in „Programmen" enthalten sind, die im Speicher gespeichert sind. Der Computer muß jedoch auch auf zufällig auftretende externe und interne Ereignisse, die „Unterbrechungen" genannt werden, antworten, wie etwa das Drücken einer Taste auf einer Tastatur durch einen Nutzer oder das Signalisieren eines Druckers, daß er mehr Daten zum Drucken benötigt. Der Computer muß die normale Verarbeitung unterbrechen und zeitweise den Steuerfluß von dem gespeicherten Programm zu einem anderen Programm abgeben, das „Unterbrechungssteuerungsfunktion" genannt wird.
  • Die Unterbrechungsbearbeitung wird durch die Betriebssystem(„OS")-Software sowohl von Computer ausgeführt, die traditionelle Software ausführen, die als „prozedurale Programmierung" bezeichnet wird, als auch von neueren Systemen, die Software verwenden, die mittels objektorientierter Programmiertechniken entwickelt wurde. Objektorientierte Unterbrechungsbehandlungssysteme haben eine Anzahl von Beschränkungen, die sowohl die Übertragbarkeit als auch die Leistung des OS beeinträchtigen. Das bedeutet, daß es erstrebenswert wäre, ein Unterbrechungssystem bereitzustellen, um es zu ermöglichen, Betriebssysteme mit vielen verschiedenen CPU zu verwenden. Darüber hinaus wäre es erstrebenswert, erhöhte Geschwindigkeit und Effizienz bei der Steuerung von Unterbrechungen durch das Betriebssystem bereitzustellen. Die Vorrichtungen und Verfahren der vorliegenden Erfindung sind entworfen, um alle diese gegenwärtigen Beschränkungen zu überwinden, um ein übertragbares und sehr leistungsfähiges Unterbrechungsbehandlungssystem anzugeben.
  • Das US-Patent 5 568 644 offenbart ein Computersystem mit einer Unterbrechungsdispatcher-Vorrichtung. Die Dispatcher-Vorrichtung ist zum Ermitteln von Unterbrechungsquellen von Einrichtungen vorgesehen, die eine Unterbrechungsanforderung an den Prozessor des Computersystems ausgegeben hat. Die Unterbrechungsvorrichtung umfaßt einen Unterbrechungsquellenbaum und einen Unterbrechungsdispatcher. Jede Ebene des Unterbrechungsquellenbaums stellt eine Charakterisierung einer Einrichtung dar, welche die Unterbrechung erzeugt (Unterbrechungsquelle). Der Unterbrechungsdispatcher durchquert den Unterbrechungsquellenbaum, um die Unterbrechungsquelle zu identifizieren und ein Unterbrechungsbearbeitungsprogramm oder Unterbrechungsroutinen für die erwähnte Einrichtung aufzurufen.
  • Das US-Patent 5 680 624 offenbart eine objektorientierte hardware-unabhängige Schnittstelle zur Bearbeitung von Unterbrechungen, die von I/O-Einrichtungen hervorgerufen werden. Die Unterbrechungen, die von Einrichtungen hervorgerufen werden, werden mit einem Unterbrechungsverwaltungsprogramm und Unterbrechungsbedienungsprogrammen auf zwei Ebenen bearbeitet, nämlich in einer Eltern/Kind-Beziehung. Durch die Verwendung eines solchen Designs verschwindet die Notwendigkeit für eine Konfigurationsdatenbank. Die Unterbrechungsbedienungsprogramme werden auf Anforderung eines zugehörigen Zugriffsverwaltungsprogramms installiert und/oder entfernt.
  • ERFINDUNGSABRISS
  • Zusätzliche Merkmale und Vorteile der Erfindung werden in der Beschreibung angegeben, die nun folgt, und werden teilweise aus der Beschreibung deutlich oder können durch die Anwendung der Erfindung erlernt werden. Die Ziele und weitere Vorteile der Erfindung werden durch die Verfahren, Vorrichtungen und gefertigten Produkte, die in der schriftlichen Beschreibung und ihren Ansprüchen sowie in den beigefügten Zeichnungen beschrieben sind, verwirklicht und realisiert.
  • Um diese und andere Vorteile zu erreichen, und in Übereinstimmung mit dem Ziel der Erfindung, wie er ausgeführt und allgemeinen beschrieben ist, stellt die Erfindung ein Verfahren zur Verarbeitung von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, einem Speicher, der einen Microkernel enthält, mehreren Einrichtungen, die Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, mehreren Treibern, wovon jeder mit wenigstens einer der Quellen verknüpft ist, und einer Systemdatenbank bereit. Das Verfahren umfaßt die Schritte des Erzeugens eines Einrichtungseintrages in der Datenbank für jede der Einrichtungen, des Erzeugens eines Unterbrechungsquellenbaums in der Datenbank mit mehreren Quellenbaumeinträgen, von denen jeder ein Objekt enthält, das eine der Quellen darstellt, und des Implementierens einer Unterbrechungsregistrierungsschnittstelle, was Verfahren umfaßt, die Softwarekomponenten zur Unterbrechungsbehandlung installieren und entfernen, die mit jeder Quelle in einem entsprechenden Quellenbaumeintrag verknüpft sind. Das Verfahren umfaßt weiter die Schritte des Querverweisens von jedem der Einrichtungseinträge auf einen entsprechenden der Quellenbaumeinträge, des Antwortens auf eine von einer Einrichtung erzeugte Unterbrechung, indem die Ausführung eines einzelnen Unterbrechungsdispatchers veranlaßt wird, und durch Identifizieren der Einrichtung an den Unterbrechungsdispatcher und des Bearbeitens der Unterbrechung mit einem Bedienungsprogramm, das von dem Unterbrechungsdispatcher aufgerufen wird und der identifizierten Einrichtung entspricht.
  • Unter einem anderen Gesichtspunkt umfaßt die Erfindung eine Vorrichtung zur Verarbeitung von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, mehreren Einrichtungen, die Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, und mehreren Treibern, von denen jeder mit wenigstens einer der Quellen verknüpft ist. Die Vorrichtung umfaßt mehrere Softwarekomponenten zur Unterbrechungsbehandlung, die von den Treibern unterstützt werden, von denen jeder mit einer Unterbrechungsquelle verknüpft ist; einen Speicher, der eine Datenbank mit Einrichtungseinträgen für jede der Einrichtungen enthält und einen Unterbrechungsquellenbaum, der mehrere Unterbrechungsquellenbaumeinträge enthält, von denen jeder ein Objekt enthält, das wenigstens eine der Quellen darstellt und auf einen entsprechenden Einrichtungseintrag querverweist, wobei jeder der Unterbrechungsquellenbaumeinträge einen Verweis auf wenigstens eine der Softwarekomponenten zur Unterbrechungsbehandlung aufweist; und einen einzelnen Unterbrechungsdispatcher zum Antworten auf eine Unterbrechung, die von der CPU identifiziert wurde, durch Ausführung einer entsprechenden Softwarekomponente zur Unterbrechungsbehandlung, die von einem Unterbrechungsquellenbaumeintrag spezifiziert wird, welcher der identifizierten Einrichtung entspricht.
  • Es versteht sich, daß sowohl die vorangegangene allgemeine Beschreibung als auch die folgende detaillierte Beschreibung beispielhaft und erläuternd sind und eine weitere Erklärung der Erfindung, wie sie beansprucht ist, bereitstellen sollen.
  • Die beigefügten Zeichnungen sind enthalten, um ein besseres Verständnis der Erfindung bereitzustellen, und sind in dieser Patentschrift eingeschlossen und bilden ein Teil von ihr, stellen eine Ausführung der Erfindung dar und dienen zusammen mit der Beschreibung dazu, die Prinzipien der Erfindung zu erklären.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Bei den Zeichnungen ist:
  • 1 ein Hardware-Blockdiagramm eines Computersystems, das die vorliegende Erfindung verkörpert;
  • 2 ein Diagramm der objektorientierten Software des Computersystems von 1;
  • 3 ein Diagramm, das ein Beispiel der Beziehung zwischen Unterbrechungsquellen zeigt;
  • 4 ein Diagramm, das einen Abschnitt eines Unterbrechungsquellenbaums zeigt, der zu dem Beispiel von 3 gehört;
  • 5 ein Beispiel einer Bus-Unterbrechungsquelleneintrags ist;
  • 6 ein Diagramm, welches das Querverweisen zwischen dem Unterbrechungs- und dem Einrichtungsnamensraum zeigt;
  • 7 ein Diagramm, das die Beziehung zwischen der Software und verschiedenen Ebenen des Unterbrechungsquellenbaums darstellt;
  • 8 ein Diagramm, das die Synchronisation der Unterbrechungsbehandlung darstellt;
  • 9 ein Diagramm, welches das Konzept der zurückgestellten Unterbrechungsbehandlung darstellt;
  • 10 ein Diagramm, das einen Unterbrechungsdispatcher und seine Beziehung zu Laufzeit- und Microkernel-Software zeigt;
  • 11 ein Diagramm, das Bus- und Vorrichtungsunterbrechungssteuerungen zeigt;
  • 12 Diagramm ist, das die Unterbrechungsquellen-Klassenhierarchie zeigt; und
  • 13 Diagramm ist, das Verbesserungen der Leistung einer Ethernet-Lese-Unterbrechungsoperation durch die vorliegende Erfindung darstellt.
  • DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGEN
  • Die Erfindung ist in einem objektorientierten Betriebssystem enthalten. Die offenbarte Ausführung ist in der Java-Programmierumgebung implementiert, die durch Sun Microsystems Inc. bereitgestellt wird. Die Erfindung ist jedoch nicht in dieser Hinsicht beschränkt und kann in anderen Computersystemen umfaßt sein, wie vom Fachmann ersehen wird. Sun, Sun Microsystems, das Sun-Logo, Java und Java-basierte Warenzeichen sind Warenzeichen oder eingetragene Warenzeichen von Sun Microsystems Inc. in den U.S.A. und anderen Ländern.
  • Nun wird auf eine Implementierung im Detail Bezug genommen, die mit der vorliegenden Erfindung übereinstimmt, wie in den Zeichnungen dargestellt ist. Wo immer dies möglich ist, werden die gleichen Bezugszeichen in allen Zeichnungen und der folgenden Beschreibung verwendet, um die gleichen oder ähnliche Teile zu bezeichnen.
  • Die 1 zeigt eine Computersystem 10, das zur Verwendung mit der vorliegenden Erfindung geeignet ist. Das Computersystem 10 umfaßt eine Hauptprozessoreinheit (CPU) 12, die beispielsweise einen Sun SPARC, einen Motorola Power PC oder einen Intel Pentium aufweisen kann. Das Computersystem 10 kann eine breite Auswahl von Computereinrichtungen darstellen. Zum Beispiel kann das System 10 einen Standard-Personalcomputer darstellen, wie er allgemein privat oder im Büro verwendet wird. Alternativ kann das System 10 ein viel spezialisiertes „intelligentes" System, wie etwa eine Set-Top-Box zur Verwendung in einem hochauflösenden Fernsehgerät, oder ein multifunktionales Mobiltelefon sein.
  • Eine CPU 12 ist mit einem Speicher 14 verbunden, der verschiedene Arten von Speicher, wie etwa Arbeitsspeicher (RAM) und Festwertspeicher (ROM), umfaßt. Die CPU 12 ist auf mit einem Erweiterungsbus 16 verbunden, der beispielsweise ein PCI-Bus sein kann. Verschiedene Arten von Eingangs- und Ausgangseinrichtungen 19, 20 und 22 sind mit dem Bus 16 verbunden. Die Eingangseinrichtung 18 kann beispielsweise ein Modern oder eine Netzwerkschnittstellenkarte sein, die das System 10 mit einer Telefonleitung oder einem lokalen Netzwerk verbindet. Die Eingangseinrichtung 20 kann beispielsweise eine Tastatur sein und die Ausgangseinrichtung 22 kann beispielsweise ein Drucker sein. Das System 10 kann optional eine Massenspeichereinrichtung 24 umfassen, wie etwa eine Festplatte, die über einen I/O-Bus 26 angeschlossen ist, der beispielsweise ein SCSI-Bus sein kann. Das System 10 umfaßt auch eine direkte Speicherzugangs(DMA)-Steuerung 23, die von der CPU 12 gesteuert wird und eine direkte Datenübertragung zwischen dem Speicher 14 und dem PCI-Bus 16 bereitstellen kann.
  • Bezieht man sich nun auf 2, so wird ein Diagramm von Software gezeigt, die im Speicher 14 von 1 gespeichert ist. Die 2 zeigt Software, die logisch in einer Abfolge von Schichten angeordnet ist. Eine oberste Schicht 30 ist „plattform-unabhängig." Der Begriff „Plattform" bezieht sich im allgemeinen auf eine CPU, physischen Speicher und dauerhaft verbundene Einrichtungen und Busse. Demnach ist die Software, die in der plattform-unabhängigen Schicht 32 enthalten ist, in einer solchen Art geschrieben, daß sie mit jeder Plattform, basierend auf jeder CPU, die entweder existiert oder in der Zukunft entwickelt wird, ohne Modifikationen verwendet werden kann. Eine zweite Schicht 34 ist plattformabhängig. Demnach muß die Software der Schicht 34 für die spezielle Plattform des Computersystems 10 angepaßt werden.
  • Die plattform-unabhängige Schicht 32 umfaßt eine Anwendungsprogrammschicht 36, die spezifische Operationen für den Nutzer ausführt, wie etwa Desktop-Publishing, Behandlung eines Telefonanrufs oder Datenbankverwaltung. Die Anwendungsschicht 36 ist mit einem Laufzeitsystem 38 verbunden, das eine Komponente umfaßt, die als „Java Virtual Machine" (JVM) bezeichnet wird. Die JVM ist eine Softwarekomponente, die Anweisungen in Form von maschinenunabhängigen Bytecodes empfangt, die von Anwendungsprogrammen erzeugt werden, und die Bytecodes interpretiert. Die JVM ist mit einer besonderen Plattform verbunden, um erwünschte Funktionen auszuführen. Die offenbarte Ausführung verwendet eine Java Virtual Machine, aber andere Arten von virtuellen Maschinen sind verwendbar, wie dem Fachmann bekannt ist. Der Betrieb der JVM ist dem Fachmann bekannt und wird beispielsweise in dem Buch Java! von Tim Ritchey, das von New Riders Publishing in Indianapolis, Indiana herausgebracht wird, und The Java Virtual Machine Specification von Lindham und Yellin, Addison-Wellesley, 1997 behandelt.
  • Eine Laufzeitschicht 40 umfaßt auch einen Einrichtungsschnittstellenabschnitt 42, der den Betrieb von Einrichtungen, wie etwa Bussen 16 und 26 und Einrichtungen 18, 20, 22 (1) unterstützt. Insbesondere umfaßt die Einrichtungsschnittstelle 42 Einrichtungsverwaltungsprogramme 46 und verschiedene Verwaltungsprogramme 48. Die Einrichtungsschnittstelle 42 umfaßt auch Einrichtungstreiber 50, die objektorientierte Programme sind, die für jede der Einrichtungen 18, 20 und 22 geschrieben sind. Man beachte, daß die Einrichtungstreiber 50 in der plattform- unabhängigen Schicht 32 umfaßt sind, und daher, wenn sie einmal geschrieben sind, verwendet werden könne, um die Einrichtungen 18, 20 und 22 auf irgendeiner Plattform, sowohl einer existierenden als auch einer, die in der Zukunft entwickelt wird, zu verwenden. Ähnlich umfaßt die Einrichtungsschnittstelle 42 plattform-unabhängige Bus-Verwaltungsprogramme 53, die objektorientierte Programme sind, die für Busse, wie etwa den PCI-Bus 16 und den SCSI-Bus 26 von 1, geschrieben sind. Die Einrichtungsschnittstelle 42 umfaßt Speicherklassen 52.
  • Die Einrichtungsschnittstelle 42 umfaßt auch einen Systemlader 54 und eine Systemdatenbank, die den Betrieb des Computersystems unterstützen. Die Systemdatenbank 56 erlaubt es Anwendungssoftware, Konfigurationsinformation auf dem Computersystem 10 zu speichern und abzurufen. Insbesondere enthält die Systemdatenbank 56 Konfigurationsinformation für Einrichtungen, die anwesend sind, die System-Softwaredienste installiert sind, die Nutzer- und Gruppeneigenschaften ausgewählt wurden und jede benötigte anwendungsspezifische Information. In der beschriebenen Ausführung wird die Systemdatenbank als Java-Systemdatenbank („Java System Database,” JSD) bezeichnet.
  • Das Laufzeitsystem 38 umfaßt zusätzliche Funktionen 58, die Operationen unterstützen, wie etwa Eingang/Ausgang, Netzwerkoperationen, Graphik, Drucken, Multimedia etc.
  • Die plattformabhängige Schicht 34 umfaßt eine Plattformschnittstelle 60, eine OS-spezifische Schicht 61, einen Microkernel 62 und eine Bootschnittstelle 64. Die Plattformschnittstelle 60 umfaßt Funktionsbibliothek-Bedienungsprogramme der virtuellen Maschine 66, die in der Java-Programmiersprache geschrieben sein können, um Unterstützung für System-Funktionsaufrufe bereitzustellen, die von der virtuellen Maschine 40 empfangen werden. Die Plattformschnittstelle 60 umfaßt weiter Unterbrechungsklassen 68, die auch in der Java-Programmiersprache geschrieben sind und Unterbrechungsoperationen des Computersystems 10 und des Bus-Verwaltungsprogramms 44 unterstützen. Schließlich umfaßt die Plattformschnittstelle 60 Direkter-Speicherzugangs(DMA)-Klassen 70 und Speicherklassen 72, die beide in der Java-Programmiersprache geschrieben sind.
  • Der Microkernel 62 besteht aus Softwarekomponenten, die in einer Sprache geschrieben sind, die für die CPU spezifisch ist („native Sprache") und die grundlegende maschinennahe Hardwarefunktionen der CPU 12 unterstützt, wie etwa Ressourcenzuteilung, Unterbrechungsvorgänge, Sicherheit etc. Insbesondere umfaßt der Microkernel 62 eine Mehrzahl von Kernelfunktionen 74 einschließlich Threadverwaltung, Ausnahmen, Zeitsteuerung, physische Speicherverwaltung, Hardware-Unterbrechungsbearbeitung, Plattformsteuerung, Prozeßverwaltung, Bibliothek-Verwaltung, I/O-Unterstützung und Bildschirmfunktionen. Diese Funktionen können durch den Chorus-Microkernel ausgeführt werden, der im Handel von Sun Microsystems erhältlich ist. Der Microkernel 62 umfaßt auch Debug-Funktionen 76, native Unterbrechungsmethoden 78, native DMA-Methoden 80 und native Speichermethoden 82.
  • Die letzte Komponente der plattform-unabhängigen Schicht 34 ist die Bootschnittstelle 64. Die Bootschnittstelle 64 sorgt für das Laden und Initialisieren der Software in den Speicher 14 (1), wenn das Computersystem 10 anfangs hochgefahren wird. Die Bootschnittstelle 64 kann Software laden, die beispielsweise in einer Floppydisk oder dem Massenspeicher 24 (1) gespeichert ist oder von einem Netzwerk über die Eingangseinrichtung 18 empfangen wird.
  • Als nächstes wird eine allgemeine Beschreibung eines Verfahrens zur Verarbeitung von Unterbrechungen beschrieben. Wenn die Software für das Computersystem 10 geladen ist, konstruieren die Bootschnittstelle 64 und die Bus-Verwaltungsprogramme 44 eine Systemdatenbank. Die Systemdatenbank umfaßt einen Einrichtungsnamensraum und einen Unterbrechungsnamensraum. Der Einrichtungsnamensraum wird ebenfalls von der Bootschnittstelle 64 und den Bus-Verwaltungsprogrammen 44 erzeugt und enthält Einträge in Form von Objekten für die CPU, für jeden der Busse und für jede der Einrichtungen des Computersystems 10. Der Unterbrechungsnamensraum wird von der Softwarekomponente zur Unterbrechungsbehandlung 45 erzeugt und enthält einen Eintrag in Form eines Objekts für jede der Unterbrechungsquellen, also für jede Einrichtung oder jeden Bus, der oder die fähig ist, eine Unterbrechung zu erzeugen.
  • Die Objekte des Unterbrechungsnamensraums sind in Form eines Unterbrechungsquellenbaums organisiert, in dem jedes Objekt ein Unterbrechungsquelleneintrag (ISE) ist. Jeder Eintrag des Einrichtungsnamensraums wird mit einem ISE, das heißt einem Eintrag in dem Unterbrechungsnamensraum, querverwiesen.
  • Jeder ISE umfaßt einen Verweis auf eine oder mehrere Komponenten des Unterbrechungsbearbeitungsprogrammcodes. Diese Komponenten umfassen Unterbrechungsbedienungsprogramme, Unterbrechungsermöglicher, Unterbrechungsverhinderer und Unterbrechungsbestätiger, die von den Einrichtungstreibern zugeführt werden.
  • Wenn eine Unterbrechung auftritt, erzeugt der Microkernel einen Unterbrechungsvektor, der die Einrichtung identifiziert, welche die Unterbrechung hervorgerufen hat, einen Unterbrechungsdispatcher ausführen läßt und den Dispatcher mit dem Unterbrechungsvektor versorgt. Der Unterbrechungsdispatcher versieht den Einrichtungsnamensraum der Systemdatenbank mit Verweisen und ermittelt den Eintrag darin, der zu der Einrichtung gehört, die von dem Unterbrechungsvektor identifiziert wird. Der Unterbrechungsdispatcher ermittelt dann den ISE, der auf die identifizierte Einrichtung querverweist und ermittelt das Unterbrechungsbedienungsprogramm, das von dem ISE spezifiziert wurde, um die Unterbrechung von der identifizierten Einrichtung zu verarbeiten. Der Unterbrechungsdispatcher läßt dann das ermittelte Unterbrechungsbedienungsprogramm ausführen.
  • Das Material unten stellt einen Überblick über die Unterbrechungsklassen und -schnittstellen bereit, die einen Teil der vorliegenden Erfindung bilden und die den oben beschriebenen Vorgang implementieren. Der erste Abschnitt beschreibt, wie eine Unterbrechungsquelle (d. h. eine Einrichtung, ein Bus oder eine CPU) abstrakt dargestellt und dann Treibern bekanntgegeben wird. Der zweite Überblicksabschnitt beschreibt, die Arten von Programmcode mit einer Einrichtung, die eine Unterbrechung auslöst, verknüpft werden können und wie Programmcode registriert wird, um Unterbrechungen zu verarbeiten und zu verwalten. Der dritte Überblicksabschnitt beschreibt, wie Unterbrechungsbedienungsprogramme koordiniert und synchronisiert werden. Der vierte Überblicksabschnitt beschreibt, wie Unterbrechungsbedienungsprogramme in Antwort auf eine Unterbrechung zugeteilt werden.
  • Abstrahieren von Unterbrechungsquellen
  • Unterbrechungsquellenobjekte
  • Eine Unterbrechung ist ein Mittel, durch das eine Einrichtung Aufmerksamkeit von Software, wie etwa einem Einrichtungstreiber, anfordert. Eine Einrichtung kann in der CPU eingebettet sein, direkt mit dem externen Bus der CPU verbunden sein oder mit einem anderen Erweiterungsbus wie dem PCI verbunden sein. Die vorliegende Erfindung repräsentiert jede Einrichtung, die zur Unterbrechung fähig ist, als eine Unterbrechungsquelle.
  • Unterbrechungsquellen sind mit anderen Unterbrechungsquellen verknüpft. Eine Einrichtung auf dem Bus der CPU unterbricht beispielsweise die CPU auf einer CPU-spezifischen Ebene. Die Unterbrechungsebene der CPU ist eine Quelle der Unterbrechung, wie auch die Einrichtung selbst. Wenn eine Einrichtung auf einem PCI-Bus eine Unterbrechung erzeugt, wird das Signal über eine oder mehrere Bus-Brücken weitergeleitet, bis die CPU selbst unterbrochen wird.
  • Die Topologie der Unterbrechungsweiterleitung und die Einrichtungstopologie ähneln einander, sind aber nicht immer identisch. Wegen der möglichen Unterschiede zwischen der Einrichtungs- und Unterbrechungstopologie wird eine eigene Klasse von Objekten benötigt, um eine Unterbrechungsquelle zu repräsentieren.
  • Die vorliegende Erfindung erzeugt Unterbrechungsquellenobjekte, um die CPU, jede der CPU-Ebenen und jede der Bus-Einrichtung-Kombinationen, die eine Ebene verwendet, zu repräsentieren. 3 stellt das Konzept eines Unterbrechungsquellenobjekts für die CPU, jede der CPU-Ebenen (2 in diesem Fall), eine Bus-Unterbrechungsquelle und zwei Einrichtungsunterbrechungsquellen dar.
  • Organisation der Unterbrechungsquellenobjekte
  • Die Unterbrechungsklassen der vorliegenden Erfindung verwalten den Satz von bekannten Unterbrechungsquellen. Der Satz von aktiven und möglichen Unterbrechungsquellenobjekten sind in einer hierarchischen Weise in dem Unterbrechungsnamensraum der JSD organisiert.
  • Unterbrechungsquellenbaum (IST)
  • Der Unterbrechungsnamensraum (im folgenden als der Unterbrechungsquellenbaum (oder IST) bezeichnet) wird in der Java-Systemdatenbank (JSD) im voraus erzeugt. Jeder JSD-Eintrag in dem Unterbrechungsquellenbaum repräsentiert eine Einrichtung, die fähig ist, Aufmerksamkeit über eine Unterbrechung anzufordern. Jede Ebene des IST repräsentiert eine feinere und feinere Granularität der Unterbrechungsquellen von der CPU (die Baumwurzel) über die CPU-Ebenen und Busse (Elterneinträge) bis schließlich zu den Einrichtungen (Blatteinträge).
  • Die Repräsentation von Unterbrechungsquellen mittels eines Baumes, der sich vom Einrichtungsbaum unterscheidet, hat seine Vorteile. Die Unterbrechungsweiterleitung folgt beispielsweise nicht immer der Verbindung von der Einrichtung zum Bus. Manche Plattformen benötigen Software, um Unterbrechungsinformationen weiterzuleiten und zu decodieren, während andere komplizierte Hardwarehilfseinrichtungen aufweisen.
  • Das Design von Einrichtungstreibern und Bus-Verwaltungsprogrammen, um alle die verschiedenen Kombinationen von Unterbrechungs-Decodierungs- und Dispatchlogik zu verarbeiten ist eine beinahe unlösbare Aufgabe. Der IST wirkt als ein Puffer, der übertragbare Einrichtungstreiber- und Bus-Verwaltungssoftware von der Unterbrechungshardware der Plattform isoliert und schützt.
  • Jede Plattform kann einen unterschiedlich geformten Baum benötigen, um die Logik und den Fluß der Unterbrechungsverarbeitung zu vermitteln. Der IST erlaubt es Plattformdesignern, die neuesten und besten Unterbrechungscontroller zu verwenden, ohne die Sorge, daß ein Treiber abstürzt. Einrichtungstreiber greifen nie auf Unterbrechungscontroller zu, die mit einer CPU (d. h. einem PIC) oder einem Bus-Brückencontroller verbunden sind.
  • Die 4 zeigt, wie das vorangegangene Beispiel von verknüpften Unterbrechungsquellen (siehe 3) in dem IST repräsentiert ist.
  • Unterbrechungsquelleneinträge (ISE)
  • Jede Unterbrechungsquelle wird mittels eines JSD-Eintrags repräsentiert, der als ein Unterbrechungsquelleneintrag (ISE) bezeichnet wird. ISE sind Java-Objekte, auf die (manchmal gleichzeitig) sowohl von Java als auch von nativem Programmcode zugegriffen wird.
  • Eine Unterbrechungsquelleneintrag bildet eine Subklasse der SystemEntry-Klasse der JSD.
    import java.system.database. Entry;
    public InterruptSourceEntry extends SystemEntry implements interruptRegistration (...)
  • Die JSD implementiert eine Unterbrechungsregistrierungsschnittstelle, die aus Methoden besteht, die vom Treiber gelieferten Programmcode installiert und entfernt.
  • Wenn ein ISE erzeugt wird, um einen Bus zu repräsentieren, muß die maximale Anzahl von zugehörigen Kinder(oder Einrichtungs-)-ISE festgelegt werden. Das vorherige Erzeugen von freien Kinder-„Steckplätzen” bringt eine Anzahl von Vorteilen für den nativen Programmcode mit sich, der auf einen ISE auf der Hardware-Unterbrechungsebene zugreifen muß.
  • Der erste Vorteil für den nativen Programmcode liegt darin, daß aller Speicher, der mit dem Objekt verbunden ist, leicht verriegelt werden kann, um Seitenfehler zu verhindern. Die meisten Microkernel können die Behandlung von Seitenfehlern auf der Unterbrechungsebene nicht unterstützen.
  • Zweitens kann ein Bus-ISE Verweise auf Einrichtungs-ISE in einem vorher erzeugten Vektor speichern, anstatt den Verbundlistenansatz von SystemEntry zu verwenden. Die Verwendung eines Vektors in einem ISE erlaubt es, daß die Bus-Verwaltungsprogramme die Kindereinrichtungen numerieren und diese Nummer als einen Vektorindex verwenden. Dies ist auf der Hardware-Unterbrechungsebene besonders wichtig. Das Indizieren in einen Vektor mittels JNI ist viel einfacher als das Betreiben einer Verbundliste.
  • Die 5 stellt einen Vektor von Kinder-ISE eines Bus-ISE dar.
  • Konstruktion des IST
  • Der IST wird dynamisch gebaut, wenn das JavaOS die Plattform initialisiert. Zuerst erzeugt das Plattform-Verwaltungsprogramm die Wurzel des Unterbrechungsnamensraums und installiert sich selbst als Verwaltungsprogramm dieses Namensraums (Siehe die JSD-Spezifikation bezügliche des Namensraum-Verwaltungsprogramms). Als nächstes erzeugt das Plattform-Verwaltungsprogramm einen einzelnen Wurzel-CPU-Unterbrechungsquelleneintrag (ISE) und fährt dann fort, um ein Kinder-ISE für jede der CPU-Unterbrechungsebenen (die auf dieser Plattform zur Unterbrechung fähig sind) zu erzeugen.
  • Koordinierung des Einrichtungs- und des Unterbrechungsnamensraums
  • Wenn das Einrichtungsverwaltungsprogramm Einrichtungen mit Treibern und Busse mit Bus-Verwaltungsprogrammen verbindet, wächst der Baum, und Bedienungsprogramme werden installiert. Das Plattform-Verwaltungsprogramm und jeder der Bus-Verwaltungsprogramme, der aktiviert wird, läßt den Baum durch das Hinzufügen von Kinder-Unterbrechungsquelleneinträgen wachsen. Jeder neue Kinder-ISE querverweist mittels einer JSD-Eigenschaft auf einen Einrichtungseintrag in dem Einrichtungsnamensraum. Die 6 stellt dar, wie der Einrichtungs- und der Unterbrechungsnamensraum aufeinander querverweisen.
  • IST-Topologie und -Verwaltung
  • Das Plattform-Verwaltungsprogramm, jeder der Bus-Verwaltungsprogramme und jeder Treiber beeinflussen sich mit den ISE und dem IST in irgendeiner Weise.
  • Das Plattform-Verwaltungsprogramm erzeugt CPU und CPU-Ebenen
  • Das Plattform-Verwaltungsprogramm erzeugt den Unterbrechungsnamensraum und erzeugt dann ein einzelnes CPU-Objekt und mehrere Objekte auf CPU-Ebene. Jede JavaOS-Plattform wird mit eingebauten Bedienungsprogrammen (nativ und in Java) für jede der CPU-Ebenen geliefert.
  • Das Bus-Verwaltungsprogramm läßt den IST wachsen und schrumpfen
  • Bus-Verwaltungsprogramme, einschließlich des CPU-Bus-Verwaltungsprogramms (d. h. des Plattform-Verwaltungsprogramms), pflegen den IST auf Veranlassung der Treiber und anderer Bus-Verwaltungsprogramme. Für jede der Einrichtungen unter der Steuerung eines Bus-Verwaltungsprogramms wird mindestens ein Eintrag in der IST erzeugt, um die Unterbrechungsquelle dieser Einrichtung zu repräsentieren.
  • Die Einrichtungstreiber verwenden Einträge in den ISE
  • Treiber konstruieren Unterbrechungsquellenobjekte und weisen das passende Bus-Verwaltungsprogramm an, es in dem IST zu installieren. Die 7 stellt dar, welcher Programmcode welche Ebenen des IST verwaltet.
  • Unterbrechungsprogrammcode-Registrierung
  • Dieser zweite Überblicksabschnitt beschreibt, wie Programmcode in Bedienungsprogrammen registriert wird und Unterbrechungen behandelt.
  • Unterbrechungsprogrammcode-Arten
  • Vier Arten von Programmcode können in einem Unterbrechungsquelleneintrag registriert werden:
    Unterbrechungsbedienungsprogramme, Unterbrechungsermöglicher, Unterbrechungsverhinderer und Unterbrechungsbestätiger.
  • Ein Unterbrechungsbedienungsprogramm wird in Antwort auf eine Unterbrechung ausgeführt. Seine Aufgabe ist es, die Anforderung von Aufmerksamkeit durch die Einrichtung zu befriedigen, alle Echtzeitdaten zu sichern und die Steuerung so schnell wie möglich an das Betriebssystem zurückzugeben. Die vorliegende Erfindung sieht drei Arten von Unterbrechungsbedienungsprogrammen vor, wie unten ausgeführt ist.
  • Ein Unterbrechungsermöglicher bringt die Einrichtung in einen Zustand, in dem Unterbrechungen möglich oder unmaskiert sind. Ein CPU-Unterbrechungsermöglicher gibt alle Unterbrechungen frei, die den CPU-Unterbrechungscontroller (intern oder extern) teilen. Ein Ermöglicher auf CPU-Ebene demaskiert nur eine einzige Ebene von Unterbrechungen. Ein Bus- oder Einrichtungsermöglicher demaskiert nur diese Unterbrechungen von dem Bus oder der Einrichtung.
  • Ein Unterbrechungsverhinderer bringt die Einrichtung in einen Zustand, in dem Unterbrechungen unmöglich oder maskiert sind.
  • Ein Unterbrechungsbestätiger teilt der Hardware die Tatsache mit, daß das OS und/oder der Einrichtungstreiber die Unterbrechung behandelt (oder bestätigt) hat. Die Bestätigung kann stattfinden bevor oder nachdem ein Bedienungsprogramm tatsächlich zugeteilt ist.
  • Unterbrechungsbedienungsprogramme
  • Die vorliegende Erfindung weist drei Ebenen der Unterbrechungsverarbeitung auf, wobei jede Ebene ein Bedienungsprogramm und einen Ausführungskontext für diese Art von Bedienungsprogramm definiert. Der Microkernel beobachtet zwei der drei Ebenen von Unterbrechungsverarbeitung. Die dritte (Java-zentrische) Ebene der Unterbrechungsverarbeitung wird von der Java Virtual Machine mittels Java-Threads unterstützt.
  • Jede Art von Bedienungsprogramm, das mit einer Unterbrechungsverarbeitungsebene verknüpft ist, läuft in ihrem eigenen besonderen Ausführungskontext. Eine einzige Unterbrechungsquelle kann keine, beliebige oder alle dieser Arten von Bedienungsprogramm zugewiesen haben, um Unterbrechungen zu bearbeiten, die als Gruppe von Unterbrechungsbedienungsprogrammen arbeiten.
  • Jede Ebene von Unterbrechungsverarbeitung kann ihren Zustand und ihre Daten jeder anderen Ebene mittels des Unterbrechungsquelleneintrags als eines gemeinsamen Datenaustauschpunktes mitteilen. Zwei dieser Unterbrechungsverarbeitungsebenen sind zurückgestellt. Eine zurückgestellte Unterbrechungsebene ist für Nicht-Echtzeit-Bearbeitung wünschenswert und wird nur durch nativen Programmcode ausgelöst.
  • Die drei Arten von Unterbrechungsbearbeitung sind:
    • • Native Echtzeit-Unterbrechungsbearbeitung auf der ersten Ebene
    • • Native zurückgestellte Unterbrechungsbearbeitung auf der zweiten Ebene
    • • Zurückgestellte Java-Unterbrechungsbearbeitung auf der dritten Ebene
  • Bedienungsprogramme auf der ersten Ebene
  • Die erste Art von Unterbrechungsbedienungsprogrammen ist ein natives Unterbrechungsbedienungsprogramm, das auf der CPU-Unterbrechungsebene ausgeführt wird. Dieses Bedienungsprogramm besteht auf nativem Programmcode, der von 'C' kompiliert sein kann. Dieses Bedienungsprogramm gehorcht den 'C'-Aufrufkonventionen, die für den Prozessor definiert sind, auch dann, wenn das Bedienungsprogramm aus Assemblersprache besteht.
  • Beim Einspringen in das Bedienungsprogramm der ersten Ebene hat der Microkernel bereits die Prozessorregister gespeichert und kann auf einen separaten Unterbrechungsstack umgeschaltet haben. Die Wahl, auf welchem Stapelspeicher die Bedienungsprogramme der ersten Ebene ausgeführt werden, liegt beim Microkernel.
  • Viele Microkernel weisen einen Unterbrechungsstack pro CPU für diesen Zweck zu. Andere führen das Bedienungsprogramm einfach auf dem Stack des laufenden Threads aus, wobei sie den Stack nach der Fertigstellung der Verarbeitung des Bedienungsprogramms abwickeln.
  • Der Programmcode in dieser Art von Bedienungsprogramm wird ausgeführt, wenn er von dem Microkernel aufgerufen wird. Der Ausführungskontext der Unterbrechungsebene sieht die folgenden Unterstützungsdienste für das Bedienungsprogramm der ersten Ebene vor. Ein Unterbrechungsbedienungsprogramm der ersten Ebene kann JNI (Java Native Interface) verwenden um:
    • • Daten in dem Unterbrechungsquellenobjekt zu lesen und zu schreiben.
    • • Den IST zu durchqueren und anschließend andere Unterbrechungsbedienungsprogramme der ersten Ebene aufzurufen.
    • • Dem Objekt zu signalisieren, damit wartende Threads auf der zweiten, dritten oder Hauptausführungsebene laufen können.
  • Die Aufgabe eines Bedienungsprogramms der ersten Ebene liegt darin, die unmittelbaren Echtzeit-Anforderungen einer Einrichtung zu erfüllen, wie etwa das Lesen von Daten von einer Einrichtung mit begrenzten Pufferkapazitäten.
  • Nach der Erfüllung der Echtzeit-Anforderungen einer Einrichtung kann ein Unterbrechungsbedienungsprogramm der ersten Ebene veranlassen, daß ein Bedienungsprogramm der zweiten oder dritten Ebene von dem Microkernel in eine Warteschlange gestellt werden. Ein Bedienungsprogramm der ersten Ebene kann wählen, ob es den Zustand oder die Daten an zurückgestellte Bedienungsprogramme der zweiten und dritten Ebene durch das Unterbrechungsquellenobjekt mittels JNI weitergibt, um Daten in dem Objekt abzurufen oder zu setzen.
  • Der 'C'-Funktionsprototyp des Bedienungsprogramms entspricht dem eines nativen Methodenprototyps einer Unterbrechungsquelle mit einem einzigen langen Parameter, der die aktuelle Zeit seit dem Hochfahren in Mikrosekunden enthält. Das Bedienungsprogramm gibt eine ganze Zahl zurück, die signalisiert, ob die Unterbrechung von dem Bedienungsprogramm bearbeitet wurde oder nicht. Ein natives Unterbrechungsbedienungsprogramm auf CPU-Ebene ist wie folgt definiert:
    typedef long firstLevelHandler(void*ise, int64_t when);
  • Mehrere Unterbrechungsbedienungsprogramme der ersten Ebene können gleichzeitig ausgeführt werden, jede auf einer unterschiedlichen Ebene. Dies gilt für eine einzelne CPU und auch bei einem SMP-System. Bei einem SMP-System serialisiert der Microkernel jedoch die Ausführung jeder der Unterbrechungsebenen, so daß die 2 CPU nicht versuchen, das gleiche Bedienungsprogramm gleichzeitig auszuführen.
  • Die Unterbrechungsbedienungsprogramme der ersten Ebene sind der Programmcode mit der höchsten Priorität in dem System, welche andere Unterbrechungsbedienungsprogramme und Threads abblocken. Demnach sollte die Zeit, die in einem Unterbrechungsbedienungsprogramm der ersten Ebene verbracht wird, auf ein Minimum beschränkt werden.
  • Bedienungsprogramme der zweiten Ebene
  • Die zweite Art von Unterbrechungsbedienungsprogrammen wird im Kontext eines nativen Unterbrechungsthreads ausgeführt. Dieses Bedienungsprogramm besteht auch aus nativem Programmcode, der 'C'-Aufrufkonventionen befolgt, und ist als eine native Methode mit einem einzigen Parameter strukturiert.
  • Wie ein Bedienungsprogramm der ersten Stufe hat ein Bedienungsprogramm der zweiten Stufe eine begrenzte Anzahl von Unterstützungsdiensten zu seiner Verfügung. Native Bedienungsprogramme (der ersten und zweiten Stufe) können nur JNI verwenden, um ISE-Daten abzurufen und zu setzen und um andere native Methoden aufzurufen, die mit dem gleichen ISE verknüpft sind.
  • Ein Unterbrechungsbedienungsprogramm der zweiten Ebene ist in einer Warteschlange, um unter zwei Umstanden ausgeführt zu werden. Ein Unterbrechungsbedienungsprogramm der ersten Stufe kann ein Bedienungsprogramm der zweiten Stufe in eine Warteschlange stellen oder, wenn kein Bedienungsprogramm der ersten Ebene existiert, kann der Microkernel automatisch das Bedienungsprogramm der zweiten Ebene in Antwort auf eine Unterbrechung in eine Warteschlange stellen.
  • Ein natives Unterbrechungsbedienungsprogramm der zweiten Ebene ist wie folgt definiert:
    typedef long secondLevelHandler(void*ise, int64_t when);
  • Der native Unterbrechungsthread wird während des Registrierungsvorgangs des Bedienungsprogramms der zweiten Ebene durch den Microkernel erzeugt. Der Stack, der für einen nativen Thread zugewiesen ist, weist mindestens die Länge einer Seite auf.
  • Die Unterbrechungsbedienungsprogramme der zweiten Ebene werden nach den Unterbrechungsbedienungsprogrammen der ersten Ebene ausgeführt und können Bedienungsprogramme der dritten Ebene und andere Java- oder native Threads blockieren.
  • Bedienungsprogramme der dritten Ebene
  • Ein Java-Unterbrechungsbedienungsprogramm wird im Kontext eines Java-Threads ausgeführt und kann daher die gesamten Ressourcen der Sprache, des JavaOS und des JDK verwenden.
  • Das Java-Unterbrechungsbedienungsprogramm kann im Kontext irgendeines Java-Threads ausgeführt werden, inklusive eines vorher erzeugten Java-Systemthreads.
  • Ein Unterbrechungsbedienungsprogramm der dritten Ebene wird in die Warteschlange gestellt, um unter den folgenden Bedingungen ausgeführt zu werden. Wenn kein Ebenen-Bedienungsprogramm für eine Unterbrechungsquelle existiert, stellt der Microkernel das Unterbrechungsbedienungsprogramm der dritten Ebene in die Warteschlange, wenn die Einrichtung unterbricht.
  • Ein Unterbrechungsbedienungsprogramm der dritten Ebene kann auch ausgeführt werden, wenn es von einem Unterbrechungsbedienungsprogramm der ersten oder zweiten Ebene in die Warteschlange gestellt wird. Die Unterbrechungsbedienungsprogramme der dritten Ebene werden nach den Unterbrechungsbedienungsprogrammen der ersten und zweiten Ebene ausgeführt, und können andere Threads mit niedriger Priorität ausführen.
  • Eine Java-basierte Unterbrechungsbedienungsprogrammethode der dritten Ebene in der DeviceInterruptSource-Klasse wird wie folgt definiert und wird von den abgeleiteten spezifischen Treiberklassen überschrieben, um effektiv zu arbeiten.
  • Figure 00180001
  • Schnittstellen für Unterbrechungsprogrammcode
  • Bedienungsprogramme, Ermöglicher, Verhinderer und Bestätiger müssen alle bei einem Unterbrechungsquellenobjekt registriert sein, bevor sie vom JavaOS erkannt werden. Wenn ein neuer Eintrag in dem IST hinzugefügt wird, erbt der ISE den registrierten Programmcode seines Vorfahren. Später wird Programmcode registriert, der für das Kind spezifisch ist.
  • Java-Schnittstellen sind für jede Art von Unterbrechungsbehandlungsprogrammcode definiert. Interrupt Handler Interfaces
    Figure 00180002
    Figure 00190001
  • Die DeviceInterruptSource Klasse implementiert die DeviceInterruptManager-Schnittstelle. Die setFirstLevelIntrHandler-Methode dieser Schnittstelle hat einen ganzzahligen Parameter, der verwendet wird, um eine ganzzahlige Variable zu setzen, die zum Speichern der 'C'-Adressen der nativen Unterbrechungsbedienungsprogramme der ersten Ebene vorgesehen sind. Eine Kinder-Klasse von DeviceInterruptSource, die eine Unterbrechungsbedienungsprogramm der ersten Ebene benötigt, sollte ihre native Methode aufrufen, um die Adressen der Unterbrechungsbedienungsprogramme der ersten Ebene abzurufen. Daraufhin sollte sie die setFirstLevelIntrHandler-Methode aufrufen, um diesen Wert in dem ISE zu speichern. Sobald dieser ISE in dem IST eingefügt ist, können die CpuLevelInterruptSource-Klassenmethoden das Unterbrechungsbedienungsprogramm der ersten Ebene für diese Einrichtung mittels des 'C'-Funktionszeigers, der in dem ISE gespeichert ist, aufrufen.
  • Die Unterbrechungsbedienungsprogramme der zweiten Stufe werden ähnlich zu den Unterbrechungsbedienungsprogrammen der ersten Stufe gehandhabt.
  • Das Java-basierte Unterbrechungsbedienungsprogramm der dritten Ebene, handleThirdLevelInterrupt, weist eine Füllimplementierung in der DeviceInterruptSource-Klasse auf, die in den Kinder-Klassen überschrieben wird.
  • Unterbrechungsverwaltungsschnittstellen
    • public interface InterruptEnabler (...)
    • public interface InterruptDisabler (...)
    • public interface InterruptAcknowledger (...)
  • Unterbrechungsebenenbehandlung
  • Unterbrechungsbedienungsprogramme der ersten Ebene sind notwendig, wenn eine Einrichtung Daten verlieren kann, wenn sie nicht in einer zeitnahen Weise abgefertigt wird. Die Dauer eines Unterbrechungsbedienungsprogramms der ersten Ebene sollte in Mikrosekunden gemessen werden.
  • Unterbrechungsbedienungsprogramme der zweiten Ebene sind nützlich, wenn ausführliche Echtzeitverarbeitung ausgeführt wird, wie es etwa in Multimediaanwendungen notwendig ist.
  • Unterbrechungsbedienungsprogramme der dritten Ebene sind nützlich, wenn Nicht-Echtzeit-Verarbeitung ausgeführt wird, wie etwa Maus- und Tastatur-Ereignisbehandlung. Die Unterbrechungsbedienungsprogramme der dritten Ebene können aufgrund der Notwendigkeit, sich mit dem Garbage-Collector der virtuellen Maschine zu synchronisieren, vereinzelte Latenzzeiten erfahren. Wenn diese Latenzzeiten für die Verwaltung der Einrichtung nicht akzeptabel sind, sollte ein Unterbrechungsbedienungsprogramm der zweiten Ebene verwendet werden.
  • Es ist die Aufgabe des Treibers, auszuwählen, wann jede Ebene der Unterbrechungsbearbeitung verwendet werden soll. Die vorliegende Erfindung vereinfacht stark die Aufgabe der Synchronisation mehrerer Ebenen der Unterbrechungsbearbeitung.
  • Synchronisation der Unterbrechungsbedienungsprogramme
  • Bei der Unterbrechungsbehandlung tritt das Problem der Synchronisation auf. Die vorliegende Erfindung erlaubt es, daß der nicht an Unterbrechungsebenen gebundene Programmcode mit allen drei Ebenen der Unterbrechungsbearbeitung synchronisiert wird. Wir untersuchen zuerst Synchronisation der Bedienungsprogramme der zweiten und dritten Ebene.
  • Jeder Thread, der Bedienungsprogramme der zweiten und dritten Ebene ausführt, erwirbt den Java-Monitor, der mit dem ISE verbunden ist, bevor das Bedienungsprogramm ausgeführt wird. Ein Treiber kann so verhindern, daß ein Bedienungsprogramm ausgeführt wird, indem es lediglich den Monitor des ISE erwirbt. Wenn ein Unterbrechungsbedienungsprogramm schon ausgeführt wurde, blockiert der Treiber, bis das Bedienungsprogramm den Monitor freigibt. Wenn der Monitor frei war, erwirbt der Treiber den Monitor und blockiert alle weiteren Erwerbungsversuche durch ein Bedienungsprogramm, bis der Treiber den Monitor freigibt.
  • Die Synchronisation mit Programmcode, der nicht im Kontext eines Threads ausgeführt wird (d. h. Bedienungsprogramme der ersten Ebene), erfordert es, daß der Treiber die Unterbrechungsquelle selbst freigibt oder sperrt. Jedes Unterbrechungsquellenobjekt implementiert eine Schnittstelle, die Freigabe- und Sperrmethoden für diesen Zweck enthalten.
  • Die 8 stellt die Verwendung von Java-Monitoren bei der Unterbrechungsbearbeitung dar.
  • Stellen eines zurückgestellten Unterbrechungsbedienungsprogramms in die Warteschlange
  • Native Unterbrechungsbedienungsprogramme der ersten und zweiten Ebene können wählen, Arbeit auf einer Per-Unterbrechungs-Basis auf höhere Unterbrechungsebenen zurückzustellen. Ein einfaches Verfahren wird benötigt, um es Treibern zu erlauben, Arbeit zurückzustellen.
  • Um Arbeit von einer niedrigeren Unterbrechungsebene auf eine höhere Unterbrechungsebene zurückzustellen, benachrichtigt ein Unterbrechungsbedienungsprogramm nur das laufende Unterbrechungsquellenobjekt. Das Benachrichtigen des Unterbrechungsquellenobjekts veranlaßt, daß die virtuelle Maschine Threads reaktiviert, die auf die Unterbrechung warten.
  • Beispielsweise kann ein Unterbrechungsbedienungsprogramm in dem Kontext eines vorher erzeugten Java-Systemthreads oder im Kontext irgendeines anderen Threads laufen. Der wartende Thread unterhält eine Schleife, etwa wie folgt:
    Figure 00210001
  • Die 9 stellt das Konzept der zurückgestellten Unterbrechungsbehandlung dar:
  • Unterbrechungsdispatchen
  • Dieser Abschnitt des Dokuments beschreibt die Bearbeitung von Unterbrechungen mittels dreier Ebenen von Bedienungsprogrammen.
  • Dispatchen von Unterbrechungsbedienungsprogrammen benötigt Zugriff auf den IST. Auf den IST kann durch die nativen Methoden der CpuLevelInterruptSource-Klasse während der Plattforminitialisierung zugegriffen werden.
  • Der native Anteil der Unterbrechungsklasse stellt sicher, daß jeder Eintrag in dem Baum (ein Java-Objekt) in dem Java-Heap für die Dauer seiner Laufzeit verriegelt ist. Ein Zeiger auf das ISE, der die CPU repräsentiert, ist in einer statischen Variable zur Verwahrung und zum Zugriff durch die nativen Unterbrechungsdispatcher gespeichert, wenn er aufgerufen wird, um eine Unterbrechung zu behandeln.
  • Unterbrechungsdispatcher
  • Der Unterbrechungsdispatcher des JavaOS ist eine Komponente von nativem Programmcode, das Unterbrechungsbedienungsprogramme der ersten und zweiten Ebene ausführt. Der Unterbrechungsdispatcher liegt über dem Microkernel und registriert sich eigentlich als ein Bedienungsprogramm aller Unterbrechungsvektoren, die der Microkernel exportiert. Die 10 zeigt den Unterbrechungsdispatcher, der über dem Microkernel liegt.
  • Der Microkernel hat keine Kenntnis vom IST. Der Unterbrechungsdispatcher, der sich dem Microkernel präsentiert hat das einzige Bedienungsprogramm aller Unterbrechungen. Dieses Design verlangt wenig von einem darunter liegenden Microkernel außer einer einfachen Schnittstelle, um CPU-Vektor-Unterbrechungsbedienungsprogramme zu installieren und zu entfernen.
  • Die folgende 'C'-Schnittstelle unterstützt den Unterbrechungsdispatcher:
    void (*native_handler) (int level);
    void set_native_intr_handler (int level, native_handler func);
  • Der „level"-Parameter gibt eine CPU-Ebene (oder einen CPU-Vektor) an. Der „func"-Parameter gibt ein natives Unterbrechungsbedienungsprogramm an. Übergeben eines Null-Bedienungsprogramms entfernt das Bedienungsprogramm. Der Microkernel übergibt die aktuelle Unterbrechungsebene an das native Bedienungsprogramm als den einzigen Parameter.
  • Bus- und Einrichtungsunterbrechungsbehandlung
  • Jeder Bus und jede Einrichtung weist ein zugehöriges Unterbrechungsbedienungsprogramm auf. Bus-Unterbrechungsbedienungsprogramme führen eine spezielle Decodierungsfunktion aus, die eigentlich die Bedienungsprogramm-Aufruflogik, die von dem Unterbrechungsdispatcher verwendet wird, erhöht.
  • Die Aufgabe eines Bus-Bedienungsprogramms liegt darin, zu ermitteln, das Einrichtungs-Unterbrechungsbedienungsprogramm als nächstes aufgerufen werden soll. Das Einrichtungs-Unterbrechungsbedienungsprogramm wird von dem Bus-Unterbrechungsbedienungsprogramm mittels JNI aufgerufen. Im Fall von übereinander liegenden Bussen können mehrere Bus-Unterbrechungsbedienungsprogramme aufgerufen werden, um eine Unterbrechung zu decodieren. Schließlich wird Einrichtungsbedienungsprogramm aufgerufen, der die Unterbrechung der Einrichtung wirklich bearbeitet.
  • Bus- und Einrichtungs-Unterbrechungsbedienungsprogramme können auf allen Ebenen der Unterbrechungsbearbeitung existieren, abhängig von den Plattformanforderungen und Leistungsüberlegungen. Die Bearbeitung ist jedoch immer die gleiche. Bus-Unterbrechungsbedienungsprogramme ermitteln die Quelle der Unterbrechung auf einem bestimmten Bus. Einrichtungs-Unterbrechungsbedienungsprogramme bearbeiten die Unterbrechung. Der einzige Unterschied auf jeder der Ebenen ist der Ausführungskontext: Unterbrechung oder Thread, nativ oder Java.
  • Die 11 stell Bus- und Einrichtungs-Unterbrechungsbedienungsprogramme dar.
  • Die 12 stellt die InterruptSource Klassenhierarchie dar.
  • Leistungsverbesserungen
  • Die vorliegende Erfindung ermöglicht es, daß Threads auf Java-Ebene Unterbrechungen direkt bearbeiten, indem sie lediglich auf ein InterruptSource-Objekt warten. Dieses Programmodell beseitigt die Notwendigkeit, auf ein speziell reservierten Systemthread auf Java-Ebene zu wechseln, um ein Bedienungsprogramm aufzurufen.
  • Netzwerktreiber vom Stand der Technik installieren beispielsweise ein Unterbrechungsbedienungsprogramm, das einen „Leser"-Thread in dem Treiber aktiviert. Die vorliegende Erfindung erlaubt es, daß der „Leser"-Thread direkt auf die Unterbrechung wartet, anstatt sich darauf zu verlassen, daß der spezielle Unterbrechungssystemthread ausgeführt wird. Die 13 zeigt Leistungsverbesserungen für eine Ethernet-Leseunterbrechung.
  • Der folgende Abschnitt beschreibt detaillierter die Klassen und Schnittstellen der vorliegenden Erfindung. Klassen- und Schnittstellenzusammenfassung
    public interface InterruptSourceEntry extends Entry
    Methode oder Konstruktor Funktion
    public boolean isEnabled ( ). Ist diese Unterbrechungsquelle freigegeben?
    interface InterruptHandlers extends FirstLevelInterruptHandler, SecondLevelInterruptHandler, ThirdLevelInterruptHandler
    Methode oder Konstruktor Funktion
    Eine Sammlung von Bedienungsprogrammschnitt-stellen CpuLevel- und Bus-Unterbrechungsquellen deklarieren Implementierungen für alle diese Bedienungsprogramme. Keinen nativen Programmcode zu liefern ist OK, solange wie das System nicht versucht, die Methoden aufzurufen. Wenn dies geschieht, wird eine NativeMethodNotFoundExeption geworfen. Standard-„Null"-Bedienungsprogramme der ersten und zweiten Ebene werden geliefert, um diesen Zustand zu verhindern.
    public boolean insert (Entry child); Überschreiben der Einfügemethode der JSD Abtasten des Vektors von Kinder, um nach einem verfügbaren Steckplatz zu suchen. Wenn kein Steckplatz gefunden wird, Einfügen scheitern lassen. JSD anweisen, einen Eintrag in die JSD zu setzen (super.insert(child)). Wenn dies scheitert, Fehler zurückgeben. Kind in den Kinder-Vektor der Eltern einfügen. Native Methode initChild() aufrufen, um irgendwelche Initialisierungen auf nativer Seite auszuführen, einschließlich von JNI-Aufrufen, um andere native Methoden zu suchen.
    public boolean isEnabled ( ); public boolean isSrcEnabled = false; Ist diese Unterbrechungsquelle freigegeben? Boolescher Wert, der den aktuellen Zustand der Unterbrechungsquelle enthält
    abstract class InterruptSource extends SystemEntry implements InterruptSourceEntry
    Methode oder Konstruktor Funktion
    InterruptSource (InterruptSource parent, String name, int maxChildsources); Konstruieren einer InterruptSource. Einfügen dieser Quelle unter 'Eltern' in die JSD. Wenn diese Unterbrechungsquelle ein Vorfahre von zukünftigen Unterbrechungsquellen sein wird, maximale Anzahl von Kindersteckplätzen liefern. Der Konstruktor verwendet 'maxChildSources', um einen Vektor von InterruptSources zuzuteilen. Einfügen dieses Kindes in den Kinder-Vektor des Vorfahren. Vektorzugriff auf die Kinder ist eine Optimierung, so daß man keine JSD-Cursors verwenden muß, um die Liste von Kinder-Unterbrechungsquellen zu durchlaufen. Das Plattformverwaltungsprogramm erzeugt CPU- und CPULevel-Unterbrechungsquellen-Objekte, die diesen Konstruktor verwenden. Die letzte Aktion des Konstruktors besteht darin, die native init()-Methode aufzurufen, um Initialisierung auf nativer Seite durchzuführen. Beispielsweise unterbrechen Pins die Quelle auf dem Heap, so daß die native Seite sicher auf Unterbrechungsebene arbeiten kann.
    Interruptsource (String name, int maxChildSources); Identisch wie oben, außer daß nicht in die JSD oder den Kinder-Vektor der Vorfahren eingefügt wird. Voraussichtlich verwenden Bus-Verwaltungsprogramme und Einrichtungstreiber diesen Konstruktor. Das Bus-Verwaltungsprogramm fügt dann einen Eintrag in die JSD ein.
    public void inheritFromParent (InterruptS ource child); Kopieren der Unterbrechungsverwaltungsroutinen (Ermöglicher, Verhinderer und Bestätiger) vom Vorfahren zum Kind. Bus-Verwaltungsprogramme können dieses Merkmal verwenden, um Standardverwaltungsroutinen auf Kinder und somit auf Enkel zu übertragen (d. h. übereinander liegende Bus-Verwaltungsprogramme)
    public boolean insert (Entry child); Überschreiben der Einfügemethode der JSD. Abtasten des Vektors von Kinder, um nach einem verfügbaren Steckplatz zu suchen. Wenn kein Steckplatz gefunden wird, Einfügen scheitern lassen. JSD anweisen, einen Eintrag in die JSD zu setzen (super.insert(child)). Wenn dies scheitert, Fehler zurückgeben. Kind in den Kinder-Vektor der Eltern einfügen. Native Methode initChild() aufrufen, um irgendwelche Initialisierungen auf nativer Seite auszuführen, einschließlich von JNI-Aufrufen, um andere native Methoden zu suchen.
    public boolean isEnabled ( ); private boolean isSrcEnabled = false; Ist diese Unterbrechungsquelle freigegeben? Boolescher Wert, der den gegenwärtigen Zustand der Unterbrechungsquelle enthält
    public class CpuInterruptSource extends InterruptSource implements
    Methode oder Konstruktor Funktion
    public CpuInterruptSource (int nLevels); Konstruieren eines CpuInterruptSource-Objekts. Der Name ist der gleiche wie der Name der CPU in dem Einrichtungsbaum. Zudem eine x-Ref-Eigenschaft hinzufügen, die als „Einrichtung" bezeichnet wird und auf den CPU-Eintrag in dem Einrichtungsbaum zeigt. nLevels wird als 'maxChildSources' an den InterruptSource-Konstruktor übergeben.
    public native int getCpuInterruptLevelCount ( ); Zurückgeben die ganzzahlige Summe der Anzahl von Unterbrechungsebenen, die von dieser CPU unterstützt werden. Wird vom Plattformverwaltungsprogramm aufgerufen und das Ergebnis wird an den Cpu-InterruptSource-Konstruktor übergeben.
    private native boolean initCpu ( ); Durchführen einer einmaligen CPU-Unterbrechungsverwaltungs-Initialisierung (CPU- und plattformabhängig). Wird vom Konstruktor aufgerufen.
    public native boolean enableInterrupt ( ) Gibt CPU-Unterbrechungen frei (alle Ebenen)
    public native boolean disableInterrupt ( ) Sperrt CPU-Unterbrechungen (alle Ebenen)
    public native void acknowledgeInterrupt ( ) Bestätigt eine CPU-Unterbrechung – kann interne oder externe Unterbrechungscontroller verwenden (Plattform-/CPU-spezifisch). Kann völlig untätig sein.
    InterruptManagement
    public class CpuLevelInterruptSourceextends InterruptSource
    Methode oder Konstruktor Funktion
    public CpuLevelInterruptSource (CpuInterruptSource cpu, int level, int maxChildrensSharigngLevel); Konstruieren eines CpuLevelInterruptSource-Objekts, um die Unterbrechungsebene #'level' dieser CPU zu repräsentieren. Der Name dieses Eintrags wird zu „cpu.getName() + Level" + level. Speichern von level als ganze Zahl, so daß nativer Programmcode Zugriff hat. Die Plattform liefert die maximale Anzahl von Kindereinrichtungen, die zum gleichzeitigen Teilen dieser Unterbrechungsebene fähig sind.
    public int getLevel0; Zurückgeben der Unterbrechungsebene, die mit dieser Quelle verbunden ist.
    private native boolean initCpuLevel ( ) Einmalige Initialisierung der Unterbrechungsebene einer CPU. CPU- und plattformspezifisch. Kann untätig sein. Wird vom Konstruktor aufgerufen.
    private int levelNumber; Enthält die Unterbrechungsebene vom Konstruktor.
    public static native int maxDevicesForLevel (int level); Die für die Plattform spezifische Methode gibt die maximale Anzahl von Einrichtungen wieder, die diese Unterbrechungsebene zur gleichen Zeit teilen können. Das Ergebnis wird vom PlatformManager als ein Parameter für den Konstruktor verwendet.
    public boolean handleThirdLevelInterrupt (long when); Unterbrechungsbedienungsprogramm der dritten Ebene für diese Ebene Wird vom Systemunterbrechungsthread in Antwort auf eine Unterbrechung auf dieser Ebene aufgerufen. Dieses Bedienungsprogramm der dritten Ebene ruft Bedienungsprogramme der dritten Ebene von allen Kindern auf.
    public native boolean handleSecondLevelInterrupt (long when); Unterbrechungsbedienungsprogramm der zweiten Ebene für diese Ebene. Wird vom nativen Systemunterbrechungsthread aufgerufen.
    public native boolean handleFirstLevelInterrupt (long when); Unterbrechungsbedienungsprogramm der ersten Ebene für diese Ebene.
    public native boolean enableInterrupt ( ); Gibt Unterbrechungen auf CPU-Ebene frei, indem sie diese Ebene in dem Unterbrechungscontroller der CPU oder der Plattform demaskiert.
    public native boolean disableInterrupt ( ); Sperrt Unterbrechungen auf CPU-Ebene, indem sie diese Ebene in dem Unterbrechungscontroller der CPU oder der Plattform maskiert.
    public native void acknowledgeInterrupt ( ); Bestätigt eine Unterbrechung auf CPU-Ebene. Eine für die CPU oder den Unterbrechungscontroller spezifische Operation.
    implements InterruptManagement, InterruptHandlers public class DeviceInterruptSource extendsInterruptSource
    Methode oder Konstruktor Funktion
    public DeviceInterruptSource (String deviceName); Konstruieren einer DeviceInterruptSource für die ausgewählte benannte Einrichtung. Der Name wird vom Bus-Verwaltungsprogramm beim Hochfahren des Treibers erhalten. Weiter Hinzufügen einer x-Ref-Eigenschaft, die als „Einrichtung" bezeichnet wird und auf den Einrichtungseintrag in dem Einrichtungsbaum zeigt.
    public DeviceInterruptSource (String deviceName, int maxChildren); Der BusInterruptSource-Konstruktor ruft diesen Konstruktor auf.
    public boolean handleThirdLevelInterrupt (long when); Unterbrechungsbedienungsprogramm der dritten Ebene für diese Einrichtung. Subklassen überschreiben diese Standardmethode.
    protected int firstLevelIntrHandler; Dieser wird mittels der setFirstLevelIntrHandler-Methode auf die Adresse der nativen Unterbrechungsbedienungsprogramm-Funktion der ersten Ebene gesetzt.
    protected int secondLevelIntrHandler; Dieser wird mittels der setSecondLevelIntrHandlerMethode auf die Adresse der nativen Unterbrechungsbedienungsprogramm-Funktion der zweiten Ebene gesetzt.
    implements DeviceInterruptManager;Runnable public abstract class BusInterruptSource extends DeviceInterruptSource implements InterruptManagement
    Methode oder Konstruktor Funktion
    Bus InterruptSource (Entry bus, int maxSources); Konstruieren einer BusInterruptSource für den ausgewählten Bus. Zudem eine x-Ref-Eigenschaft hinzufügen, die als „Einrichtung" bezeichnet wird und auf den Einrichtungseintrag in dem Einrichtungsbaum zeigt. Die ganzzahlige 'maxSources'-Zahl definiert die maximale Anzahl von Kindereinrichtungs-Unterbrechungsquellen, die dieser Bus behandelt. Mittels dieser ganzen Zahl erzeugt der Konstruktor einen Vektor von InterruptSources.
    public abstract boolean enableInterrupt ( ); Zwingen einer Subklasse, eine busspezifische Unterbrechungsermöglichermethode zu implementieren. Kann einfach den Ermöglicher des Vorfahren erben.
    public abstract boolean disableInterrupt ( ); Zwingen einer Subklasse, eine busspezifische Unterbrechungsverhinderermethode zu implementieren. Kann einfach den Verhinderer des Vorfahren erben.
    public abstract boolean acknowledgeInterrupt ( ); Zwingen einer Subklasse, eine busspezifische Unterbrechungsbestätigungsmethode zu implementieren. Kann einfach den Bestätiger des Vorfahren erben.
    public interface FirstLevelInterruptHandler
    Methode oder Konstruktor Funktion
    public boolean handleFirstLevelInterrupt (long when); Prototyp für ein natives Unterbrechungsbedienungsprogramm der ersten Ebene. Dem Bedienungsprogramm werden zwei Parameter übergeben. Der erste Parameter ist das übliche Handle für dieses Objekt. Der zweite ist ein Zeitstempel in Mikrosekunden.
    public interface SecondLevelInterruptHandler public boolean
    Methode oder Konstruktor Funktion
    handleFirstLevelInterrupt (long when); Prototyp für ein natives Unterbrechungsbedienungsprogramm der ersten Ebene. Dem Bedienungsprogramm werden zwei Parameter übergeben. Der erste Parameter ist das übliche Handle für dieses Objekt. Der zweite ist ein Zeitstempel in Mikrosekunden.
    public interface InterruptEnabler
    Methode oder Konstruktor Funktion
    public boolean enableInterrupt ( ); Gibt wahr zurück, wenn die Unterbrechung schon freigegeben war, und sonst falsch. Gibt Unterbrechungen von dieser Quelle frei.
    public interface InterruptDisabler
    Methode oder Konstruktor Funktion
    public boolean disableInterrupt ( ); Gibt wahr zurück, wenn die Unterbrechung schon freigegeben war, und sonst falsch. Sperrt Unterbrechungen von dieser Quelle.
    public interface InterruptAcknowledger
    Methode oder Konstruktor Funktion
    public void acknowledgeInterrupt ( ); Bestätigt Quelle der Unterbrechung bevor und/oder nachdem die Unterbrechung gehandhabt wurde. Die Wahl ob vorher oder nachher ist von der Einrichtung und der Hardware abhängig.
  • Die oben beschriebenen Klassen werden auf einem computerlesbaren Medium gespeichert, wie etwa Floppydisks, einer CD-ROM oder einer optischen Disk. Alternativ werden sie einem Computersystem 10 in einem Festwertspeicher bereitgestellt werden oder werden in Form einer Computerdaten-Trägerwelle über ein Netzwerk bereitgestellt.

Claims (4)

  1. Verfahren zum Bearbeiten von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, einem Speicher, der einen Microkernel enthält, mehreren Einrichtungen, welche Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, mehreren Treiber, wovon jeder mit wenigstens einer der Quellen verknüpft ist, und einer Systemdatenbank, wobei das Verfahren folgende Schritte aufweist: Erzeugen eines Einrichtungseintrages in der Datenbank für jede der Einrichtungen; Erzeugen eines Unterbrechungsquellenbaums in der Datenbank mit mehreren Quellenbaumeinträgen, von denen jeder ein Objekt enthält, das eine der Quellen darstellt; Implementieren einer Unterbrechungsregistrierungsschnittstelle, was Verfahren umfaßt, welche Softwarekomponenten zur Unterbrechungsbehandlung installieren, die mit jeder Quelle in einem entsprechenden Quellenbaumeintrag verknüpft sind; Querverweisen von jedem der Einrichtungseinträge auf einen entsprechenden der Quellenbaumeinträge; Antworten auf eine von einer Einrichtung erzeugten Unterbrechung, indem die Ausführung eines einzelnen Unterbrechungsdispatchers veranlaßt wird, und durch Identifizieren der Einrichtung an den Unterbrechungsdispatcher; und Bearbeiten der Unterbrechung mit einem Bedienungsprogramm, das von dem Unterbrechungsdispatcher aufgerufen wird und der identifizierten Einrichtung entspricht.
  2. Vorrichtung zum Bearbeiten von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, mehreren Einrichtungen, welche Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, und mehreren Treibern, von denen jeder mit wenigstens einer der Quellen verknüpft ist, wobei die Vorrichtung folgendes umfaßt: mehrere Softwarekomponenten zur Unterbrechungsbehandlung, die von den Treibern unterstützt werden, von denen jeder mit einer Unterbrechungsquelle verknüpft ist; einen Speicher, der eine Datenbank mit Einrichtungseinträgen für jede der Einrichtungen enthält und einen Unterbrechungsquellenbaum, der mehrere Unterbrechungsquellenbaumeinträge enthält, von denen jeder ein Objekt enthält, das eine der Quellen darstellt und auf einen entsprechenden Einrichtungseintrag querverweist, wobei jeder der Unterbrechungsquellenbaumeinträge einen Verweis zu wenigstens einer der Softwarekomponenten zur Unterbrechungsbehandlung aufweist; und einen einzelnen Unterbrechungsdispatcher zum Antworten auf eine Unterbrechung, die von der CPU identifiziert wurde, durch Ausführung einer entsprechenden Softwarekomponente zur Unterbrechungsbehandlung, die von einem Unterbrechungsquellenbaumeintrag spezifiziert wird, welcher der identifizierten Einrichtung entspricht.
  3. Computerlesbares Medium, das Befehle zum Bereitstellen der Funktionalität zum Bearbeiten von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, einem Speicher und mehreren Einrichtungen, welche Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, durch: Erzeugen einer Datenbank in dem Speicher; Erzeugen eines Einrichtungseintrags in der Datenbank für jede der Einrichtungen; Erzeugen eines Unterbrechungsquellenbaums in der Datenbank mit mehreren Quellenbaumeinträgen, von denen jeder ein Objekt enthält, das eine der Quellen darstellt; Implementieren einer Unterbrechungsregistrierungsschnittstelle, was Verfahren umfaßt, die Softwarekomponenten zur Unterbrechungsbehandlung installieren, die mit jeder Quelle in einem entsprechenden Quellenbaumeintrag verknüpft sind; Querverweisen von jedem der Einrichtungseinträge auf einen entsprechenden der Quellenbaumeinträge; Antworten auf eine Unterbrechung, die von einer Einrichtung erzeugt wird, indem die Ausführung eines einzelnen Unterbrechungsdispatcher veranlaßt wird, und durch Identifizieren der Einrichtung an den Unterbrechungsdispatcher; und Bearbeiten der Unterbrechung durch Aufrufen eines Bedienprogramms, das der identifizierten Einrichtung entspricht, durch den Unterbrechungsdispatcher.
  4. Computerdatensignal auf einer Trägerwelle, das Befehle zum Bereitstellen der Funktionalität enthält zum Bearbeiten von Unterbrechungen in einem objektorientierten Computersystem mit einer CPU, einem Speicher und mehreren Einrichtungen, welche Quellen bilden, die in der Lage sind, Unterbrechungen zu erzeugen, durch: Erzeugen einer Datenbank in dem Speicher; Erzeugen eines Einrichtungseintrags in der Datenbank für jede der Einrichtungen; Erzeugen eines Unterbrechungsquellenbaums in der Datenbank mit mehreren Quellenbaumeinträgen, von denen jeder ein Objekt enthält, das eine der Quellen darstellt; Implementieren einer Unterbrechungsregistrierungsschnittstelle, was Verfahren umfaßt, die Softwarekomponenten zur Unterbrechungsbehandlung installieren, die mit jeder Quelle in einem entsprechenden Quellenbaumeintrag verknüpft sind; Querverweisen von jedem der Einrichtungseinträge auf einen entsprechenden der Quellenbaumeinträge; Antworten auf eine Unterbrechung, die von einer Einrichtung erzeugt wird, indem die Ausführung eines einzelnen Unterbrechungsdispatcher veranlaßt wird, und durch Identifizieren der Einrichtung an den Unterbrechungsdispatcher; und Bearbeiten der Unterbrechung durch Aufrufen eines Bedienprogramms, das der identifizierten Einrichtung entspricht, durch den Unterbrechungsdispatcher.
DE69936162T 1998-03-26 1999-03-17 Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem Expired - Fee Related DE69936162T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/047,938 US6052739A (en) 1998-03-26 1998-03-26 Method and apparatus for object-oriented interrupt system
US47938 1998-03-26

Publications (2)

Publication Number Publication Date
DE69936162D1 DE69936162D1 (de) 2007-07-12
DE69936162T2 true DE69936162T2 (de) 2008-03-06

Family

ID=21951844

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69936162T Expired - Fee Related DE69936162T2 (de) 1998-03-26 1999-03-17 Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem

Country Status (4)

Country Link
US (2) US6052739A (de)
EP (1) EP0945797B1 (de)
JP (1) JPH11327919A (de)
DE (1) DE69936162T2 (de)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6594708B1 (en) * 1998-03-26 2003-07-15 Sun Microsystems, Inc. Apparatus and method for object-oriented memory system
US6256618B1 (en) * 1998-04-23 2001-07-03 Christopher Spooner Computer architecture using self-manipulating trees
US6351751B1 (en) * 1998-05-14 2002-02-26 Sun Microsystems, Inc. Persistent storage managers for configuring client/server environments
US6230311B1 (en) * 1998-06-12 2001-05-08 International Business Machines Corporation Apparatus and method for disabling methods called on an object
US6199194B1 (en) * 1998-09-25 2001-03-06 Adaptec, Inc. Method and system for programming firmware over a computer network
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6549949B1 (en) 1999-08-31 2003-04-15 Accenture Llp Fixed format stream in a communication services patterns environment
US6954220B1 (en) 1999-08-31 2005-10-11 Accenture Llp User context component in environment services patterns
US7289964B1 (en) 1999-08-31 2007-10-30 Accenture Llp System and method for transaction services patterns in a netcentric environment
US6842906B1 (en) 1999-08-31 2005-01-11 Accenture Llp System and method for a refreshable proxy pool in a communication services patterns environment
US6742015B1 (en) 1999-08-31 2004-05-25 Accenture Llp Base services patterns in a netcentric environment
US6640244B1 (en) 1999-08-31 2003-10-28 Accenture Llp Request batcher in a transaction services patterns environment
US6502213B1 (en) * 1999-08-31 2002-12-31 Accenture Llp System, method, and article of manufacture for a polymorphic exception handler in environment services patterns
US6640238B1 (en) 1999-08-31 2003-10-28 Accenture Llp Activity component in a presentation services patterns environment
US6636242B2 (en) 1999-08-31 2003-10-21 Accenture Llp View configurer in a presentation services patterns environment
US6640249B1 (en) 1999-08-31 2003-10-28 Accenture Llp Presentation services patterns in a netcentric environment
US6601234B1 (en) 1999-08-31 2003-07-29 Accenture Llp Attribute dictionary in a business logic services environment
US6571282B1 (en) 1999-08-31 2003-05-27 Accenture Llp Block-based communication in a communication services patterns environment
US6715145B1 (en) 1999-08-31 2004-03-30 Accenture Llp Processing pipeline in a base services pattern environment
US6615253B1 (en) 1999-08-31 2003-09-02 Accenture Llp Efficient server side data retrieval for execution of client side applications
US6601192B1 (en) 1999-08-31 2003-07-29 Accenture Llp Assertion component in environment services patterns
US6339832B1 (en) * 1999-08-31 2002-01-15 Accenture Llp Exception response table in environment services patterns
US6578068B1 (en) 1999-08-31 2003-06-10 Accenture Llp Load balancer in environment services patterns
US6760799B1 (en) * 1999-09-30 2004-07-06 Intel Corporation Reduced networking interrupts
US6978444B1 (en) * 2000-08-01 2005-12-20 International Business Machines Corporation Computer-implemented method and system for automatically invoking a predetermined debugger command at a desired location of a single thread of a program
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
US20030088710A1 (en) * 2001-07-05 2003-05-08 Sukhwinder Sandhu Simulation environment software
US7272827B2 (en) * 2002-04-03 2007-09-18 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
FI20021314A0 (fi) 2002-07-03 2002-07-03 Nokia Corp Tiedonsiirtomenetelmä ja järjestely
US7028122B2 (en) * 2002-08-07 2006-04-11 Sun Microsystems, Inc. System and method for processing node interrupt status in a network
ATE362270T1 (de) * 2002-09-23 2007-06-15 Ericsson Telefon Ab L M Verfahren und mechanismus zum übertragen von nachrichten
US6789142B2 (en) * 2002-12-18 2004-09-07 Intel Corporation Method, system, and program for handling interrupt requests
US7389496B2 (en) * 2003-07-02 2008-06-17 Agere Systems Inc. Condition management system and a method of operation thereof
US7281240B1 (en) * 2003-11-14 2007-10-09 Sun Microsystems, Inc. Mechanism for lossless, lock-free buffer switching in an arbitrary-context tracing framework
US7596779B2 (en) * 2004-02-19 2009-09-29 Agere Systems Inc. Condition management callback system and method of operation thereof
US7636795B2 (en) * 2004-06-30 2009-12-22 Intel Corporation Configurable feature selection mechanism
EP1622009A1 (de) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM-Architektur und Systeme
US7680972B2 (en) * 2005-02-04 2010-03-16 Sony Computer Entertainment Inc. Micro interrupt handler
US7552355B2 (en) * 2005-02-24 2009-06-23 Lsi Logic Corporation System for providing an alternative communication path in a SAS cluster
US8041861B2 (en) * 2005-05-27 2011-10-18 Samsung Electronics Co., Ltd. Memory device communicating with a host at different speeds and managing access to shared memory
US7613918B2 (en) * 2006-02-16 2009-11-03 Finjan Software Ltd. System and method for enforcing a security context on a downloadable
US20120144485A9 (en) 2005-12-12 2012-06-07 Finjan Software, Ltd. Computer security method and system with input parameter validation
US7996835B2 (en) * 2006-10-10 2011-08-09 International Business Machines Corporation System, method and program for managing communication with multiple configurations for virtual machine
GB2445991B (en) * 2007-01-26 2009-04-01 Key Criteria Connect Ltd Method of loading software in mobile and desktop environments
GB2444305B (en) * 2007-01-26 2010-12-22 Key Criteria Connect Ltd Method of identifying devices in mobile and desktop environments
US8132152B2 (en) * 2007-06-08 2012-03-06 Apple Inc. Extending a scripting language to provide an object hierarchy
US8079025B2 (en) * 2007-06-08 2011-12-13 Apple Inc. Asynchronous load of source dependencies
US9645992B2 (en) 2010-08-21 2017-05-09 Oracle International Corporation Methods and apparatuses for interaction with web applications and web application data
US8239599B1 (en) 2011-06-16 2012-08-07 Hewlett-Packard Development Company, L.P. System and method for handling data streams
US9722972B2 (en) 2012-02-26 2017-08-01 Oracle International Corporation Methods and apparatuses for secure communication
US8868810B2 (en) * 2012-04-12 2014-10-21 International Business Machines Corporation Managing over-initiative thin interrupts
US9344422B2 (en) 2013-03-15 2016-05-17 Oracle International Corporation Method to modify android application life cycle to control its execution in a containerized workspace environment
WO2014144961A1 (en) 2013-03-15 2014-09-18 Oracle International Corporation Establishing trust between applications on a computer
US9129112B2 (en) 2013-03-15 2015-09-08 Oracle International Corporation Methods, systems and machine-readable media for providing security services
KR102263913B1 (ko) * 2014-09-24 2021-06-14 오라클 인터내셔날 코포레이션 컨테이너화된 작업공간 환경에서 그것의 실행을 제어하기 위하여 안드로이드 애플리케이션 라이프 사이클을 수정하기 위한 방법
US10394730B2 (en) * 2014-11-14 2019-08-27 Cavium, Llc Distributed interrupt scheme in a multi-processor system

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5680624A (en) * 1993-12-21 1997-10-21 Object Licensing Corporation Object oriented interrupt system
US5379431A (en) * 1993-12-21 1995-01-03 Taligent, Inc. Boot framework architecture for dynamic staged initial program load
US5423043A (en) * 1994-01-21 1995-06-06 International Business Machines Corporation Method and apparatus for creating and monitoring logical associations among desktop objects
JPH0887451A (ja) * 1994-09-09 1996-04-02 Internatl Business Mach Corp <Ibm> アドレス変換を管理する方法およびアドレス変換マネージャ
US5568644A (en) * 1995-05-05 1996-10-22 Apple Computer, Inc. Method and apparatus using a tree structure for the dispatching of interrupts

Also Published As

Publication number Publication date
EP0945797A3 (de) 2004-02-04
EP0945797B1 (de) 2007-05-30
EP0945797A2 (de) 1999-09-29
JPH11327919A (ja) 1999-11-30
DE69936162D1 (de) 2007-07-12
US6052739A (en) 2000-04-18
US6615342B1 (en) 2003-09-02

Similar Documents

Publication Publication Date Title
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung
DE60006217T2 (de) Techniken zum gewähren des zugriffs durch eine kontextsperre in einem gerät mit kleinem platzbedarf unter verwendung von einem eingangspunktobjekt
DE69834087T2 (de) Verfahren und Gerät zur Vorverarbeitung und Verpackung von Klassendateien
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE69533530T2 (de) Verfahren und System zur dynamischen Aggregation von Objekten
DE60125705T2 (de) Vorrichtung und Verfahren zur Implementierung eines HTTP Programmstacks auf einem Client
DE69938218T2 (de) Vorrichtung und Verfahren zum Laden eines Java Anwendungsprogramms
DE60208710T2 (de) Plattformunabhängige im-voraus-kompilierung
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE10296798B4 (de) SMM-Lader und -Ausführungsmechanismus für Komponentensoftware für mehrere Architekturen
DE102010051477B4 (de) Verfahren in einer computerplattform sowie computerplattform zum gemeinsamen benutzen von virtuellen speicherbasierten mehrversionsdaten zwischen den verschiedenartigen prozessoren der computerplattform
DE69636855T2 (de) Architektur für einen dynamisch programmierbaren zustandswechsel-gerätetreiber
DE69327448T2 (de) Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem
DE69630329T2 (de) Verfahren zur Verwaltung des Deaktivierens und Ausschaltens eines Servers
DE2458065C2 (de) Datenverarbeitungsanlage
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE69635337T2 (de) Erweiterbares und austauschbares system von netzwerkkomponenten
DE602004006947T2 (de) Plattformunabhängige Erzeugung einer einmaligen Kennung
DE112012004747B4 (de) Verborgenes automatisiertes Spiegeln von Daten für native Schnittstellen in verteilten virtuellen Maschinen
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
US20080072238A1 (en) Object synchronization in shared object space
DE69818103T2 (de) Anrufmechanismus für statisch und dynamisch verknüpfte funktionen in einer objektorientierten steuerung unter verwendung von heterogenen entwicklungsumgebungen
DE10225664A1 (de) System und Verfahren zum Prüfen von Systemabrufereignissen mit Systemabrufumhüllungen
DE69818135T2 (de) Verfahren zum Zugriff auf Datenbankinformation

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee